객체지향 생활체조 원칙은 소트웍스 앤솔러지(ThoughtWorks Anthology) 라는 책에 나오는 원칙이다.
목차
- 한 메서드에 오직 한 단계의 들여쓰기(indent)만 한다.
- else 예약어를 사용하지 않는다.
- 모든 원시 값과 문자열을 포장한다.
- 일급 컬렉션을 쓴다.
- 한 줄에 점을 하나만 찍는다.
- 줄여 쓰지 않는다 ( 축약 금지 )
- 모든 엔티티를 작게 유지한다.
- 3개 이상의 인스턴스 변수를 가진 클래스를 쓰지 않는다.
- Getter / Setter / Property를 쓰지 않는다.
else 예약어를 사용하지 않는다.
if-else에서 else 예약어를 사용하지 않는다는 의미입니다. switch문도 허용하지 않습니다.
public class ex2 {
public static void main(String[] args) {
String select = "1";
String payment = getPayment(select);
System.out.println(payment); // "신용카드"
}
private static String getPayment(String select) {
String payment = null;
if ("1".equals(select)) {
payment = "신용카드";
} else if ("2".equals(select)) {
payment = "무통장입금";
} else if ("3".equals(select)) {
payment = "카카오페이";
} else {
payment = "네이버페이";
}
return payment;
}
}
if-else 문을 사용하여 코드를 작성했습니다. 겉보기에는 가독성도 괜찮고 전혀 문제될것이 없는 코드 같습니다. 하지만 실제 로직을 작성한다면 이보다 훨씬 복잡한 코드를 작성하게 될것입니다.
이 코드의 비즈니스적으로 문제가 있습니다. 사용자가 1,2,3,4가 아닌 다른 값을 넣었다면? 개발자는 예외가 발생하길 원하지만 실제로는 "네이버페이"가 정상적으로 반환될것입니다. 이는 설계의도를 완전히 벗어난 결과입니다. 이제 early return 구조를 적용해보겠습니다.
public class ex2 {
public static void main(String[] args) {
String select = "5";
String payment = getPayment(select); // NotFoundPaymentException 예외발생!!
System.out.println(payment);
}
private static String getPayment(String select) {
if ("1".equals(select)) {
return "카드";
}
if ("2".equals(select)) {
return "무통장입금";
}
if ("3".equals(select)) {
return "카카오페이";
}
if ("4".equals(select)){
return "네이버 페이";
}
throw new NotFoundPaymentException("잘못된 결제방식입니다.");
}
}
구조를 살짝 바꾸면서 메서드의 가독성이 높아졌습니다. 개발자가 의도한대로 조건에 만족한다면 결제방식을 바로 반환하며 종료됩니다. 반대로 조건에 만족하는 결과가 없다면 예외를 발생시키면서 설계의도대로 동작할것입니다.
'Language > 객체지향' 카테고리의 다른 글
객체지향 생활체조 원칙 6. 줄여 쓰지 않는다 (축약 금지) (0) | 2024.01.21 |
---|---|
객체지향 생활체조 원칙 5. 한 줄에 점을 하나만 찍는다. (0) | 2024.01.21 |
객체지향 생활체조 원칙 4. 일급 컬렉션을 사용한다. (0) | 2024.01.16 |
객체지향 생활체조 원칙 3. 모든 원시 값과 문자열을 포장한다. (0) | 2024.01.10 |
객체지향 생활체조 원칙 1. 한 메서드에 오직 한 단계의 들여쓰기(indent)만 한다. (0) | 2024.01.02 |