본문 바로가기

개발이야기

객체지향의 사실과 오해 | 7장

코드와 모델을 밀접하게 연관시키는 것은 코드에 의미를 부여하고 모델을 적절하게 한다. - Eric Evans

 

개념관점(Conceptual Perspective)에서 설계는 도메인 안에 존재하는 개념과 개념들 사이의 관계를 표현

명세 관점(Specification Perspective)에 이르면 사용자의 영역인 도메인을 벗어나 개발자의 영역인 소프트웨어로 초점이 옮겨짐. 

명세관점은 도메인이 아니라 실제로 소프트웨어에서 살아 움직이는 객체들의 책임에 초점을 맞춤. 

구현 관점(Implementation Perspective)은 실제 작업을 수행하는 코드와 연관돼 있다. 

구현 관점의 초점은 객체들이 책임을 수행하는데 필요한 동작하는 코드를 작성하는 것이다. 

 

클래스는 위 세가지 관점을 모두 수용할 수 있도록 개념, 인터페이스, 구현을 함께 드러내야한다.

동시에 코드 안에서 세가지 관점을 식별할 수 있도록 깔끔하게 분리해야한다.

 

우리는 동적인 실제 객체를 정적인 타입으로 추상화해서 복잡성을 낮춘다. 

타입은 분류를 위해 사용된다. 타입은 상태와 무관하게 동일하게 행동할 수 있는 객체들을 동일한 타입의 인스턴스로 분류할 수 있다.

 

소프트웨어가 대상으로 하는 영역인 도메인을 단순화해서 표현한 모델을 도메인 모델이라고 한다.

의사소통이라는 목적에 부합한다면 용도에 맞게 얼마든지 UML을 수정하고 뒤틀어라.

UML은 의사소통을 위한 표기법이지 꼭 지켜야하는 법칙이 아니다. 

 

객체가 수신한 메시지가 객체의 인터페이스를 결정한다. 

메시지가 객체를 선택했고, 선택된 객체는 메시지를 자신의 인터페이스로 받아들인다.

각 객체를 협력이라는 문맥에서 떼어내어 수신 가능한 메시지만 추려내면 객체의 인터페이스가된다.

 

소프트웨어 클래스가 도메인 개념의 특성을 최대한 수용하면 변경을 관리하기 쉽고 유지보수성을 향상 시킬 수 있다.

클래스와 도메인 클래스 사이의 간격이 좁으면 좁을 수록 기능을 변경하기 위해 뒤적거려야 하는 코드의 양도 점점 줄어든다.

 

클래스의 public 메서드는 다른 클래스가 협력할 수 있는 공용인터페이스를 드러낸다.

공용 인터페이스는 외부의 객체가 해당 객체에 접근할 수 있는 유일한 부분이다. 

 

우리는 클래슬르 봤을 때 명세관점과 구현관점으로 나눌 수 있어야한다.

캡슐화를 위반해서 구현을 인터페이스 밖으로 노출해서도 안 되고, 인터페이스와 구현을 명확하게 분리하지 않고 흐릿하게 섞어놓아서도 안된다.

느낀점

기존의 형식적인 객체지향 책이 아닌 정말 개발자의 관점에서 객체지향을 설명해주는 책이라고 생각한다. 

객체지향의 추상적인 내용을 구체화해서 보여준다. 

하루에 한장씩 읽었다. 중요한 부분을 반복적으로 상기시켜주는 것도 좋았다. 

역할,책임,협력. 인퍼테이스와 구현의 분리, 이런 말들은 그냥 어떤 책이든 나온다. 하지만 이 책은'왜' 해야하는가를 알려주는 책이었다. 

 

 

'개발이야기' 카테고리의 다른 글

CodeDeploy Ubuntu 22.04 오류  (0) 2022.07.22
Pre-rendering  (0) 2022.06.30
객체지향의 사실과 오해 | 6장  (0) 2022.06.26
iOS input 태그 focus시 자동 zoom-in 막기  (0) 2022.06.25
객체지향의 사실과 오해 | 5장  (0) 2022.06.25