이번 항목에선 C++ 프로그래밍에서 사용되는 캡슐화(encapsulation)에 대한 이야기들이다. 철학적인 이야기도 나오기 때문에, 보는 중간에 졸음까지 잤었지만, 자다가 일어나서 다시 읽을 때의 신선함 때문이라도, 꽤 재미있는 항목이라 나는 생각한다. 스타일데로 캡슐화에 대한 질문들을 시작해 보자,. 1 ) "캡슐화"가 뜻하는 바는 무엇이며, 객체지향적 설계와 프로그래밍에서 그것이 얼마나 중요한가? 책에선 "캡슐화" 라는 뜻부터 풀어 보는데, 캡슐화란 "내부 구현을 숨기고 감싸서 보호하는 것" 이다. 즉, 외부와 연결된 인터페이스가 내부에 의존하지 않는다면, 클래스 내부의 변화는 외부와 연결된 인터페이스에 영향을 미치지 않음으로써, 보호 되는 것이다. 그렇다면, 객체지향적 설계와 프로그래밍에서 그것이..
책 정리/Exceptional C++ Style 검색 결과
얼마나 private이 비공개적인가? 라는 질문을 보고, 어떤 관점에서 비공개적인지 궁금해 했다. 컴파일 타임의 비공개적인가를 뜻하는건지, 런타임의 비공개적인가를 뜻하는지에 대해서 생각을 했었다. 책에선 이 두가지를 통틀어 그 원리에 대해서 설명 하고 있는데, 다음 질문을 통해서, 알아 보도록 하자. 1 ) Twice 함수들이 링크 과정에 포함되는 다른 어떤 번역 단위에 정의되어 있다고 할 때, 다음의 C++ 프로그램이 제대로 컴파일, 실행 될까? 아니라면 왜 그럴까? 된다면, 무엇이 출력 될까? 예제 코드 // Twice(x) 는 2 * x를 돌려준다. class Calc { public: double Twice( double d ); private: int Twice( int i ); std::com..
이번 항목에선 클래스의 접근 권한에 대한 이야기이며, 이런 권한이란 전제가 깔리기 때문에 "위조범, 사기꾼, 소매치기, 도둑"이 생기고, 이들을 찾고 검거하는 방법들도 소개 된다. 1 ) 클래스의 다음 부분들에는 어떤 코드가 접근할 수 있는가? ( a ) public ( b ) protected ( c ) private 나는 이 질문에 답하기 위해서, 먼저, "어디에서 접근 할 때의 접근 권한이지?" 라는 생각이 들었다. 상속된 클래스 내부에서의 접근 권한인가? 클래스의 객체의 사용 접근 권한인가? 로 나뉘는데, .. 불필요한 생각 없이, 그냥 해 보자. a. public 공개 멤버를 정할 때 쓰는 키워드로, 어떠한 경우에도 접근할 수 있다. b. protected 1단 보호가 걸친 멤버를 정할 때 쓰는..
이 항목에선 Jan Chrisiaan van Winkel 이라는 학생이 제공한 예제에서 어떤 실수가 있는지 살펴본다. 1 ) 다음 소스를 보고, 어디가 문제인지 지적해보라. #include using namespace std; class A { public: A( const string s ) { /* ... */ } string f() { return "hello, world"; } }; class B : public A { public: B() : A( s = f() ) { } private: string s; }; int main( void ) { B b; return 0; } 난 이 문제를 보고, 재석이와 함께 고민했었다. 어느 부분이 문제일거 같다는 느낌(?)이 들었지만, 정확하게 지적하지 못했..
예외 명세가 가치가 있는가? 이 질문을 전제로 생각한다면, .. 많은 생각들을 할 수 있을 것이다. 1 ) 예외 명세를 위반하면 어떤 일이 생길까? C++ 기능에 깔린 기본적인 근거를 논하라. 내가 알고 있는 것은 예외 명세를 위반시키면, unexpected 핸들러가 호출 되어지게 된다. 인데, MSVC2005 에서 테스트를 해봐도 작동 되지 않는다. 테스트 코드 #include class A { public: void Darw() throw( int ) { throw A(); } }; void f() { std::cout f(); return 0; } 4 ) 예외 명세는 무엇이고, 하는 일은 무엇인가? 엄밀하게 서술하라. 예외 명세는 "무슨 무슨 예외를 던지겠다" 라고 정하는 것이고, 하는 일은, "지..
예외 안전성을 추구할 가치가 있는가? 어떻게 이런 질문을 할 수 있을까 한다. "추구할 가치가 있는가?" .. 나는 단연코 추구할 가치가 있다고 생각한다. 여러가지가 있지만, 에러가 한번 터졌다 하면, 어디서 부터 봐야 하는지 난감할 때, 이 때문에 나는 단연코 추구해야 한다고 생각한다. 어느정도 알고 있을 때의 코딩과 그냥 막무가네로 찾아야 하는 코딩은 분명 차이가 있기 때문이다. 이번 항목은 "추구할 가치가 있는가?" 로 생각하는 논쟁에 대해서 정리하는 항목이라 할 수 있겠다. 1 ) Abrahams의 예외 안전성 보장들을 강략히 정의하라. 기본 보장(basic guarantee) : 자원 누수는 일어나지 않으며, 연산 실패된 객체의 파괴가 가능하다는 보장, : 쉽게 말해서 RAII 를 들 수 있겠다..
최근댓글