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