Home

[OOP] 객체지향 사고 프로세스 Chapter_9. 객체 구축과 객체지향 설계

객체지향 사고 프로세스

객체지향 사고 프로세스

맷 와이스펠드 지음 / 박진수 옮김

JPUB

목차

객체 구축과 객체지향 설계

합성관계

합성 관계는 ha-a로 표시 할 수 있는데, 합성을 사용하는 이유는 여러개의 단순한 객체를 묶어서 하나의 큰 객체로 만들기 위함일 것이다. 객체를 개념으로 바꿔보면 여러개의 개념을 하나의 큰 개념으로 바꾸는 것으로 이해할 수 있다. 이런식으로 추상화를 함으로서 우리는 문제를 더 단순히 할 수 있고, 의사소통을 쉽게 할 수 있다.

합성을 사용하면 시스템과 자식 시스템을 독립접으로 구축할 수 있다는 것이며, 더 중요한 점은 독립적으로 테스트하고 유지보수를 할 수 있다는 것이다. 즉 객체가 만들어질때 안에 있는 단순한 객체를 독립적으로 구축하고 테스트가 가능하다는 것이며 따로 떼어낼수 잇다는 것이다. 이게 중요한데, 만약 어떤 부분(객체)에서 버그가 났다면 우리는 해당 부분만 수리하면된다. (결합도가 높지 않을 경우) 하지만 구조적 프로그래밍에서는 해당 코드 이외의 관련된 모든 부분을 수정해야 한다. 이는 고장난 부분만 따로 수리하는게 아니라 전체를 다시 수리해야 한다는 것이다. 객체지향 설계를 사용한다면 이러한 문제점에서 일정 부분 벗어 날수 있다. 하지만 이는 좋은 설계를 바탕을 둬서 만들어진 시스템에 한한다.

합성 유형

합성은 결합응집이라는 두가지 유형의 합성 방식이 존재한다. 두 방식 모두 객체 간의 협업관계를 나타지만 약간의 미묘한 차이가 있다. 응집에서는 일반적으로 전체만 표시하고 결합에서는 일반적으로 전체를 이루는 부분을 표시한다.

응집

가장 일반적인 합성의 형태로 응집은 복합 객체가 그 밖의 객체들로 구성되어 있음을 말한다.

즉 추상환된 객체안에 여러개의 덜 추상화된 객체가 있고, 다시 하위에 여러가지 객체가 있는 것을 말하는데, 일종의 트리를 생각하면 된다.

결합

응집은 일반적으로 전체만 보는 관계를 나타내는 반면, 결합은 전체와 부분을 모두 나타낸다. (?? 책의 설명이 약간 애매하게 되어있다.. 더 말로 설명하기도 어렵다;;)

의존체 회피하기

합성을 사용할 때 객체는 서로 의존하지 않도록 하는것이 중요하다. 만약 객체들이 서로를 의존하게 된다면 위에서 말한것처럼 버그가 발생했을때 버그가 발생한 객체만 수리해서 끝난 것이 아니라 의존하고 있는 모든 객체를 수리해야 하는 것이다. 물론 의존체를 만듬으로서 더욱 편하게 사용할 수 도 있다. 하지만 순수한 객체지향 관점에서 이는 좋지 않은 방법이다.

의존문제를 해결하기 위해서 인터페스들이 쓰이며, 의존체들을 관리하는 게 인터페이스가 주로 하는 일이다. 인터페이스가 공유 라이브러리에 정의되어 있고 구현부가 더 구상적인 클래스에 정의되어 있으면 해위 계약을 사용해 도메인을 섞어볼 여지가 생긴다.

정리

상속이라는 관계로는 새 객체가 기존 객체의 새로운 종류임을 나타내는 반명, 합성이라는 관계로는 객체 간의 상호 작용을 나타내는 것으로 볼 수 있다.

Loading script...