책 오브젝트 후기
조영호 작가님의 오브젝트 책을 드디어 다 읽었다.
재밌었다. 최근에 읽은 책 중에 리팩토링이랑 같이 제일 재밌게 본 것 같다.
학교에서 객체지향을 배우긴 했지만 솔직히 잘 몰랐다. 코드를 짤 때 객체지향이나 그 개념들을 생각하면서 개발하지 않았었다. 리팩토링이나 클린코드와 같은 책들을 보면서 객체지향에 대한 개념이 스물스물 나오길래 이 참에 제대로 익혀보기로 했다. 그래서 조영호 작가님의 객체지향의 사실과 오해 → 오브젝트 둘 다 봤다.
개인적으로 이 책을 보기 직전에 읽었던 클린코드에서 나오는 내용들의 다수가 객체지향의 개념들을 추상화해서 이해하기 쉽게 풀어쓴 것이라고 느껴졌다. 이해만 하고 그칠 게 아니라 지식을 활용하기 위해선 클린코드 책보다 객체지향적인 개념을 제대로 설명하는 이 책을 보는게 코드단에서 더 도움이 되는 것 같다.
리액트와 객체지향 #
내가 프론트엔드 개발자라서 그런가 객체지향 서적을 읽어도 리액트 프로젝트 중심으로 생각을 하게 된다.
우선 리액트의 컴포넌트로는 이 책에서 말하는 객체지향식의 협력은 구현하기 어렵다. 객체지향은 객체간의 협력을 통해 요구사항을 수행하는 패러다임인데 이 협력은 객체간에 메시지 전송을 통해 구현된다. 협력을 요청하는 객체에서 메시지를 보내면 수신하는 객체에서 그에 메시지에 맞는 메서드를 호출한다. 즉, 메서드 호출을 통해서 객체간에 협력을 하는 구조인데 리액트의 컴포넌트는 이게 쉽지 않다고 생각했다.
리액트에서 컴포넌트간에 통신이라고 함은 부모 컴포넌트가 자식에게 내려주는 함수를 호출하는 것 밖에 떠오르지 않는다. props로 내려주는 함수가 그 객체가 노출한 퍼블릭 인터페이스의 메서드라고 생각해도 될 지 모르겠다. 우선 부모 자식관계여야만 props로 함수를 내려줄 수 있으므로 위치적인 제약이 있고, 그리고 부모는 자식에게 함수를 내려줄 수 있더라도 자식은 부모에게 자신의 메서드를 노출하지 못한다. 단방향으로만 메서드를 호출하여 상호작용할 수 있는 형태는 이 책에서 말하는 객체지향의 협력이랑은 거리가 있는 것 같다.
그런데 협력의 관점에서가 아닌 SOLID나 추상화, 캡슐화에 대한 내용들은 리액트 컴포넌트 관점에서도 배울게 많았다.
다형성 #
객체지향에서 제일 중요한 개념은 다형성이었다. SOLID 원칙에서 OLD 세개가 다형성에 관한 내용이었고, 추상화와 캡슐화 개념도 포괄한다.
서브타입들이 추상화된 슈퍼타입을 만들고 이 슈퍼타입에 의존하게 되면 (의존성 역전) 협력하는 객체는 해당 슈퍼타입을 상속하는 어떤 서브타입과도 협력할 수 있어진다(리스코프 치환). 그리고 기능의 추가, 수정시에는 기존 코드를 수정하는 대신 서브타입 객체를 추가함으로 (개방폐쇄) 코드 변경의 범위를 최소화할 수 있다.
SOLID 원칙들은 리액트 컴포넌트에서도 적용해봄직하다고 생각한다. 요즘은 잘 안쓰는 것 같지만 프레젠테이션 - 컨테이너 패턴으로 컴포넌트 다형성도 구현할 수 있을 듯.
후기 #
솔직히 ‘난 리액트 쓰고 리액트는 함수형이니까 객체지향 몰라도 되는 것 아닌가?(함수형도 잘 모름)’ 하는 생각이 있었다. 이 책을 읽고 나서 느낀점은 객체지향 언어를 사용하지 않더라도 배울 점이 많다는 것이다.
대부분 아키텍처나 개발 패러다임은 변경에 유연하게 대응하기 위해서 만들어졌다. 꼭 객체지향을 그대로 따르지 않더라도 의존성이나 변경의 영향을 줄이기 위해서 결합도을 낮추거나 하는 등의 개념들은 생각해볼 것이 많았다.
유명한 책은 유명한 이유가 있다. 개인적으로 클린코드보다 실용적이고 훨씬 도움이 많이 됨. 추천! 별5개!