Transcript 클래스 설계
6주 클래스 설계
(Designing Classes)
이해하기 쉽고
유지보수성이 높고
재사용성이 좋은
클래스를 작성하는 법
자바프로그래밍
강원대학교
1
핵심 개념
• Responsibility-driven design (책임분담
원칙)
• Coupling (결합성)
• Cohesion (응집성)
자바프로그래밍
강원대학교
2
소프트웨어는 변한다.
• 기능 확장
• 오류 수정
• 환경 변화에 적응 (하드웨어, 소프트웨어, 응용)
• 오랜 기간(수십년)에 걸쳐 수많은 사람들에 의해
수행된다.
자바프로그래밍
강원대학교
3
변하거나 죽거나
• 다른 길은 없다!
자바프로그래밍
강원대학교
4
소프트웨어 설계 품질을 평가하는
핵심 척도
• Coupling (결합성)
• Cohersion (응집성)
자바프로그래밍
강원대학교
5
Coupling (결합성)
• 클래스간 상호 연계성
• Tightly coupled (강하게 결합)
• Loosely coupled (약하게 결합)
• Class diagram provides hints
자바프로그래밍
강원대학교
6
Cohersion (응집성)
• 단위 프로그램이 상호 연관성이 그다지 높이 않
은 여러 가지 일을 하면 응집도가 낮다.
• 단위 프로그램이 한 가지 일만을 하면 응집도가
높다.
• 높은 응집도를 추구함.
• 단위 프로그램 – 클래스, 메소드, 패키지
자바프로그래밍
강원대학교
7
Loose coupling (약한 결합성)
• 다른 클래스를 보지 않고도 하나의 클래스를 이
해할 수 있다.
• 다른 클래스에 미치는 영향을 최소로 유지하면
서 클래스를 수정할 수 있다.
• 유지보수성이 좋다.
자바프로그래밍
강원대학교
8
Tight coupling (강한 결합성)
• 한 클래스를 수정하면 다른 여러 클래스를 고쳐
야 한다.
• 한 클래스를 이해하려면 다른 여러 클래스도 한
꺼번에 봐야 한다.
• 클래스 객체간 상호작용이 복잡하다.
자바프로그래밍
강원대학교
9
High cohersion (높은 응집도)
• 클래스나 메소드를 이해하기 쉽다.
• 재활용성이 높다.
자바프로그래밍
강원대학교
10
Low cohersion (낮은 응집도)
• 어떤 클래스나 메소드가 무엇을 하는 놈인지 정
의하기 곤란하다.
자바프로그래밍
강원대학교
11
계층별 Cohersion
• 클래스 계층
– 클래스는 하나의 잘 정의된 개체를 나타내야
한다.
• 메소드 계층
– 메소드는 단 하나의 잘 정의된 일만을 해야 한
다.
자바프로그래밍
강원대학교
12
코드 중복
• 코드가 중복된다는 것은 나쁜 설계임을 암시한
다.
• 유지보수성이 나쁘다 – 유지보수 과정에서 에러
가 생기기 쉽다.
자바프로그래밍
강원대학교
13
Responsibility-driven design
(책임 분담 원칙)
• 어떤 기능의 메소드를 어느 클래스에 넣을 것인
가?
• 각 클래스는 자신이 관리하는 데이터를 처리하
는 일을 책임져야 한다.
• 이 원칙을 지키면 클래스간 coupling이 낮아진
다.
자바프로그래밍
강원대학교
14
Localizing change (변경 범위 제한)
한 군데 고쳐도 다른 곳으로 파급되지 않아야 한다.
Low coupling, responsibility-driven design을 통
해 변경 범위를 제한할 수 있게 된다.
자바프로그래밍
강원대학교
15
끝.
자바프로그래밍
강원대학교
16