저번장까지는 설계에 관한 이야기보다는 상속시 유의해야 되는 부분이 강조되었다면, 이번 항목은 .. 설계에 관한 부분이다. 나는 지금까지 private 상속이면 "is-implemented-in-terms-of(...는...를 써서 구현됨)" 이고 클래스 내부에서 객체선언하면 "has-a(...는...를가짐)" 이다 라고 이해했지만, 이것은 잘못된 이해이다. 각각은 추상화된 설계 패턴의 일부분이라는 것이다. 이 패턴 들은 객체 합성으로(.. 이라고 불리지만, 레이어링, 포함 통합 내장 으로도 불린다)으로 만들수 있다는 것이다. 그렇다면 다시 제목을 봐보자.. 항목 38: "has-a(...는...를가짐)" 혹은 "is-implemented-in-terms-of(...는...를 써서 구현됨)"를 모형화 할 ..
책 정리/Effective C++ 3판 검색 결과
이렇게 모모 하지 말자, 모모 하자. 이런식으로 나온 제목을 보고 있노라면, 마음이 편해진다. 생각할 필요 없이 그대로 믿고 따르면 되기 때문이다.(.. 물론 알아야 할 필요가 없다는것은 아니지만. ㅋ) 왜냐하면 함수의 디폴트 매개변수는 정적 바인딩되고, 상속되는 함수는 동적으로 바인딩 되기 때문이다. .. 이렇게만 정리하면 편하겠지만, 정적 바인딩, 동적 바인딩에 대해서 알아야 더 편한 세상에 살수 있어, 정리해 둔다. 정적 바인딩이란, 확실한 것들을 미리 묶는다라는 개념으로. 미리 묶었기 때문에 예측하여 캐싱할수가 있어, 더 빠르다. 공식적으론 선행 바인딩(Early Binding)이라 부른다.(이 말이 개인적으로 더 좋다고 보는데..) 동적 바인딩이란, 유동적이기에 미리 묶을수 없지만, 동적으로 다..
항목 34 에서 가상 함수의 단점을 지적한 부분이 책에는 있는데, 나 같은 경우 생략했다. ^^; 단점은 가상함수는 기본 정의도 제공되기 때문에, 제공된 기본정의를 사용하다보면, 정작 다른 작동을 해야 할 때도 재정의를 해야 한다는것을 까먹고, 기본정의를 사용하여 디버깅이 아주 힘들수 있다는 점이다. 이것을 애초에 막고자 하려면 가상 함수를 대채할 무엇인가가 필요하다는 주제로 쓰여진 항목 35 이다. 자~ 이러한 단점들이 있음에도 가상 함수를 사용 한다는것을 찜찜해 하는 영리한 사람들은 생각하기 시작했다. "대체 할 수 있는게 없을까?" 필자는 두 팔을 다 걷어, 다른 방법을 몇가지 알려 준다고, 곽용재씨께서 말씀해 주셨다. ㅋ; 하나, 비가상 인터페이스 관용구(non-virtual interface :..
인터페이스 상속과 구현 상속을 무엇을 의미 하는가? 기본 클래스의 멤버 함수의 상속 방법을 두고 하는 말이다. 인터페이스 상속과 구현 상속의 차이점은 무엇인가? 인터페이스 상속이란, 순수 가상 함수의 상속을 말한다. 구현 상속이란, 가상 함수와 비가상 함수의 상속을 말한다. 각 함수들은? 순수 가상 함수 : 가상함수 이나, 함수의 정의부분이 없고, 선언 부분만 있는 함수 가상 함수 : 파생 클래스에서 가상함수를 받는 함수가 없다면, 기본 클래스 함수가 호출되고 있다면, 파생 클래스의 가상 함수를 호출시켜주는 매체가 되는 함수 비 가상 함수 : 일반 멤버 함수, 각 함수들의 사용 법은? 순수 가상 함수 : 모든 파생 클래스마다 동일한 역활을 하는 고유의 동작을 필요로 하게 될 때 가상 함수 : 모든 파생 ..
현실세계에서나 C++ 세계에서나 이름은 중요하다. 그래서 이런 관용어구가 딱 들어 맞는데 "이름을 훔쳐가는 자는 빼앗긴 사람만 빈털터리로 만들고 마는 것입니다 : He that filches from me my good name ... makes me poor indeed : 곽용재씨께선 명예를 이름으로 본문성격에 맞추어 해석했다고 적혀 있음" 어떤가 딱 들어 맞는가? 왜 이런 의미로 쓰이는지 C++의 코드를 통하여, 알아 보자. 1. 예시 코드 int x;// 전역 변수 void someFunc() { double x;// 지역 변수 std::cin >> x;// 입력을 받아, 지역변수 x에 새 값을 읽어 넣는다. } 이 코드가 어떻게 움직일지는 다들 알겠지만 전역 변수 x에 값을 넣는것이 아닌, "최..
최근댓글