- 순서
- 클래스
- 구조체
- 클래스와 구조체
- 클래스
- 객체 지향 프로그래밍의 핵심 단위이며, 데이터와 행동을 하나의 단위로 묶어 추상화한 타입임.
- 객체를 생성할 수 있는 설계도 역할을 함.
- 멤버의 기본 접근 지정자는 private으로 객체지향 설계를 통해 정보 은닉을 강조하기 위함임.
- 클래스 설계 원칙
- 캡슐화 원칙: 데이터 은닉과 내부 상태 안전성을 보장
- 단일 책임 원칙: 클래스는 하나의 역할만 수행
- 상속과 다형성 설계: is-a 관계만 상속
- RAII와 자원 관리: 생성자에서 자원 획득, 소멸자에서 해제, 스마트 포인터, lock_guard 등 표준 RAII 활용
- 인터페이스와 구현 분리
- 값/참조 타입 구분
- 자원관리 Rule of Three/Five/Zero
- Rule of Three
- 클래스가 동적 자원을 직접 관리할 때, 컴파일러가 자동으로 생성하는 특별 멤버 함수가 얕은 복사를 하므로, 이중 해제등의 문제가 발생하는것을 주의하기 위해 세가지를 직접 정의해야한다는 규칙.
- 복사와 소멸 안전 보장
- Rule of Five
- 기존 Three + 이동생성자, 이동 대입 포함하는데, 이동 연산자를 정의하면 불필요한 복사를 피하고 성능 향상
- 복사/이동/소멸 안전, 성능 향상
- Rule of Zero
- 현재 C++ 권장 방식으로 직접 자원을 관리하지 말고, RAII객체를 사용하라.
- 복사, 이동, 소멸자를 직접 정의할 필요 없음 > 코드 단순화, 안정성 보장
- Rule of Three
- 구조체
- 데이터 중심으로 다루는 타입으로, 여러 변수를 하나로 묶어 값 단위로 관리함.
- 멤버의 기본 접근 지정자는 public으로 C언어와의 호환성을 유지하고 데이터의 모음이라는 의미를 강조하기 위함
- 구조체 설계 원칙
- 단순 데이터 중심으로 설계: 멤버는 public으로 두고 캡슐화는 최소
- 값 단위로 의미 있는 객체 만들기
- 배열/연속 메모리 사용 가능: 벡터/버퍼/그래픽 데이터 구조에 유리
- 함수는 부가적 유틸리티: 상태를 다루는 최소한의 연산 포함
- 필요 시 RAII 적용: 리소스가 있는 구조체는 소멸자에서 안전하게 해제
- 클래스와 구조체
- 클래스와 구조체는 기능적으로 차이는 거의 없음. 멤버, 상속, 접근 지정자, 가상함수 등 동일하게 소유할 수 있음
- 문법적 차이
- 멤버의 기본 접근 지정자 차이
- 기본 상속 접근
- 위 두가지 기본 접근 지정자는 struct는 public이며, class는 private으로 되어있음.
- 관례적 차이
- struct는 주로 plain data/ POD-like / 값 타입 / 단순한 데이터 구조에 사용함.
- class는 캡슐화/행동(메서드)/불변성 관리/객체를 표현할 때 사용함.
'C++' 카테고리의 다른 글
| [C++]동적할당과 깊은/얕은 복사 (0) | 2025.09.03 |
|---|---|
| [C++]포인터와 레퍼런스 (0) | 2025.09.02 |
| [C++]C와 C++ 언어의 차이점 (1) | 2025.09.01 |
| [C++]전위/후위연산자 (0) | 2025.08.06 |
| [C++] ObjectPooling(오브젝트 풀) (0) | 2025.08.04 |