클래스 정의 기본 구조
C++에서 클래스는 다음과 같은 기본 구조를 가집니다.
접근 지정자 (Access Specifiers)
private
: 클래스 내부에서만 접근 가능
public
: 어디서든 접근 가능
protected
: 해당 클래스와 파생 클래스에서 접근 가능
참고 : 클래스의 기본 접근 지정자는 private
입니다.
멤버 변수 (Data Members)
멤버 변수는 클래스의 상태를 나타내는 변수들입니다.
멤버 함수 (Member Functions)
멤버 함수는 클래스의 행동을 정의하는 함수들입니다.
생성자 (Constructors)
생성자는 객체를 초기화하는 특별한 멤버 함수입니다.
- 기본 생성자
- 매개변수가 있는 생성자
- 복사 생성자
- 이동 생성자 (C++ 11)
소멸자 (Destructors)
소멸자는 객체가 소멸될 때 호출되는 특별한 멤버 함수입니다.
객체 생성
객체는 스택 또는 힙에 생성할 수 있습니다.
멤버 초기화 리스트 (Member Initializer List)
멤버 초기화 리스트는 생성자에서 멤버 변수를 초기화하는 효율적인 방법입니다.
위임 생성자 (Delegating Constructors)
C++ 11에서 도입된 위임 생성자를 사용하면 다른 생성자를 호출하여 중복 코드를 줄일 수 있습니다.
복사 생성자 (Copy Constructor)
복사 생성자는 기존 객체를 이용해 새 객체를 생성할 때 사용됩니다.
이동 생성자 (Move Constructor)
C++ 11에서 도입된 이동 생성자는 리소스 소유권을 이전할 때 사용됩니다.
정적 멤버 (Static Members)
정적 멤버는 클래스의 모든 객체가 공유하는 멤버입니다.
const 멤버 함수
const 멤버 함수는 객체의 상태를 변경하지 않는 함수입니다.
실습 : 도서관 관리 시스템
다음은 도서관 관리 시스템의 일부를 구현한 예제입니다.
연습 문제
BankAccount
클래스를 설계하세요. 이 클래스는 계좌 번호, 소유자 이름, 잔액을 private 멤버로 가지고, 입금, 출금, 잔액 조회 기능을 public 메서드로 제공해야 합니다.
Date
클래스를 구현하세요. 이 클래스는 년, 월, 일을 표현하고, 날짜를 설정하고 조회하는 메서드를 제공해야 합니다. 또한, 윤년을 고려하여 유효한 날짜인지 확인하는 기능도 구현하세요.
String
클래스를 직접 구현해보세요. 이 클래스는 문자열을 동적으로 할당하고, 복사 생성자와 이동 생성자를 포함해야 합니다. 또한, 문자열 연결, 부분 문자열 추출 등의 기능을 제공해야 합니다.
참고자료
- Stroustrup, Bjarne. "The C++ Programming Language (4th Edition)"
- Meyers, Scott. "Effective Modern C++ : 42 Specific Ways to Improve Your Use of C++11 and C++14"
- Sutter, Herb. "Exceptional C++ : 47 Engineering Puzzles, Programming Problems, and Solutions"
- C++ Reference : Classes
- ISO C++ Core Guidelines : Classes and Class Hierarchies