[cpp][effective_c++_19] 클래스 설계는 타입 설계와 똑같이
2022. 12. 1. 19:09
Programming/C++
좋은 클래스를 설계하기 위한 여러 가지 질문들 새로 정의한 타입의 객체 생성 및 소멸은 어떻게 이루어져야 하는가? 객체 초기화는 객체 대입과 어떻게 달라야 하는가? 초기화와 대입을 헷갈리지 않는게 가장 중요함, 각각에 해당되는 함수 호출이 아예 다르다 새로운 타입으로 만든 객체가 값에 의해 전달되는 경우에 어떤 의미를 줄 것인가? 어떤 타입에 대해 값에의한 전달을 구현하는 쪽은 복사 생성자이다 새로운 타입이 가질 수 있는 적법한 값에 대한 제약은 무엇으로 가질 것인가? 기존의 클래스 상속에 맞출 것인가? 이미 갖고 있는 클래스로부터 상속을 시킨다면, 당연히 이번에 설계한 클래스는 이녀석들에 의해 제약을 받게 된다. 특히 멤버함수가 가상인가 비가상인가 여부가 가장 크다. 이번에 설계하는 클래스를 다른클래스..
[cpp][effective_c++_18] 인터페이스 설계는 쓰기엔 쉽게, 엉터리로 쓰기엔 어렵게
2022. 11. 23. 01:06
Programming/C++
함수도 인터페이스,클래스도 인터페이스,템플릿 또한 인터페이스요.... 사용자가 의도한 대로 동작하지 않는다면 그 코드는 컴파일 되어야 하지 않는 것이 맞다. 또한, 어떤 코드가 컴파일된다면... 사용자가 원하는 대로 동작해야한다. '제대로 쓰기는 쉬우나 엉터리로 쓰기엔 어려운' 인터페이스를 개발하려면 우선 사용자가 저지를 만한 실수를 머리에 넣어 두고 있어야 한다. 예를 들면, 날짜를 저장하는 클래스의 생성자를 설계해보자 class Date{ public: Date(int month, int day, int year); ... }; 여기엔 사용자가 저지를 만한 실수가 있다! 매개변수의 전달 순서를 잘못쓰거나,유효 범위를 넘어서는 숫자가 들어갈 수 있다. 1. Date date(30,3,1999) ->mo..