-
클래스 체계
- 표준자바 관례에 따르면 가장 먼저 변수 목록이 나온다
- static , public 상수가 있다면 맨 처음 나온다.
- 다음 private 변수가 나오며 이어서 비공개 인스턴스 변수가 나온다.
- 변수 목록 다음에는 공개 함수가 나온다.
- 비공개 함수는 자신을 호출하는 공개 함수 직후에 넣는다.
- 즉 추상화 단계가 순차적으로 내려간다.
- 그래서 프로그램은 신문 기사처럼 읽힌다.
-
캡슐화
- 변수와 유틸리티 함수는 가능한 공개하지 않는 편이 낫지만
- 반드시 숨겨야 한다는 법칙도 없다.
- 떄로는 protected로 선언해 테스트코드에 접근을 허용하기도 한다.
- 같은 패키지 안에서 테스트코드가 함수를 호출하거나 변수를 사용해야 한다면
- 그 함수나 변수를 protected로 선언하거나 패키지 전체로 공개한다.
- 하지만 그전에 비공개 상태를 유ㅜ지할 온갖 방법을 강구한다.
- 캡슐화를 풀어주는 결정은 언제나 최후의 수단이다.
-
클래스는 작아야 한다.
-
작아야 이해하기가 쉽고
-
작아야 짜기도 쉽다.
-
클래스가 작아야 한다는 기준은 책임 이다.
-
클래스 이름은 해당 클래스 책임을 적어야 한다.
-
작명은 클래스의 책임을 줄이는 첫번째 관문이다.
-
간결한 이름이 떠오르지 않는다면 클래스의 책임이 많은것이다. 나눠라
-
클래스 설명은 if , and , or , but 을 사용 하지않고서 25단어 내외로 가능해야 한다.
-
단일책임원칙 ( SRP )
- 말그대로 클래스는 책임이 하나여야 된다.
-
응집도
-
클래스는 인스턴스 변수의 수가 적어야 한다.
-
일반적으로 메서드가 변수를 더 많이 사용할수록 메서드와 클래스는 응집도가 높다.
-
함수를 작게, 매개변수 목록을 짧게
-
라는 전략을 따르다보면 때떄로 몇몇 메서드만이 사용하는 인스턴스 변수가 아주 많아진다.
-
이때는 새로운 클래스로 쪼개야 된다는 신호.
-
응집도가 높아지도록 변수와 메서드를 적절히 분리해 새로운 클래스로 쪼갠다
-
-
응집도를 유지하면 작은 클래스 여럿이 나온다.
-
몇몇 함수만 사용하는 인스턴스 변수가 늘어난다면
-
쪼개라 따로 클래스로 쪼개버려라
-
이렇게 큰함수를 작은함수로 쪼개다보면 작은 클래스 여럿으로 쪼개지게 되는데
-
이러면 프로그램에 점점 더 체계가 잡히고 구조가 투명해진다.
-
가장 먼저 원래 프로그램의 정확한 동작을 검증하는 테스트 코드를 작성
-
그런 다음 한번에 하나씩 수차례에 걸쳐 조금씩 코드를 변경
-
코드를 변경할때마다 테스트를 수행해 원래 프로그램과 동일하게 동작하는지 확인했다.
-
조금씩 원래 프로그램을 정리한 결과 최종 프로그램이 얻어졌다.
-
-
변경하기 쉬운 클래스
-
깨끗한 시스템은 클래스를 체계적으로 정리해 소스 변경시 일어나는 의도대로 동작하지 않을 위험을 낮춘다.
-
클래스에 손을 대는 순간 설계를 개선하려는 고민과 시도가 필요.
-
클래스를 분리 시킴으로써 SRP와 OCP 두가지 장점을 취한다.
-
메인기능 클래스를 따로 빼서 나머지 기능 클래스들이 그 기능을 상속받아 오버라이딩 한다. ( OCP )
-
확장에 개방적이고 수정에 폐쇄적인 구조가 생성된다.
-
-
변경으로부터 격리
- 상세한 구현에 의존하는 코드는 개념이 바뀌면 위험에 빠진다.
- 시스템의 결합도를 낮추면 유연성과 재사용성도 더욱 높아진다.
- 결합도가 낮다는 소리는 각 시스템 요소가 다른 요소로부터 격리되어 있다는 의미
-
10장 - 클래스
2020. 12. 22. 02:12