본문 바로가기

분류 전체보기

(201)
[C++] 스마트 포인터 1. 스마트 포인터동적 메모리 관리를 단순화하는 도구다. 기본 포인터와는 다르게, 자동으로 메모리를 해제하여 메모리 누수를 방지한다. #include int main(){ std::unique_ptr smart_ptr(new int(10)); //메인 함수 끝나고 smart_ptr 사라질 때 메모리도 자동 해제 return 0;} 2. 사용 이유int* ptr = new int(10); //메모리 할당delete ptr; //메모리 해제일반 포인터는 메모리 동적 할당 시 꼭 해제를 해줘야 하는데, 해제를 하지 않으면 메모리는 시스템에 계속 할당된 상태로 남게 된다. 이 경우 메모리 누수가 생겨 메모리 사용량이 증가하고, 시스템의 성능을 저하시킨다.int* ptr = new int(10);delete..
[C++] 이동 의미론 (Move Semantics) 1. 이동 의미론: 기존 객체의 주소 및 값을 새로운 오브젝트에 소유권 이전하게 한다.새로운 메모리 영역을 할당받는 것이 아닌 기존 메모리 영역을 새로운 변수의 메모리 주소로 이동한다.깊은 복사를 할 필요 없이 효율적으로 이전할 수 있다.각 객체, 클래스에 이동 생성자와 이동 대입 연산자가 정의되어 있어야 사용할 수 있다.//&&은 보편 참조로, 문맥에 따라 r-value 참조가 될 수도, l-value 참조가 될 수도 있다Test(Test&& other) //r-value reference { cout 2. 가질 수 있는 문제점객체가 실제로 이동하는 게 아닌, 포인터를 이동하는 것이기 때문에 생기는 문제가 있다.이전에 소유하고 있는 객체가 포인터를 들고 있으면 한쪽에서 delete를 할 때 dangl..
[C++] 포인터 1. 포인터: 메모리의 주소 값을 저장하는 변수int* pa = &a; //a의 주소값주소 연산자 &: 변수 이름 앞에 사용하여 해당 변수의 메모리 주소 값을 반환한다.참조 연산자 *: 포인터의 이름이나 주소 앞에 사용하여 해당 주소를 참조한 후 주소에 저장되어 있는 값을 반환한다.int main(){ int a = 10; int* pa = &a; cout 포인터는 할당하려는 변수의 자료형과 일치해야 한다. 역참조 시 가리키는 내용을 해석하기 위해서이다. 2. 이중 포인터: 포인터를 가리키는 포인터를 뜻한다.int main(){ int p = 10; int* pt = &p; int** ppt = &pt; cout > p의 주소 cout *pt => p의 값..
[C++] L-value, R-value 1. L-value, R-valueL-value (Left value): 표현식 이후에도 사라지지 않는 값으로, 접근할 수 있는 주소를 가지고 있는 변수다. 계속 접근할 수 있다.R-value (Right value): 표현식 이후 사라지는 값으로, 임시 변수다.int main(){ int x = 3; const int y = x; int z = x + y; int* p = &x; cout 이 코드에서l-value: x, y, z, pr-value: 3, x+y, &x, string("one"), x++#include int GetValue(){ return 10;}int main(){ int i = GetValue(); //GetValue()는 단순 값을 반환하기 때문에 r..
객체지향 설계의 5가지 원칙 (SOLID) 객체지향 설계에서 지켜야 할 5가지 소프트웨어 개발 원칙 SOLID에 대해 알아보자. SOLID 설계 원칙은 좋은 객체지향 설계를 위한 원칙이다.이 때, 좋은 설계란 예기치 못한 변경사항이나 요구사항이 생길 경우에 흔들림 없이 유연하게 대처 가능한 설계를 말한다.SOLID 원칙을 적용할 경우 코드 확장, 유지 보수 관리를 쉽게 할 수 있다. 또한, 불필요한 복잡성을 줄여 개발의 생산성을 높일 수 있다.추상화와 다형성을 적극적으로 이용하는 것이 이 원칙의 핵심이다. 1. SRP(Single Responsibility Principle): 단일 책임 원칙클래스(객체)가 변경되는 이유가 한가지여야 한다. 하나의 액터에 대해서만 책임을 져야 한다는 것이다.하나의 클래스는 하나의 기능을 담당해서 하나의 책임을 수..
[프로그래머스] 각도기 C++ [문제 설명]각에서 0도 초과 90도 미만은 예각, 90도는 직각, 90도 초과 180도 미만은 둔각 180도는 평각으로 분류합니다. 각 angle이 매개변수로 주어질 때 예각일 때 1, 직각일 때 2, 둔각일 때 3, 평각일 때 4를 return하도록 solution 함수를 완성해주세요. 예각 : 0 직각 : angle = 90 둔각 : 90 평각 : angle = 180[제한사항]0 angle은 정수입니다. [문제 풀이]#include #include #include int solution(int angle) { if(angle>0&&angle 90 && angle
[프로그래머스] 카펫 C++ [문제 설명]정수 배열 numbers가 매개변수로 주어집니다. numbers의 원소의 평균값을 return하도록 solution 함수를 완성해주세요. [제한사항]0 ≤ numbers의 원소 ≤ 1,000 1 ≤ numbers의 길이 ≤ 100 정답의 소수 부분이 .0 또는 .5인 경우만 입력으로 주어집니다. [문제 풀이]#include #include using namespace std;double solution(vector numbers) { double answer = 0; for(int i=0;i
[프로그래머스] 나이 출력 C++ [문제 설명]머쓱이는 선생님이 몇 년도에 태어났는지 궁금해졌습니다. 2022년 기준 선생님의 나이 age가 주어질 때, 선생님의 출생 연도를 return 하는 solution 함수를 완성해주세요 [제한사항]0 나이는 태어난 연도에 1살이며 매년 1월 1일마다 1살씩 증가합니다. [문제 풀이]#include #include using namespace std;int solution(int age) { int answer = 0; answer = 2022 - age + 1; return answer;}