2025/09 19

[C++] 가상 함수

순서가상 함수virtual 키워드란?virtual 키워드 특징순수 가상 함수란?순수 가상 함수의 특징순수 가상 함수 사용 목소멸자에 virtual 키워드를 붙이는 경우가상 함수가상 함수는 런타임 다형성을 가능하게 하는 매커니즘으로, virtual 키워드를 사용하여 선언함컴파일 타임이 아닌 런타임에 어떤 함수가 호출될지 결정해야 할 때 사용함.가상 함수로 인해 자식 클래스에서 함수 오버라이딩으로 새로운 기능을 추가하거나 기능을 변경할 수 있음.추가 키워드 override: virtual 키워드로 선언한 함수를 상속받아 사용할 때 상속받은 class에서 override를 붙여 재정의함final: 더이상 virtual로 선언된 함수가 재정의되지 않도록 제한함virtual inheritance: 다이아몬드 상속..

C++ 2025.09.03

[C++]const 키워드

순서const 키워드란?const 키워드의 주요 역할상수표현식const 키워드 장단점const 키워드란?변수나 객체의 값이 초기화된 이후 변경되지 않도록 하는 상수임을 나타내며, 컴파일러가 해당 값의 수정을 막아 코드의 안정성을 높임변수를 선언할 때 자료형 앞에 붙여 해당 변수가 상수임을 명시함다른 const 문법과 함께 사용될 때는 위치에 따라 포인터가 가리키는 대상의 값을 변경하지 못하게 하거나, 포인터 자체의 주소 변경을 막는 등의 적용 범위가 달라짐.const를 선언할 때 동시에 반드시 초기화가 필요함const 키워드의 주요 역할값 불변성 보장: const로 선언된 변수는 초기화된 후에는 값을 변경할 수 없음 => 이는 코드의 일관성을 유지하고 의도하지 않은 값 변경을 방지하여 안정성을 높여줌컴파..

C++ 2025.09.03

[C++]static 키워드

순서static 키워드란?함수에서의 static 키워드클래스에서의 static 키워드변수에서의 static 키워드static 키워드를 사용하는 이유static 키워드란?static 키워드는 사용되는 위치에 따라 의미가 달라지며 크게 함수, 클래스, 변수 3가지정도 존재함함수에서의 static 키워드함수 내부의 static 지역 변수: 함수 호출이 끝난 후에도 값이 소멸되지 않고 다음 호출 시까지 유지됨전역 static 함수: 해당 함수가 정의된 소스 파일 내에서만 접근 가능하게 하여, 다른 파일에서 동일한 이름의 함수와 충돌하는 것을 방지함.클래스에서의 static 키워드정적 멤버 변수: 클래스의 모든 객체가 공유하는 변수로, 클래스 인스턴스 생성과 무관하게 메모리를 차지하며 클래스 이름으로 직접 접근할..

C++ 2025.09.03

[C++] 캐스트 연산자/RTTI

순서캐스트 연산자란?캐스트 연산자의 종류RTTI란?RTTI의 동작 조건RTTI의 장점과 단점캐스트 연산자란?데이터 타입을 다른 데이터 타입으로 명시적으로 변환하는 데 사용되는 특수 연산자.런타임 시 변수의 타입을 강제로 바꾸거나, 컴파일러게 명확한 의도를 전달하여 타입 변환을 수행하는 역할타입을 바꾸는 것 이상으로 타입 안전성과 목적에 맞는 변환을 명시적으로 제어할 수 있게 설계된 연산자.캐스트 연산자의 종류static_cast정적 타입 변환 연산자로 컴파일 타임에 타임 검사를 수행함.타입 변환이 명확하고 안전할 때 사용함.기본형 변환, 상속 관계에서 업캐스트/다운캐스트, 포인터 > 정수 변환 등에 상용됨안전성이 비교적 높지만 다운캐스트 시 런타임 체크는 없음dynamic_cast런타임 타입을 안전한 다..

C++ 2025.09.03

[C++] malloc/free와 new/delete

순서malloc/freenew/delete차이점malloc/freeC와 C++언어에서 메모리 할당 및 해제를 위해 사용되는 함수임. 하지만 C스타일로 C에서 주로 이용됨malloc()은 프로그램 실행 중에 필요한 만큼의 메모리 공간을 힙영역에서 할당함malloc()은 void*을 반환함. C에서 다른 포인터로의 암묵적 변환이 허용되어 캐스트가 불필요free()함수는 malloc()으로 할당 받았던 메모리 공간을 운영체제로 반환함.생성자와 소멸자를 호출하지 않으며 실패 시 NULL을 반환함new/deleteC++에서 동적 메모리 할당 및 해제를 위해 사용되는 연산자new는 프로그램 실행 중에 필요할 때 힙 영역에 메모리를 할당하고 객체를 생성함new 동작시 내부에서 operator new로 void*를 반..

C++ 2025.09.03

[C++]동적할당과 깊은/얕은 복사

순서동적할당이란?동적할당시 주의할 점동적할당을 안전하게 하는 법깊은 복사얕은 복사깊은 복사와 얕은 복사의 차이동적할당이란?런타임에 필요한 크기의 메모리를 동적 메모리 영역인 힙에 요청하여 사용하고, 반환하는 방식new로 할당하고 delete로 반환하는 형태지역 변수는 스택에 할당되어 호출이 끝나면 자동 소멸하지만, 동적할당은 직업 해제해줘야 하여 스택과 대비됨동적할당시 주의할 점메모리 누수(Leak): 할당한 메모리를 해제하지 않아 누적되어 프로그램 메모리 사용량 증가더블 프리: 같은 포인터를 두 번 delete댕글링 포인터: 해제된 메모리를 참조혼용 사용: new와 free 또는 malloc과 delete와 같이 맞지 않는 요청예외 안전성 미고려: 중간에 예외가 나면 반환이 누락될 수 있음동적할당을 안..

C++ 2025.09.03

[C++]포인터와 레퍼런스

순서포인터란?댕글링 포인터void 포인터레퍼런스란?포인터와 레퍼런스의 차이포인터란?메모리 주소를 값으로 저장하는 변수를 포인터라고 함.int* a 형식으로 선언하는데 int* a = &b 라고 작성하면 a는 b의 주소를 가리키고 있는 형태이다.포인터는 다른 주소로 재지정 가능하며 없음을 표현할 때 nullptr로 사용함.포인터는 선택적 객체 참조를 표현할 때 유용함.댕글링 포인터포인터가 여전히 해제되어 유효하지 않은 메모리 영역을 가리키고 있을 때 해당 포인터를 댕글링 포인터라고 한다.댕글링 포인터의 문제메모리 접근 시 예측 불가능한 동작메모리 접근 불가 시 Segmentation fault 발생잠재적인 보안 위험예방/대처법스마트 포인터 사용(RAII 원칙)delete/free 이후 즉시 nullptr을..

C++ 2025.09.02

[C++]클래스와 구조체

순서클래스구조체클래스와 구조체클래스객체 지향 프로그래밍의 핵심 단위이며, 데이터와 행동을 하나의 단위로 묶어 추상화한 타입임.객체를 생성할 수 있는 설계도 역할을 함.멤버의 기본 접근 지정자는 private으로 객체지향 설계를 통해 정보 은닉을 강조하기 위함임.클래스 설계 원칙캡슐화 원칙: 데이터 은닉과 내부 상태 안전성을 보장단일 책임 원칙: 클래스는 하나의 역할만 수행상속과 다형성 설계: is-a 관계만 상속RAII와 자원 관리: 생성자에서 자원 획득, 소멸자에서 해제, 스마트 포인터, lock_guard 등 표준 RAII 활용인터페이스와 구현 분리값/참조 타입 구분자원관리 Rule of Three/Five/ZeroRule of Three클래스가 동적 자원을 직접 관리할 때, 컴파일러가 자동으로 생성..

C++ 2025.09.01

[C++]C와 C++ 언어의 차이점

순서C언어C++ 언어C와 C++언어의 차이점C언어시스템 프로그래밍을 위한 절차지향적인 언어이다.특징운영체제인 유닉스 개발을 위해 만들어졌으며, 하드웨어 제어가 필요하여 고수준 언어임에도 저수준 언어의 특성을 갖게됨.메모리 주소에 직접 접근하여 데이터를 조작하고, 프로세서를 제어하는 기능을 제공함.하드웨어를 효율적으로 제어하여 프로그램의 실행 성능을 높일 수 있음.특정 하드웨어에 종속되지 않고 다양한 컴퓨터 시스템에서 실행될 수 있어 이식성이 뛰어나며 예측 가능한 성능을 중시한다.간결한 언어가 핵심으로 문법과 표준 라이브러리가 비교적 작아 학습 비용이 낮고, 빌드 체인도 단순함.간결하다는 의미는 문법 요소가 적고, 추상화 도구가 단순하며 표준 라이브러리 규모가 작은편을 의미함언어는 간단하지만, 문제 해결의..

C++ 2025.09.01