객체지향을 느낌으로만 알아서 (그냥 모르는게 아닐ㅈ..)
구체적인 설명과 프로그래밍에 녹이지 못한 것 같아, 책을 읽고 글로 남겨 머리에 새겨보고자 정리한다.
- 객체지향이란, 시스템을 상호작용하는 자율적인 객체들의 공동체로 바라보고 객체를 이용해 시스템을 분할하는 방법이다.
- 자율적인 객체란, 상태와 행위를 함께 지니며 스스로 자기 자신을 책임지는 객체를 의미한다.
- 객체는 시스템의 행위를 구현하기 위해 다른 객체와 협력한다. 각 개체는 협력 내에서 정해진 역할을 수행하며 역할은 관련된 책임의 집합이다.
- 객체는 다른 객체와 협력하기 위해 메시지를 전송하고, 메시지를 수신한 객체는 메시지를 처리하는 데 적합한 메소드를 자율적으로 선택한다.
(35p, 객체지향의 사실과 오해)
객체지향에 대해 공부하면 클래스, 상속, 응집력 등 객체를 중심으로 생각하기 마련인데
객체지향의 선구자 '앨런 케이'의 말을 보면 본질은 다른곳에 있는걸 알 수 있다.
'객체지향'이라는 말을 쓰다보니, 너무 객체나 클래스에 초점이 가게 된다.
OOP의 본질을 흐리는 것 같다. 진짜 핵심은 '메시징'이다.
(Alan Curtis Kay, 2003)
클래스와 상속, 구현과 같은것은 객체지향의 '필수 조건'이 아님을 알 수 있는 대목이다.
(JS는 클래스가 없어도 객체지향 설계가 가능)
'앨런 케이'가 말하는 객체지향의 본질은 '3가지' 이다.
메세징, 캡슐화, 동적 바인딩
- 다른 객체의 데이터나 프로시저가 필요할 때는 메시지를 요청한다. 메시지를 받는 객체는 스스로 처리 방법을 선택한다. (메시징)
- 관련있는 데이터와 프로시져를 찾아서 묶고 다른 객체가 내부를 건드리지 못하게 한다. (캡슐화)
- 모든 것에 대한 극단적인 late-binding (또는 모든 것이 가능한 가장 늦은 시점에 결정되는 것 - 메시지를 받는 객체는 그때 그때 달라질 수 있다. (동적 바인딩)
이 3가지의 키워드에 집중해서 객체지향을 바라보니 학부생 시절, 소프트웨어 설계 방법론 수업에서 처음 OOP에 대한 개념을 들을 때의 느낌을 받았다.
캡슐화되어있고 서로 호환가능한 물체들이 서로 메시지를 주고받으면서 더 큰 소프트웨어를 구성하는 모습이 떠오른다.
(영화 '아바타'의 판도라 행성의 모습이 생각난다.)
이런 모습은 독립된 컴퓨터들로 이뤄진 인터넷이나 서버-클라이언트 구조로 이뤄진 웹의 모습과도 되게 닮아있다.
책과 여러 포스팅을 읽으면서 객체지향의 본질은 '3가지' 가 가장 와 닿았고, 이해하려고 노력하니 조금이나마 본질에 대해 이해하게 된 것 같다.
* 객체 자체보다는 협력 관계가 중요하다
* 그때 그때 데이터를 바인딩 해야하니까 객체 생성과 사용을 나누는 것이다.
* 많은 객체를 다루려면 객체끼리 묶고, 기능을 단위화 하고, 실제 세계와 비슷하게 만들면 이해가 빠를 것이다.
* 소통의 왜곡을 막기위해 캡슐화를 하는 것이다.
처음부터 상투적이고 많은 개념을 이해하기 보다는 본질을 이해하는 것이 중요한 것 같다.
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!