2023년 11월 7일 작성
객체 지향에 대한 오해
객체 지향은 잘못 이해하기 쉬운 개념이며, 따라서 잘못된 설명들도 많습니다.
잘못된 설명 1. 객체 지향은 Data와 함수의 조합이라는 설명
o.f()가f(o)와 다르다는 의미를 내포하기 때문에 정확한 설명이 아닙니다.- 객체 지향은 data와 함수의 조합을 의미합니다.
- data와 함수의 조합을 통해 객체를 만들고, 이 객체들을 조합하여 program을 만드는 것이 객체 지향입니다.
잘못된 설명 2. 실제 세계를 Modeling하는 새로운 방법이라는 설명
- 의도가 불분명하며, 정의가 모호합니다.
잘못된 설명 3. 캡슐화(encapsulation), 상속(inheritance), 다형성(polymorphism) 개념을 적절하게 조합한 것이라는 설명
- OO는 캡슐화, 상속, 다형성을 포함하지만, 이것들이 OO의 전부는 아닙니다.
- 대표적으로 C 언어는 절차 지향 언어이지만, 캡슐화, 상속, 다형성을 사용할 수 있습니다.
캡슐화와 C 언어
- C 언어에서도 완벽한 캡슐화(encapsulation)가 가능합니다.
- data 구조와 함수를 header file에 선언하고 구현 file에서 구현하면 됩니다.
- 오히려 C++, C#, Java 등에서 완전한 캡슐화(encapsulation)가 깨집니다.
- C++ : compiler가 class의 instance 크기를 알아야 하기 때문에 class의 member 변수를 해당 class의 header file에 선언해야 합니다.
- C#, Java : 아예 header와 구현체를 분리하는 방식을 버렸습니다.
- class 선언과 정의를 구분하는 것이 불가능합니다.
상속과 C 언어
- 객체 지향 언어로 넘어와서 더 편리해지긴 했지만, C 언어에서도 가능한 기법입니다.
다형성과 C 언어
- C 언어에서 함수를 가리키는 pointer를 응용해 구현할 수 있었지만, 객체 지향 언어는 이를 더 편리하고 안전하게 사용할 수 있게 해줍니다.
- 함수 pointer는 다형성을 위해 사용하기에는 위험합니다.
- 다형성은 객체 지향에서 가장 중요한 부분입니다.
- 다형성을 통해 제어 흐름을 간접적으로 전환하는 규칙을 부과합니다.
Reference
- Clean Architecture (도서) - Robert C. Martin