Skip to content

5장 객체 지향 프로그래밍

Boseong Choi edited this page Jan 27, 2022 · 7 revisions

<상명>

Encapulation?

저자가 C 코드를 예로 C가 완벽한 encapsulation이라고 주장하는 것에 동의할 수 없다. 왜냐하면 encapsulation이란 의미에는 private member에 접근할 수 없다는 것이 포함된다고 생각하기 떄문이다. 수년간 C로 실무를 한 입장에서 separation of declaration and definition의 경우는 이 책에서 처음 본다. C에서도 C++가 마찬가지로 separtion of declaration and implementation으로 주로 코딩한다. 즉 헤더파일에 struct definition이 포함되어 있다는 말이다. 내 기억이 맞다면 Linux kernel 소스분석 했을 때도 위와 같이 struct definition이 포함되어 있었고 실무에서 내가 짜거나 본 소스들도 동일하다. 나도 저자와 같이 C에 대한 애착이 크고 프로그래밍의 주요 부분은 오래전이나 지금이나 변하지 않았다는 것에 동의하지만 이 주장은 약간 억지스럽다는 생각을 지울 수 없다. C++의 Point class에서 private member인 x,y의 이름이 노출된다는 게 client programmer(Library를 쓰는 프로그래머)에게 무슨 의미가 있는지 모르겠다. 왜냐면 접근할 수 없기 때문이다. 오히려 C에서 struct Point가 있을때 client programmer는 x, y(이성적인 네이밍이라면)가 Point라는 struct에 있을거라 예측할 수 있고 의도적으로 해당 struct의 x, y 밸류를 변경할 수 있다는 점에서 완전한 encapsulation이라고 할 수 없다고 생각한다.

Inheritance?

상속 파트에서 저자는 C에서 type cast를 통해 OOP 언어의 싱글상속과 같은 것을 마치 C에서 많이 쓰인다고 서술했는데 C에서 해당 방법으로 type cast하는 경우는 매우 드문 일이다. 또한 매우 위험하고 피해야할 테크닉이라고 생각한다.

Polymorphism

Polymorphism을 통해 dependency inversion이 가능하고 이는 plugin 형태의 flexible한 컴포넌트들을 구현할 수 있고 각각의 컴포넌트들을 독립적으로 관리할 수 있다. Stragery Patttern


<명욱>

  • 캡슐화, 상속, 다형성 이 객체지향을 설명할때 주로 사용되지만, 이는 OO 이전에도 있었던 개념이고 구현가능하다.
  • OO 란 다형성을 이용하여 전체 시스템의 모든 솟 코드 의존성에 대한 절대적인 제어 권한을 획득할 수 있는 능력이다.

<보성>

  • 객체지향의 본질에 대해 예리하게 다룬 점이 인상깊었습니다.