본문 바로가기
생각 정리/독서

[책 리뷰] 객체지향의 사실과 오해

by jaeyoungb 2024. 2. 21.

 

 

객체지향의 사실과 오해

 

 

 


읽게 된 계기

 

 전부터 이 책을 알고는 있었지만, 항상 읽어야지.. 읽어야지.. 생각만 했었다. 이런저런 생각은 많은데, 바로바로 실행에 옮기는 게 쉽지는 않다. 엄청난 필요성을 느끼는 게 아니면, 그냥 생각하는 선에서 그치곤 한다. 그러던 중, 우테코 프리코스 미션을 수행하면서 객체지향 설계에 관한 지식의 필요성을 굉장히 많이 느꼈다.

 

 프리코스 동안의 미션들은 대부분 클래스의 적절한 설계, 클래스 간의 낮은 결합도와 상호작용을 많이 신경써야 했고, 또 그 부분을 지키려고 애썼다. 매 주차마다 더 나은 설계를 하고 싶었고, 그래서 이 책을 택해서 읽게 되었다. 객체지향 하면 떠오르는 캡슐화, 상속, 다형성, 추상화 등의 특징들 이외에도 객체지향 설계에 관한 내용을 더 알아보고 싶었다.

 

 

 


기억에 남는 부분

 

 이 책은 역할, 책임, 협력의 관점에서 객체지향을 설명하고 있다. 특이한 점은 책의 전반적인 내용을 '이상한 나라의 앨리스'라는 소설에 빗대어 설명한다는 것이다. 책에서 인상적이었다거나 중요하게 생각되는 부분은 꽤나 많지만, 몇 가지를 꼽자면 다음으로 추려낼 수 있을 것 같다.

 

 역할은 관련성 높은 책임의 집합이며, 특정한 역할은 특정한 책임을 의미한다.이 책임은 객체지향 설계의 품질을 결정하는 가장 중요한 요소다. 협력의 핵심은 특정한 책임을 수행하는 역할들 간의 연쇄적인 요청과 응답을 통해 목표를 달성하는 것이다. 객체지향 설계의 핵심은 어떤 클래스가 필요한가가 아닌, 어떤 객체들이 어떤 메시지를 주고받으며 협력하는가다.

 

 소프트웨어 안에서 구현되는 객체지향 세계는 현실세계를 모방한 것이 아닌, 조금 참조할 뿐 전혀 다른 새로운 세계를 창조하는 것이다. 객체를 분류하는 기준은 타입이다. 이 타입을 나누는 기준은 행동과 행위이며, 타입을 구현하기 위한 수단이 바로 클래스다.

 

 객체의 외부(공용 인터페이스)와 내부(구현)를 분리하는 것은 객체가 자율성을 가지게 한다. 이는 서로 간의 협력을 단순하게 만들고, 정보 은닉과 재사용성 측면에서 효과를 나타낸다.

 

 설계도 중요하지만, 더 중요한 건 코드다. 협력을 구상하는 단계에 너무 오랜 시간을 쏟기보다는 최대한 빨리 코드를 구현하면서 설계의 문제를 파악하는 것이 좋다. 구현 도중에도 수시로 바뀌는 것이 설계이며, 코드를 통한 피드백으로 점진적으로 깔끔한 설계를 할 수 있다.

 

 다중 분류와 동적 분류 관점에서 도메인 모델의 초안을 만든 후, 실제 구현에 적합하도록 단일 분류와 정적 분류 방식으로 객체들의 범주를 재조정하는 것은 좋은 설계 방법이다.

 

* 다중 분류: 객체가 한 시점에 여러 타입에 속할 경우  /  동적 분류: 객체가 한 집합에서 다른 집합의 원소로 타입을 변경할 수 있는 경우

 

 

 


마지막

 

 이외에도 이 책은 객체지향 설계와 관련된 다양한 개념(일반화/추상화, 캡슐화, ..)을 소개하고 있고, 중요한 내용은 너무나도 많다. 이 많고 많은 내용 중에 객체지향 설계를 위해 가장 중요한 한 가지를 뽑자면, 메시지(기능)다. 어떤 메시지가 필요하냐부터 생각하다보면, 그에 맞는 필요한 책임이 보일거고, 그 책임을 수행할 객체 또한 정해질 것이다. 객체 간의 협력이나 결합도 등은 나중에 생각할 문제라고 생각한다.

 

 이 책을 읽게 된 계기로 돌아가서, 그럼 어떻게 하면 좋은 객체지향 설계를 할 수 있는 걸까? 사실 책을 읽고 난 지금도 정확히 잘 모르겠다. 좋은 객체지향 설계를 위해서는 경험이 절대적일 것 같다. 실제 설계를 해보면서 지속적으로 단점을 찾고 피드백 받아가며 '이 부분은 좀 더 책임을 나누었어야 했네?', '이런 방식으로 메시지를 주고 받으면 좋겠구나'하는 나만의 노하우를 정립하는 것이 중요할 것 같다. 앞으로 설계할 객체들에 대해서는 메시지를 중요하게 생각하는 등의 책에서 제시하는 좋은 방법으로 설계해볼 예정이다. 많은 시행착오를 겪으면서, 더 나은 객체지향 설계를 할 수 있도록 해봐야겠다는 생각이다.

 

 마지막으로, 객체지향 설계에 관한 관심이 있거나 이 책을 읽어볼 예정에 있으신 분이라면, 한 번쯤 읽어보시는 것도 좋겠다는 생각이다. 다만, 객체지향과 관련해 처음 접하시는 분이라면 살짝 비추천이다. 책 초반부터 '이상한 나라의 앨리스' 소설에 비유해서 내용을 설명하는데, 이게 이해를 돕기 위해서겠지만 나는 조금 책이 설명하고자 하는 본질적인 내용을 파악하기에는 어려웠다. 후반부에는 생각보다 앨리스 이야기가 많이 나와서 당황하기도 했다. 하지만, 이런 이야기를 통해 풀어나가는 게 맞는 분도 계실 것 같다. 책 내용 또한 얻어갈 게 너무나도 많기에, 객체지향 설계에 대한 지식을 쌓고 싶은데 너무 딱딱한 기술 서적은 싫다하시는 분들한테는 매우 추천이다. bb

+ 부록 부분에 객체지향 설계와 관련된 핵심 내용이 있으니, 넘기지 말고 꼭 읽어보시길 바란다!