객체지향 생활 체조 원칙

NNIIE·2022년 9월 25일
0

cleancode

목록 보기
1/1

객체지향 생활 체조 원칙

소트웍스 엔솔러지의 객체지향 생활체조 원칙은 객체지향 프로그래밍을 잘 하기 위한 9가지 원칙을 제시하고 있다.

1. 한 메서드에 오직 한 단계의 들여쓰기(indent)만 한다.

for (String str : strArray) {
	if (str < 0) {
    	throw new RuntimeException("0보다 작을수 없습니다.");
    }
}

for 문 안에 if-> indent == 2

메소드로 분리하자

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

  • 메소드로 분리하자

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


4. 한 줄에 점을 하나만 찍는다.


5. 줄여쓰지 않는다(축약 금지).


6. 모든 엔티티를 작게 유지한다.


7. 3개 이상의 인스턴스 변수를 가진 클래스를 쓰지 않는다.


8. 일급 콜렉션을 쓴다.

public class LottoTicket {
	private static final int LOTTO_NUMBERS_SIZE = 6;
    private final List<Long> lottoNumbers;
    
    // 6개 / 중복되지 않은 숫자들만 가능한 자료구조
    public LottoTicket(List<Long> lottoNumbers) {
    	validationSize(lottoNumbers);
        validationDuplicate(lottoNumbers);
        this.lottoNumbers = lottoNumbers;
    }
    
    private void validationSize(List<Long> lottoNumbers) {
    	if (lottoNumbers.size() != LOTTO_NUMBERS_SIZE) {
        	throw new IllegalArgumentException("로또 번호는 6개만 가능합니다.");
        }
    }
    
    private void validationDuplicate(List<Long> lottoNumbers) {
    	Set<Long> nonDuplicateNumbers = new HashSet<>(lottoNumbers);
        if (nonDuplicateNumbers.size() != LOTTO_NUMBERS_SIZE) {
        	throw new IllegalArgumentException("로또 번호들은 중복될 수 없습니다.");
        }
    }
}
public class LottoService2 {
	
    public void createLottoNumber() {
    	// 필요한 로직은 모두 LottoTicket 으로
    	LottoTicket lottoTicket = new LottoTicket(createNonDuplicateNumbers);
    }
}

9. 게터/세터/프로퍼티를 쓰지 않는다.



객체지향 설계와 구현은 수학 공식을 외워서 문제를 푸는 것과 달리 이론을 안다고 해도 이 이론을 설계와 구현에 녹여내려면 지속적인 수련이 필요한 영역이다.
여기서 수련이라는 의미는 어느 누구나 야구공을 던지는 이론은 다 알고 있지만 이론을 안다고 누구나 다 프로선수 처럼 공을 던질 순 없고 지속적인 훈련(수련)을 통해서만 가능하다.

많은 개발자들이 지속적인 수련이 중요하다는 것은 알기 때문에 객체지향 설계와 구현 연습에 도전한다.
하지만 객체지향 설계를 다루고 있는 대부분의 책이 추상적인 이론을 다루고 있기 때문에 초보 개발자는 몇 번 도전 후에 포기하는 상황이 발생한다.
특히 어려운 점은 소스 코드 중 문제가 있는 부분을 찾는 것이다. 어떻게 리팩토링할 것인지는 그 다음 이슈이다.
개선할 부분을 찾지도 못하는 개발자들에게 아무리 객체지향 설계와 구현과 관련한 이론을 제시해도 무용지물이다.

객체지향 생활 체조 원칙은 추상적인 가이드가 아니라 구체적인 가이드를 제시하고 있다.
따라서 초보 개발자도 코드 중에서 리팩토링할 부분(Bad Smell이 있는 부분)이 있는 코드를 쉽게 찾을 수 있으며, 도전해 볼 수 있다.
예를 들어 "규칙 1: 한 메서드에 오직 한 단계의 들여쓰기(indent)만 한다."는 정말 구체적이다.
코드 중 들여쓰기가 2 이상인 코드가 있다면 그 부분을 어떻게 리팩토링할 것인지 고민하면 된다.

이와 같이 구체적인 가이드를 통해 꾸준히 수련하다보면 어느 순간 객체지향 설계와 관련한 추상적인 이론들이 이해되는 시점이 찾아온다.



참조 : NEXTSTEP - TDD, 클린 코드 with Java

0개의 댓글