본문 바로가기
728x90

clean code9

12. 창발성 창발성은 하위계층(구성 요소)에 없는 특성이나 행동이 상위계층(전체 구조)에서 자발적으로 돌연히 출현하는 현상이다. 예컨데, 개미 한 마리는 집을 지을 지능이 없다. 하지만 큰 집단의 개미들은 서로 상호작용하며 하나의 집을 만들어 내는 것이 창발이다. 여기 따르기만 해도 우수한 설계가 나오는 간단한 규칙이 있다. 이 규칙들은 우수한 설계의 창발성을 촉진한다. 1. 모든 테스트를 실행한다. 2. 중복을 없앤다. 3. 프로그래머 의도를 표현한다. 4. 클래스와 메서드 수를 최소로 줄인다. 모든 테스트를 실행한다. 문서로 설계를 완벽히 했어도 시스템이 의도한 대로 돌아가는지 검증할 간단한 방법이 없다면, 문서 장성을 위해 투자한 노력에 대한 가치를 인정받기 힘들다. 테스트가 불가능한 시스템은 검증도 불가능하다.. 2022. 2. 2.
10. 클래스 클래스 체계 클래스를 정의하는 표준 자바 관례에 따르면 클래스 내부의 상태와 행위는 다음과 같은 순서로 열거되 있어야 한다. 1. static public 상수 2. static private 변수 3. 비공개 인스턴스 4. public 메서드 5. private 메서드(자신을 호출하는 public 메서드 직후에 들어간다 -> 추상화 단계가 순차적으로 내려간다) 캡슐화 상태와 구현은 되도록이면 객체 내부에 숨겨야 한다. 물론 구현을 protected로 선언해 테스트 코드에 접근을 허용하는 경 우도 있지만 이들의 캡슐화를 해제하기 전에 다른 방법이 있는지를 먼저 고려해야 한다. 클래스는 작아야 한다 함수와 마찬가지로 클래스 역시 작아야 한다. 다만 함수의 크기를 물리적인 행으로 특정했다면 클래스는 책임을 .. 2022. 1. 23.
9. 단위 테스트 TDD의 세가지 법칙 1. 실패하는 단위 테스트를 작성할 때까지 실제 코드를 작성하지 않는다. 2. 컴파일은 실패하지 않으면서 실행이 실패하는 정도로만 단위 테스트를 작성한다. 3. 현재 실패하는 테스트를 통과할 정도로만 실제 코드를 작성한다. 위 규칙을 따르면 개발과 테스트가 대략 30초 주기로 묶인다. 테스트 코드와 실제 코드가 함께 나오고 테스트 코드가 실제 코드보다 불과 몇 초 전에 나온다. 이런 플로우를 가지고 코드를 작성하면 방대한 양의 테스트코드가 작성되고 실제 코드를 거의 다 테스트하는 테스트 케이스가 나온다. 하지만 이런 방대한 양의 테스트 코드는 심각한 관리 문제를 야기한다. 깨끗한 테스트 코드 유지하기 테스트 코드는 깔끔해야 한다. TDD라는 개념이 없던 시절의 테스트 코드 또는 현대.. 2022. 1. 20.
Chapter 8. 경계 시스템을 만들기 위해 때로는 외부 패키지, 오픈 소스를 활용한다. 따라서 코드를 작성할 때 외부 코드와 우리의 코드를 깔끔하게 통합해야 한다. 코드의 깔끔한 통합은 다음과 같은 방법을 통해 달성할 수 있다. 외부 코드 사용하기 패키지나 프레임워크 제공자는 이들의 적용성을 최대한 넓히려 한다. 반면 사용자는 자신의 요구사항에 집중하는 인터페이스를 원한다. 예를 들어 java.util.Map의 경우 아주 많은 기능들을 제공하고 있기 때문에 위험도가 높다. Map의 경우 clear()메서드를 통해 누구나 상태를 지울 권한이 있다. 또 한 Map을 다음과 같이 사용할 경우 객체 유형을 제한하지 않는다. 1 2 3 4 Map sensors = new HashMap(); // 객체 유형을 제한하지 않는다. // M.. 2022. 1. 19.
728x90