책에서 소개된 규칙 요약
-
다섯 줄 제한
- 메서드는 사용하는 데이터 구조를 탐색하는 데 필요한 것보다 더 많은 코드로 구성돼서는 안됩니다.
-
호출 또는 전달, 한 가지만 할 것
- 함수 내에서는 객체에 있는 메서드를 호출하거나 객체를 인자로 전달할 수 있지만 둘을 섞어 사용해서는 안됩니다.
-
if문은 함수의 시작에만 배치
- if문이 있는 경우 해당 if문은 함수의 첫 번째 항목이어야 합니다.
-
if 문에서 else를 사용하지 말 것
- 프로그램에서 이해하지 못하는 타입(형)인자를 검사하지 않는 한 if문에서 else를 사용하지 마십시오
-
switch를 사용하지 말 것
- default케이스가 없고 모든 case에 반환 값이 있는 경우가 아니라면 switch를 사용하지 마십시오
-
인터페이스에서만 상속받을 것
- 상속은 클래스나 추상클래스가 아닌 오직 인터페이스를 통해서만 받습니다.
-
순수 조건 사용
- 조건문의 조건식에서는 변수에 값을 할당하거나 예외를 발생시키거나 I/O와 상호작용해서는 안 됩니다.
-
구현체가 하나뿐인 인터페이스를 만들지 말 것
- 구현체가 하나뿐인 인터페이스를 사용하지 마십시오.
-
getter와 setter를 사용하지 말 것
- 부울이 아닌 필드에 setter나 getter를 사용하지 마십시오
-
공통 접사를 사용하지 말 것
- 코드에는 공통 접두사나 접미사가 있는 메서드나 변수가 없어야 합니다.
책에서 소개된 리팩터링 패턴 요약
-
메서드 추출
- 한 메서드의 일부를 가져와 고유한 메서드로 추출합니다.
-
클래스로 타입 코드 대체
- 열거형을 인터페이스로 변환하고 열거형의 값을 클래스로 만듭니다.
-
클래스로의 코드 이관
- 기능을 클래스로 옮기기 때문에 "클래스로 타입 코드 대체"는 클래스의 코드 이관으로 자연스럽게 이어집니다.
-
메서드의 인라인화
- 프로그램의 가독성에 더 이상 도움을 주지 않는 메서드를 제거합니다.
-
메서드 전문화
- 메서드에서 불필요하고 문제가 있는 일반성을 제거합니다.
-
삭제 후 컴파일하기
- 인터페이스와 클래스의 전체 사용 범위를 알고 있는 경우 사용하지 않는 메서드를 인터페이스와 클래스에서 제거합니다.
-
유사 클래스 통합
- 일련의 상수 메서드에서 서로 다른 두 개 이상의 클래스를 통합합니다.
-
if 문 결합
- 동일한 본문을 가진 if문이 이어진 경우 if문의 분기들을 결합해서 중복을 줄입니다.
-
전략 패턴의 도입
- if 문을 사용한 분기를 클래스를 인스턴스화하는 것으로 대체합니다.
-
구현에서 인터페이스 추출
- 클래스에 대한 종속성을 인터페이스로 바꿉니다.
-
getter와 setter제거하기
- 기능을 데이터에 더 가깝게 옮겨 getter와 setter를 제거합니다.
-
데이터 캡슐화
- 변수와 관련된 불변속성을 지역화하고 응집력을 더 명확히 합니다.
-
순서 강제화
- 특정 순서대로 작업을 수행하는 것을 컴파일러가 보장하게 합니다.