3. 1. 클래스 체계
● 클래스를 정의하는 표준 자바 관례
● 변수와 유틸리티 함수는 가능한 공개하지 않는편이 좋지
만 반드시 숨겨야 할 법칙은 없다. (Test Code 작성을 위
한 protected 등)
4. 2. 클래스 규모
70여개의 공
개 메소드로
이루어진
Class
.
.
.
위의 함수를 5개
의 메소드로 줄
이면 작은 Class
인가??
5. 2. 클래스 규모
● 클래스를 설계할때도 함수와 마찬가지로 '작
게'가 기본 규칙 이다.
● 클래스의 책임이 작을 때 클래스는 '작게' 된
다.
● 클래스의 작명이 클래스 크기를 줄인다.
● 클래스 이름에 연결구를 사용하지 않으며, 25
단어 내외로 작명한다.
6. 3. SRP
● SRP(Single Responsibility Principle) 이란 클
래스를 변경하는 이유가 오직 하나뿐이어야
한다는 원칙
● SRP는 객체 지향 설계에 중요한 개념
● "돌아가는 소프트웨어" & "깨끗하고 체계적인
소프트웨어"
7. 3. SRP
● 여행가서 찍은 사진을 찾을 때 어떤폴더를 이용할 것 인
가??
● 큰 클래스 몇개보다는 작은 클래스 여럿이 더 바람직하
며, 작은 클래스 각각 책임이 하나이고, 변경할 이유가 하
나이고, 다른 작은 클래스와 협력해 동작을 수행
8. 4. 응집도
● 각 클래스 메소드는 클래스 인스턴스 변수를
하나 이상 사용하여 응집도를 높여야 한다.
● "함수를 작게, 매개변수 목록을 짧게"라는 전
략을 따르다 보면 몇몇 메소드에서만 사용하
는 인스턴스 변수가 많아지는데 이때 응집도
가 높아지도록 클래스를 분리한다.
● 클래스가 응집력을 잃는다면 쪼개라!
10. ● 4. 응집도 (209 Page)
● PrimePrinter 클래스는 실행환경을 책임.
● RowColumnPagePrinter 클래스는 숫자 목록을 주어진
행과 열에 맞춰 출력을 책임.
● PrimeGenerator 클래스는 소수 목록 생성을 책임
● 길이가 늘어난 이유
- 서술적인 변수 이름 사용
- 주석을 추가하는 수단으로 함수 선언과 클래스 선언 활용
- 가독성을 높이고자 공백 추가 및 형식 유지
11. 5. 변경하기 쉬운 클래스
● 클린 시스템은 클래스를 체계적으로 정리해 변경에 수반
하는 위험을 낮춘다.
● Update 문을 추가하면 클래스 변경이 발생하며 다른 코
드를 망칠 잠재적 위험존재
● 또한 기존 SQL 문을 수정해도 클래스 변경 발생하며 테
스트도 다시 수행되야 한다.
13. 5. 변경하기 쉬운 클래스
● 클래스 단순화, 이해도 상승, 잠재적 위험 제
거, 테스트 증명 용이
● 새로운 SQL 문 추가시 기존 클래스 변경 X
● SRP, OCP 지원
14. 5. 변경하기 쉬운 클래스
● 인터페이스와 추상 클래스를 사용하여 구현
이 미치는 영향을 격리
● Portfolio 클래스는 5분 단위로 값이 변화하는
TokyoStockExchange 외부 API를 사용하여
값을 계산 할때, 테스트 코드를 만들기 힘들
다.
● 그러므로 StockExchange라는 인터페이스를
생성한 후 메소드 하나를 선언한다.
15. 5. 변경하기 쉬운 클래스
● 시스템 결합도를 낮추면 유연성과 재
사용성도 더 높아진다.
● 결합도가 낮다는 말은 각 시스템 요소
가 다른 요소로부터, 또한 변경으로부
터 잘 격리돼 있다는 의미
● 결합도를 최소로 줄이면 자연스럽게
또 다른 클래스 설계 원칙인 DIP
(Dependency Inversion Principle)를 따
르는 클래스가 나온다.