C++

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

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