스콧 마이어스의 Effective C++을 읽고 개인 공부 목적으로 요약 작성한 글입니다!
💡 클래스 설계는 타입 설계 이다!
새로운 타입을 정의하기 전에, 이번 항목에 나온 모든 고려사항들을 빠짐없이 점검해보도록 하자.
등 할 일이 많다.
클래스를 설계할 때는 언어의 기본 제공 타입을 설계하듯 해야 한다.
클래스의 생성자, 소멸자의 설계, 메모리 할당 함수(new, delete)를 결정짓는 요소
생성자와 대입 연산자의 동작, 둘 사이의 차이점을 결정짓는 요소
값에 의한 전달 구현 == 복사생성자
클래스의 불변속성(invariant) : 클래스의 데이터 멤버의 몇 가지 조합 값 중 반드시 유효해야 하는 조합
불변속성이 영향을 미치는 부분
: 생성자, 대입 연산자, 쓰기 함수(setter), 함수가 발생시키는 예외, 예외 지정 (exception specification)
이미 존재하는 클래스로부터 상속시킬거라면, 이 클래스에 의해 설계에 제약이 생길거다.
(특히 멤버 함수의 가상함수 여부)
그리고 만약
내가 만든 클래스를 다른 클래스들이 상속할 수 있게 만들고 싶다면 (기본 클래스로 만들고 싶다면)
멤버 함수의 가상 함수의 여부가 결정될거다. 특히 소멸자
내가 만든 타입은 다른 타입들과 호환 가능 해야 한다.
클래스 안에 선언할 함수를 결정하는 요소
private으로 선언해야 하는 함수는 무엇?
클래스 멤버를 public, protected, private 영역 중 어디에 둘 것인지 결정.
friend로 만들어야 할 클래스, 함수에 대한 결정
한 클래스를 다른 클래스에 중첩시켜도 되는지에 대한 결정
내가 만들 타입이 보장할 수 있는 부분은,
수행 성능 및 예외 안정성, 자원 사용 (잠금 및 동적 메모리)
내가 보장하겠다고 결정한 결과는 클래스 구현에서 제약으로 작용한다.
내가 정의하는 클래스가 동일 계열의 타입군 (family of types)일 수도 있다.
이럴 경우, 내가 정의해야 하는 것은 새로운 클래스 템플릿..
파생 클래스를 만드는 이유가 몇 가지 기능 추가라면,
비멤버 함수나 템플릿을 몇 개 더 정의하는게 낫다.
😊
정말,,
클래스 설계는 너무 어려운 것 같다
이걸 한 번에 외우거나, 하는건 안될 것 같고
후술될 부분들까지 공부하고 난 뒤에 다시 봐야겠다.