개발공부/객체지향의 사실과 오해 6

[객(체지향의)사(실과)오(해)] 6. 객체지도 ( 태초마을로 간 지우 )

객체 지도는 우리가 만드는 객체들이 어떻게 협력하고, 서로간에 메시지를 전해줘야 할지 미리 생각해보는 시간을 만드는 것 같았다. 하나씩 빌드업을 해나가며, 도메인 모델을 만들어가는 과정이다. 사실 이게 역할, 협력, 메시지를 생각하기 전에 우리가 해야할 부분이 아닐까 싶은 생각이 든다. 객체는 협력한다. 객체는 역할을 가진다. 객체는 메시지를 주고 받는다. 객체는 기능을 수행한다. 이를 모두 담은 상태가 되기 위해 우리는 지도를 그린다고 생각한다. 내가 느끼는 방식대로 설명을 해보겠다. 지도에 땅을 그려야 한다 ➡️ 우리가 사용할 역할들이 뭐가 있을지 생각한다. 땅에 있는 길들을 만들어야 한다 ➡️ 역할간의 협력관계를 이어본다. 길들이 도로인지, 인도인지, 자전거 전용도로인지 정리해야 한다 ➡️ 협력관..

[객(체지향의)사(실과)오(해)] 5. 책임과 메시지 (부제. 메시지란 무엇인가)

이전의 메시지에 대해서 조금 더 자세한 설명을 들을 수 있었다. 그리고, 내가 만든 코드들의 문제가 무엇인가를 생각해볼 수 있었다. 4장에서 내가 만든 코드의 구조를 생각해보았을 때, 결국 증인이 일을 하기 위해 받아야 할 메시지는 존재하지 않는다. 일을 '어떻게' 처리해야하는지 구조를 잡았지만, '무슨' 일을 해야할 지 처리하지 않은 것이다. 책의 예시를 들어보자. 재판관이 증인에게 어제 주방에서 본 것이 있는지 묻는다. 증인은 말을 하기도, 글로 쓰기도, 그림으로 그리기도 할 수 있다. 하지만 하는 말의 내용은 어제 주방에서 본 것들이다. 여기에서 내가 느낀 것은 2가지 이다. 재판관은 무슨 일을 해야 할지 이야기 해야 한다. 이를 위해서 증인은 그 당시 그 장소에 관해 할 이야기가 있는지 확인하고 ..

[객(체지향의)사(실과)오(해)] 4. 역할, 책임, 협력 (부제 : 그래 팩토리를 더 써먹어보자)

이번에는 책에서 실제로 디자인 패턴이라는 이야기도 나왔었다. 어떻게 보면 3장에서 추상화를 시키는데, 이를 통해 얻을 이점이 무엇인가를 생각할 수 있었다. 예시를 보자면, 앨리스의 법정 경험(?)이 있을 것 같다. 법정에서 재판장, 관리자, 증인의 역할을 하는 사람들이 존재한다. 이를 역할로 구분해보면 재판장은 관리자에게 다음 증인을 부러오라고 한다. 증인은 증인들중 다음 사람을 골라 불러온다. 증인은 재판장에게 증언을 한다. 재판장은 증인의 증언을 듣고 판단한다. 의 구조를 가진다. 나는 역할을 생각해서 이렇게 각자 하는 일들을 정했다면, 역할명의 인터페이스로 해당 메서드들을 만든다. 지금의 메서드는 void타입으로, 파라미터 없이 만들어둔 후에 객체간의 협력관계를 바탕으로 파라미터를 입력시키거나, 반..

[객(체지향의)사(실과)오(해)] 3. 타입과 추상화( 부제 : 어...이거?!)

제목에서 보았듯이, 읽자마자 어? 이거 어디서 봤는데? 하는 부분이 상당히 겹쳐있었다. 이전에 CS를 공부하면서, 팩토리 패턴에서 공부했던 내용과 상당히 겹치는 부분이 있다고 느꼈다. 뭐랄까, 팩토리 패턴이라는 하나의 정형화된 패턴을 구현하기 위해서 알아야 하는 추상화라는 부분을 다시 한번 공부한 것 같다는 느낌이 든다. 간단하게 읽은 부분을 스스로 곱씹어본 것을 정리해보았다. 추상화 같은 역할을 하는 객체들을 동일한 역할명으로 추상화를 시킬 수 있었다. 어떻게 보면, 여태까지 이야기하던 역할이라는 부분은 단순하게 보면 인터페이스로 만들 수 있다고 생각이 든다. 그래서, 인터페이스라는 역할을 클래스가 수행하게 되면 되는 것 아닐까 라는 생각이 든다. 이를 2주차를 리펙토링 하고, 3주차를 구현해보았다. ..

[객(체지향의)사(실과)오(해)] 2. 이상한 나라의 앨리스를 이상하게 보고 있는 나

소스코드 : https://github.com/JangAJang/the-orient-of-Object-Orientation/tree/main/chapter2 딱 한줄로 2장의 소감을 말하자면, 1장에서 던진 추상적인 질문에 대해서 하나씩 자세한 예시를 들어주는 느낌이었다. 1장은 하나의 큰 화두를 던져준다면, 2장에서는 자세한 썰을 푸는 느낌이다. (진짜 고급진 단어만으로 글을 쓰고싶지만, 내 블로그는 그런 곳이 아니라고 생각된다 하핳) 일단 앨리스부터는, 조금 더 실제 실행시킬 수 있는 모양새의 프로젝트를 만들어보려고 노력했다. 객체지향 생활 체조?도 해보면서 객체지향적인, 클린한 코드 만들기를 습관화를 하려고 노력을 하는 중이다. 로마는 하루에 안만들어지니까, 일단은 뭐다? 앨리스라는 객체가 있다. ..

[객(체지향의)사(실과)오(해)] 1장. 협력하는 객체들의 공동체

소스 코드 : https://github.com/JangAJang/the-orient-of-Object-Orientation/tree/feat/Chapter2 객체지향에서는 모든 객체를 위주로 일이 돌아간다는 이야기는 자주 들었다. 그러면 그 일이 어떻게 돌아가는지, 그리고 내가 만든 코드에서 어떻게 이루어져야 조금 더 객체지향적인 결과가 이루어질지 생각해보았다. 일단, 책에 적힌 이론들을 이해해보자. 객체지향 프로그래밍에서는 객체가 스스로 생각하고 결정하게하는, '캡슐화'가 이루어진다. 이를 통해 객체에 자율성이 부여된다. 이렇게 자율성이 있는 객체들이 협력하는 관계를 가지고, 이 관계 안에서 메시지로 소통을 한다. 객체 ---(협력이라는 관계)--- 객체 이 관계에서 각 객체는 메시지를 통해 소통한다..