객체지향 생활 체조 원칙 - 규칙2, 3, 8, 9

이 글은 NEXTSTEP의 TDD, Clean Code with Java 수업을 수강하며 내용을 정리한 포스트 입니다.


객체지향 생활 체조 원칙

객체지향 생활 체조 원칙은 소트웍스 앤솔러지 책에서 다루고 있는 내용으로 객체지향 프로그래밍을 잘 하기 위한 9가지 원칙을 제시하고 있다. 이 책에서 주장하는 9가지 원칙은 다음과 같다.

- 규칙 1: 한 메서드에 오직 한 단계의 들여쓰기(indent)만 한다.
- 규칙 2: else 예약어를 쓰지 않는다.
- 규칙 3: 모든 원시값과 문자열을 포장한다.
- 규칙 4: 한 줄에 점을 하나만 찍는다.
- 규칙 5: 줄여쓰지 않는다(축약 금지).
- 규칙 6: 모든 엔티티를 작게 유지한다.
- 규칙 7: 3개 이상의 인스턴스 변수를 가진 클래스를 쓰지 않는다.
- 규칙 8: 일급 콜렉션을 쓴다.
- 규칙 9: 게터/세터/프로퍼티를 쓰지 않는다.


규칙 2: else 예약어를 쓰지 않는다.

public int add(String text) {
    if (text == null || text.isEmpty()) {
        return 0;
    }
		return Integer.parseInt(text);
}


규칙 3: 모든 원시값과 문자열을 포장한다.

Ex. 인스턴스 변수 position을 포장하기

int position;

\\\

public class Position {

    public static final int DEFAULT = 0;

    private final int position;

    public Position() {
        this(DEFAULT);
    }

    public Position(int position) {
        if (position < DEFAULT) {
            throw new IllegalArgumentException(POSITION_VALUE_ERROR);
        }
        this.position = position;
    }

    public int position() {
        return position;
    }

    public Position increase() {
        return new Position(this.position + 1);
    }

    public Position max(Position other) {
        if (other.position > position) {
            return other;
        }
        return this;
    }
\\\
}


규칙 8: 일급 콜렉션을 쓴다.

콜렉션을 포함한 클래스는 반드시 다른 멤버 변수가 없어야 한다. 각 콜렉션은 그 자체로 포장돼 있으므로 이제 콜렉션과 관련된 동작은 근거지가 마련된셈이다. 필터가 이 새 클래스의 일부가 됨을 알 수 있다. 필터는 또한 스스로 함수 객체가 될 수 있다. 또한 새 클래스는 두 그룹을 같이 묶는다든가 그룹의 각 원소에 규칙을 적용하는 등의 동작을 처리할 수 있다.이는 인스턴스 변수에 대한 규칙의 확실한 확장이지만 그 자체를 위해서도 중요하다. 콜렉션은 실로 매우 유용한 원시 타입이다. 많은 동작이 있지만 후임 프로그래머나 유지보수 담당자에 의미적 의도나 단초는 거의 없다.

Ex. 로또 게임



규칙 9: getter/setter/property를 쓰지 않는다.

엘레강트 오브젝트 - 3.5 절대 getter와 setter를 사용하지 마세요

printf("Cash value is %d", cash.dollars) //자료구조
printf("Cash value is %d", cash.print()) //객체

//이렇게 짓기 class Cash { private final int value; public int dollars() { return this.value; } } ```