[ Effective C++ ] 항목 19 : 클래스 설계는 타입 설계와 똑같이 취급하자

Minsu._.Lighting·2023년 11월 23일
0

[ Effective C++ ] 정리 모음집
" C++ 프로그래머의 필독서, 스콧 마이어스의 Effective C++ 를 읽고 내용 요약 / 정리 "

[핵심]

" 내가 설계한 클래스는 모든 것이 내 손에 달려있다! "

  • 클래스 설계는 타입 설계와 같다, 타입을 정의하기 전에 모든 고려사항을 빠짐없이 점검하자!

💡 좋은 클래스를 설계해보자!

  • 문법이 자연스럽고...
  • 의미구조가 직관적이고...
  • 효율적인 구현이 한 가지 이상 가능해야 하고...

📢 C++ 에서는 충분한 고민 없이 클래스를 정의했다간 세가지 중 하나도 달성하기 어렵다!



📌 새로 정의한 타입의 객체 생성 및 소멸은 어떻게 이루어져야 하는가?

  • 클래스 생성자 및 소멸자의 설계가 바뀜

📌 객체 초기하는 객체 대입과 어떻게 달라야 하는가?

  • 생성자와 대입 연산자의 동작 및 차이점을 결정짓는 요소
    - 초기화와 대입을 헷갈리지 않는게 중요

📌 새로운 타입으로 만든 객체가 값에 의해 전달되는 경우에 어떤 의미를 줄 것인가?

  • '값에 의한 전달'을 구현 하는 것은 복사 생성자 임을 기억하자.

📌 새로운 타입이 가질 수 있는 적법한 값에 대한 제약은 무엇으로 잡을 것인가?

  • 클래스의 '불변속성'을 반드시 지켜주자
    - 클래스 멤버 함수 안에서의 여러 점검 루틴이 좌우 됨.
    ( 생성자, 대입 연산자, 각종 쓰기 함수는 특히 더)

📌 기존의 클래스 상속 계통망에 맞출 것인가?

  • 다른 클래스들이 상속하게 만들자고 결정했다면 이에 따라 가상함수 여부가 정해짐

📌 어떤 종류의 타입 반환을 허용할 것인가?

  • 내가 만든 타입은 결국 기존의 수많은 타입들과 엮인다는 사실을 잊지 말자

📌 어떤 연산자와 함수를 두어야 의미가 있을까?


📌 표준 함수들 중 어떤 것을 허용하지 말것인가?

  • private 화 시키는 것

📌 새로운 타입에 대한 접근권한을 어느쪽에 줄것인가?

  • public, protected, private, friend 등

📌 선언되지 않은 인터페이스도 무엇을 둘 것인가?


📌 새로 만드는 타입이 얼마나 일반적인가?

  • 내가 정의하는 것이 동일 계열의 타입군 전체라면 새로운 클래스 템플릿을 정의해야 함

📌 정말로 꼭 필요한 타입인가?

  • 기존의 클래스에 대해 기능 몇 개가 아시워서 파생클래스를 만들고 있다면 비멤버 함수, 템플릿으로 대체하자

profile
오코완~😤😤

0개의 댓글

관련 채용 정보