티스토리 뷰

🟩 오늘의 목표

  • C++ 클래스의 기본 선언 방식과 접근 제한자를 통한 캡슐화 원리를 복습한다.
  • 생성자 초기화 리스트와 소멸자를 포함한 객체의 생명 주기를 복습한다.
  • Getter/Setter 패턴과 함께 this 포인터상수 멤버 함수의 필요성을 이해하고 학습한다.
  • 다양한 생성자 방식을 지원하는 생성자 오버로딩의 개념을 복습한다.

 

🟧 1. 클래스의 선언과 데이터 보호


🟦 클래스 선언과 세미콜론

클래스를 정의할 때는 class 이름 { }; 형식을 사용하며, 닫는 중괄호 뒤에 세미콜론을 빠뜨리지 않아야 함을 복습했다. 이는 클래스 정의가 하나의 실행 문장이 아니라 선언문임을 의미한다는 점을 확인했다.

🟦 접근 제한자를 통한 캡슐화

외부 접근을 차단하는 private과 허용하는 public을 구분하여 데이터를 설계했다. 이를 통해 객체의 내부 상태는 보호하고 필요한 기능만 외부로 노출하는 캡슐화의 기본 원리를 다졌다.

 

🟧 2. 멤버 함수와 데이터 관리 기법


🟦 Getter와 Setter의 유효성 검사

private 변수에 접근하기 위해 Getter와 Setter를 작성했다. 단순히 값을 대입하는 것이 아니라, Setter 내부에서 조건문을 활용해 데이터가 비정상적인 값으로 설정되지 않도록 방어적인 코드를 작성하는 법을 복습했다.

🟦 상수 멤버 함수 (const) (추가 학습)

값을 읽기만 하는 Getter 함수 뒤에 const 키워드를 붙이는 습관을 익혔다. 이는 함수 내부에서 실수로 멤버 변수를 수정하는 것을 방지하고, 상수 객체에서도 해당 함수를 호출할 수 있게 해주는 실무적인 안전장치임을 확인했다.

 

🟧 3. 객체의 생명 주기와 초기화


🟦 초기화 리스트와 생성자 오버로딩

생성자 본문에서 값을 대입하는 것보다 효율적인 생성자 초기화 리스트(: 변수(값)) 사용법을 익혔다. 또한, 매개변수가 없는 기본 생성자와 매개변수를 받는 생성자를 동시에 선언하는 생성자 오버로딩을 통해 객체를 생성하는 다양한 경로를 확보하는 법을 복습했다.

🟦 this 포인터의 활용 (추가 학습)

멤버 함수의 매개변수 이름과 멤버 변수의 이름이 같을 때, this->hp = hp;와 같이 this 포인터를 사용하여 객체 자신을 명시적으로 가리키는 법을 배웠다. 이를 통해 변수 이름 짓기의 제약에서 벗어나 더 직관적인 코드를 작성할 수 있게 되었다.

🟦 소멸자를 통한 자원 관리

객체가 파괴될 때 자동으로 호출되는 소멸자(~ClassName)를 통해 로그를 남기거나 할당된 자원을 정리하는 과정을 실습했다. 게임 매니저 클래스에서 프로그램 종료 시 최종 데이터를 저장하는 로직 등을 소멸자에 배치하는 구조를 확인했다.

 

🟧 4. 종합 설계 및 실습 결과


🟦 Monster, Slime, Bird 클래스 설계

요구사항에 맞춰 각 클래스의 멤버 변수를 private으로 숨기고, 초기화 리스트를 통해 생성 시점에 데이터를 설정했다. 소멸자에서는 각 객체의 '처치'나 '소멸' 메시지를 출력하여 생명 주기가 끝나는 지점을 명확히 확인했다.

🟦 GameManager와 Game 클래스 연동

점수 합산(AddScore)이나 레벨 업(NextLevel) 기능을 멤버 함수로 구현하여 클래스가 단순한 데이터 저장소가 아닌 스스로 동작하는 객체가 되도록 설계했다. 특히 isRunning 같은 플래그 변수로 게임의 상태를 관리하는 매니저 클래스의 전형적인 구조를 복습했다.

 

🟫 오늘 느낀 점

  • 클래스의 기본 뼈대부터 this 포인터와 const 멤버 함수 같은 디테일한 요소까지 다루며, 객체 지향 프로그래밍이 데이터의 오염을 방지하기 위해 얼마나 꼼꼼한 안전장치들을 제공하는지 깊이 이해하게 되었다.

'내일배움캠프 Unreal_7기 > 본캠프' 카테고리의 다른 글

TIL - 25일차  (0) 2026.01.02
TIL - 24일차  (0) 2025.12.31
TIL - 22일차  (0) 2025.12.29
TIL - 21일차  (0) 2025.12.29
TIL - 20일차  (0) 2025.12.26