1. 한 메서드에 오직 한 단계의 들여 쓰기
- 설명: 메서드 내에서 중첩된 로직(조건문, 반복문 등)을 피하고, 단순하게 작성한다.
- 목적: 메서드가 너무 복잡해지는 것을 방지하고 가독성을 높인다.
- 실천: 중첩된 로직은 메서드로 분리한다.
2. else 예약어를 쓰지 않는다.
- 설명: 조건문에서 else를 사용하지 말고, 조건이 맞지 않는 경우 바로 반환(return)하거나 예외를 던진다.
- 목적: 코드의 흐름을 단순화하고 읽기 쉽도록 한다.
// 나쁜 예
if (condition) {
doSomething();
} else {
doSomethingElse();
}
// 좋은 예
if (condition) {
doSomething();
return;
}
doSomethingElse();
3. 모든 원시값과 문자열을 포장한다.
- 설명: 원시값(primitive type)과 문자열은 의미를 명확히 하기 위해 객체로 포장한다.
- 목적: 의미를 더하고, 값의 유효성을 검증하거나 관련된 로직을 추가할 수 있다.
public class ProductPrice {
private final int price;
public ProductPrice(int price) {
if (price < 0) {
throw new IllegalArgumentException("값은 0 이상이어야 합니다.");
}
this.price = price;
}
}
4. 한 줄에 점을 하나만 찍는다.
- 설명: 메서드 체이닝이나 연속적으로 객체에 접근하는 코드를 피한다.
- 목적: 객체의 내부 구조에 대한 의존성을 줄이고 캡슐화를 유지한다.
// 나쁜 예
order.getCustomer().getAddress().getCity();
// 좋은 예
Customer customer = order.getCustomer();
Address address = customer.getAddress();
String city = address.getCity();
5. 줄여 쓰지 않는다 (축약 금지).
- 설명: 변수명, 메서드명 등을 줄여 쓰지 않고 의미를 명확히 작성한다.
- 목적: 가독성을 높이고 코드의 의도를 명확히 한다.
// 나쁜 예
int cnt;
String addr;
// 좋은 예
int count;
String address;
6. 모든 엔티티를 작게 유지한다.
- 설명: 클래스와 메서드는 하나의 책임만 가지며 작게 유지해야 한다.
- 목적: 단일 책임 원칙(SRP)을 따르고, 코드가 이해하기 쉬워지며, 변경에 유연하게 대응할 수 있다.
7. 2개 이상의 인스턴스 변수를 가진 클래스를 쓰지 않는다.
- 설명: 클래스는 2개 이하의 필드를 가지도록 설계하며, 더 많은 필드는 객체로 분리한다.
- 목적: 응집도를 높이고, 더 작은 단위의 객체로 분리하여 책임을 명확히 한다.
8. 3개 이상의 인자를 가진 생성자를 쓰지 않는다.
- 설명: 생성자는 3개 이상의 인자를 사용하지 말고, 객체나 빌더 패턴을 활용하여 이를 해결한다.
- 목적: 가독성과 유지보수성을 높이고, 코드의 의도를 더 명확히 한다.
// 나쁜 예
public User(String name, int age, String address, String email) { ... }
// 좋은 예
public class User {
private Name name;
private Age age;
private Address address;
private Email email;
}
9. 1급 컬렉션을 쓴다.
- 설명: 컬렉션(리스트, 맵 등)을 래핑한 클래스를 만들어, 컬렉션과 관련된 로직을 해당 클래스 안에서 처리한다.
- 목적: 컬렉션의 캡슐화를 유지하고, 비즈니스 로직을 분산시키지 않는다.
'개발 개념' 카테고리의 다른 글
단위 테스트와 테스트 더블 (0) | 2025.02.13 |
---|---|
클린아키텍처 (0) | 2025.02.11 |
1급 컬렉션 (0) | 2025.02.11 |
VO(Value Object) (0) | 2025.02.11 |
객체지향 (3) | 2025.02.07 |