{ 왜냐하면, 데이터 멤버는 변수이기 때문이다. 변수는 무엇인가? 변수는 특정 상태를 기록하기 위한 공간이다. 이게 무슨 상관인가? 특정한 상태를 기록 하는 공간이, 아무에게나 열려 있으면 어찌하겠는가? C++ 로써 예를 들자면, 이런 변수에 값을 변경하기 위해선 로직을 사용 한다. 이 로직들은 함수 형태를 띠는게 자연스럽다. 이런 함수들이 많아 질 수록, 변수는 많은 변화에 노출이 된다. 이때 노출의 정도를 그나마 줄일 수 있는 방법이 private 이다. 만약 public 으로 변수를 유지하게 된다면, 함수에게만 국한된 노출이 누구나 훔쳐 볼 수 있게 되는 것이다. 휴~ 비유를 들어야 직성이 풀리겠는가? 문 잠궈두고, 열쇠를 걸어 두어야 정녕 직성이 풀리겠는가? ㅋㅋ }
C++ 코딩의 정석 검색 결과
{ 오버라이딩이란 무엇인가? 상속 관계에서의 멤버 함수를 재정의 하는 것을 의미한다. 오버로딩이란 무엇인가? 오버로딩은 함수를 확장한다는 의미이다. .. 사실 다른 함수를 같은 이름으로 만드는것이지만, : ) 안전하지 않은 오버라이딩의 예는 무엇인가? 1. 재정의 함수와 본래함수가 다른 디폴트 매개변수를 사용 할때, 정말 힘든 디버깅을 할 수 있다. 예) #include class Base { public: virtual void Draw( char * p = "두꺼바 두꺼바 헌집 줄께 새집 다오" ) { std::cout
{ 이 글의 취지는 무엇인가? 상속을 잘못되게 사용하지 말라는 것이다. 상속의 정확한 의미가 무엇일까? 상속은 말 그대로, 이어 받는 것을 말하는데, C++에선 상속해 주는 녀석의 행동을 이어 받는 것이다. 그래서 "is-a" 관계라 든지 "works-like-a" 라든지 상속은 이런 관계일 때만 해야 한다고 한다. is-a 관계 : B is a A 라는 관계인데, B가 A로 봐도 무리가 없다면, 상속을 해도 된다.(물론 상속을 하지 않아도 된다면 하지 않는게 좋다) works-like-a 관계 : B works like a A 라는 관계인데, B가 A 처럼 행동해야 할때, 상속을 해도 된다. 물론~ 하지 않아도 되면, 하지 않는게 좋다. 상속으로 코드의 재사용을 하면 안되는 이유가 무엇인가? 상속은 대..
{ 지금까지 상속이 필요하지 않다면, 사용하지 않는게 좋다는 이야기였다면, 이번 항목에서는 상속이 없다면 어려운 것들을 상속을 통해 보다 간단하게 만드는 방법이 있고, 어떻게 만드는 것이 좋은지에 대한 설명이 들어 있었다. 일단 이 책의 내용 중에서, 가장 어렵게 설명한 내용이지 않을까 한다. 어떤 것을 상속을 통해 손쉽게 해결 할 수 있는가? 비유 해서 설명하자면, 개과 동물 들 중에서 Dog 와, Wolf, Dingo, 등이 있다고 하자. 그리고 이 개과 동물들은 "짖는다"라는 행동은 갖으나, 소리가 다르다는 것을 알 수 있을 것이다. 만약, 내가 개과 동물들의 "짖는다"라는 행동을 보고 싶다면, 각 동물마다 "짖는다" 라는 함수를 호출해야 할 것이다. 이 작업이 여간 힘든게 아니다. 각 동물들은 수..
{ 쉽게 말하면, "기반 클래스"로 디자인 되지 않았으니까, 상속하지 않는건 당연하다. 그런데 왜 이런 말이 나오냐 하면, "잘못된 상속"을 사용할 수 있기 때문이다. 기반 클래스로 쓰이는 클래스의 경우, 대부분 다형성을 이용한 객체의 제어 때문에 사용 된다. 이는 상속하는 클래스 B가 기반클래스 A 처럼 행동 해야 할 때인데, 기반 클래스로 디자인하지 않을 경우, 가상 함수가 없다는 것을 의미한다. 이는 가상 소멸자(다형성을 사용하지 않는다면, 그냥 소멸자라도 상관 없다.)가 없어서, 스택이나 힙이 오염될 수 있고, 기반 클래스 A의 의도와 다르게, 상속 클래스 B를 사용 할 수 있다. 왜냐하면, 기반 클래스 A의 성질을 보다 정확하고 잘 아는 사람은 원래의 제작자이다. 그런 제작자가 기반 클래스로 쓰..
{ 상속성을 주의해서 사용해야 하는 이유는 "강력한 관계"는 보다 쉽게 "강력한 상처"를 줄수 있기 때문이다. 상속은 C++ 에서 손에 꼽힐 정도로 강력한 관계를 맺게 해주는 개념이다. 상속을 사용하면, 다음과 같은 이점을 살리기 어려워 진다. 1. 코드의 유연성 A 클래스와 B 클래스가 서로 독립 될 수 있는 경우, 각각의 변경은 서로에게 영향을 미치지 않으므로, 언제 어디서든 A는 B와는 상관 없이, B는 A와 상관없이 사용 될 수 있다. 2. 빠른 컴파일 각각의 변화에 따른 컴파일을 할 필요가 없다. 만약 B 클래스가 A 클래스를 상속해서 구현되었다면, A 클래스의 변화가 있을 때마다 B 클래스 역시 재컴파일 해야 하는 시간을 내놓아야 한다. 3. 적은 혼란 각각 독립적이기 때문에, 한 클래스에만 ..
최근댓글