2013년 2월 14일 목요일

헤드퍼스트 OOAD 5강 - part 2

먼저 5강 파트1에서 만들었던 클래스 다이어그램을 보자.


이 다이어그램은 무엇이 문제인지 알겠는가?
1. 악기가 추가 될 때마다 빈 클래스를 추가해줘야 한다.
2. search 가 늘어나야 한다.
3. 각 악기의 고유 특성을 추가해야한다.

지금 이 프로그램은 악기의 공통 속성은 하나로 묶고 고유 속성은 상속 받아서 쓰고 있다.

이것은 지나치게 많은 클래스를 유발한다.

잘 만들어진 클래스는 하나의 일을 잘하고 그 외의 일은 하려고 하지 않는 것이다.

지금 위의 클래스 다이어그램은 클래스가 값의 역할을 하고 있다.

이것을 수정한 클래스 다이어그램이다.


악기의 모든 값을 Map에 저장하였고 각 특성을 열거형으로 분리하여 저장하였다.
이렇게 되면 악기가 추가되어도 편리해진다.
선이 이어지지 않은 클래스들이 열거형이다.
프로그램을 유연하게 만드는 것이 재사용과 수정할 때 용의하다.
값이 변경되는 부분은 따로 분리하고
어떤 일을 하는 부분은 캡슐화하여 연결시키는 것이 좋은 프로그램이라고 할 수 있다.

이런 프로그램을 응집도가 높은 프로그램이라고 하는데

응집도란? 
하나의 모듈, 클래스, 또는 객체들을 이루는 원소들 사이에 연결의 정도를 나타낸다. 소프트웨어의 응집도가 높을수록 프로그램에서 각 클래스의 역할들이 잘 정의되어 있고 잘 연결되어 있는 것이다. 각 클래스는 밀접하게 연결되어 있는 하나의 매우 특정한 집합의 일들을 수행한다. 

이라고 정의 되어 있는데 참 말 어렵게 해놨다 ㅡㅡ
한마디로 세세하게 연결이 잘되어 있고 확장하기 쉬운게 좋다는거다.
연결이 잘되어 있다는 것은 분리도 쉽다는 뜻이다.

좋은 프로그램은 변경이 쉽고, 재사용성이 좋고, 연결과 분리가 쉬운 것이다.
이것이 바로 객체 지향적인 프로그래밍이다.

속도는......... 아무래도  절차지향적인 것보단 느리다... 그래도 워낙 하드웨어가 좋아서 상관 읍다.

댓글 없음:

댓글 쓰기