본문 바로가기
멋쟁이사자처럼 동아리/공통피드백

4주차. 스프링 MVC

by PlusUltraCode 2024. 6. 22.

공통 피드백

원시값 포장하기 (값객체)

객체에 값도 규칙이 존재합니다. 예를 들어 로또 숫자는 단순한 Integer 값으로 표현될 수 없습니다. 음수, 값 제한 등의 검증이 필요합니다. 이러한 값들을 객체로 포장하여 의미를 표현하고 역할을 분리할 수 있습니다.

예시:

java
class Lotto {
    private final List<Integer> numbers;
    
    // 로또의 숫자 검증
    private void validateRange(int number) {
        if (number < 1 || number > 45) {
            throw new IllegalArgumentException("로또 번호는 1부터 45 사이여야 합니다.");
        }
    }
}

// 또는

class LottoNumber {
    public static final int MIN_VALUE = 1;
    public static final int MAX_VALUE = 45;

    private final int value;
    
    private void validateRange(int number) {
        if (number < MIN_VALUE || number > MAX_VALUE) {
            throw new IllegalArgumentException("로또 번호는 1부터 45 사이여야 합니다.");
        }
    }
}

class Lotto {
    private final List<LottoNumber> numbers;
}

일급 컬렉션

값 객체 포장의 일부로, 단일 타입이 아닌 컬렉션을 포장하는 개념입니다. 예를 들어, 로또 숫자들은 1 ~ 45 사이의 값이어야 하고, 중복되지 않는 숫자 6개로 이루어져야 합니다. 이러한 정책을 담는 객체로 포장할 수 있습니다.

예시:

java
class LottoNumbers { // Lotto
    private static final int LOTTO_SIZE = 6;
    
    private final List<LottoNumber> lottoNumbers;
    
    private void validateNumberDuplication() {
        // ...
    }
}

---

class Cars {
    private final List<Car> cars;

    public void validateCarNameDuplication() {
        // ...
    }
        
    public Car findWinner() {
        // ...
    }
    
    public Car size() {
        // ...
    }
}

이렇게 하면 명시적인 이름 사용과 집합(컬렉션)에 대한 정책 적용이 가능합니다.

방어적 복사

방어적 복사는 객체가 외부에서 변경되지 않도록 방어하는 방법입니다.

예시:

java
 
class LottoNumbers {
    private final List<LottoNumber> lottoNumbers;
    
    public LottoNumbers(List<LottoNumber> numbers) {
        this.lottoNumbers = new ArrayList<>(numbers);
    }
    
    public List<LottoNumber> getNumbers() {
        return List.copyOf(this.lottoNumbers);
    }
}

Java Enum 활용하기

Enum도 객체이며, 연관된 상수들의 집합처럼 사용할 수 있습니다. 필드도 가질 수 있어, 보다 복잡한 상수들을 정의하고 사용할 수 있습니다.

예시:

java
public enum LottoType {
    STANDARD(6),
    MINI(4);

    private final int numberOfBalls;

    LottoType(int numberOfBalls) {
        this.numberOfBalls = numberOfBalls;
    }

    public int getNumberOfBalls() {
        return numberOfBalls;
    }
}

위의 예시와 같이 Enum을 활용하면 관련된 상수들의 집합을 객체처럼 사용할 수 있어 코드의 가독성과 유지보수성을 높일 수 있습니다.

 
 

'멋쟁이사자처럼 동아리 > 공통피드백' 카테고리의 다른 글

7주차. 인증  (0) 2024.06.22
6주차 Spring core  (0) 2024.06.22
5주차. 스프링 JDBC  (0) 2024.06.22
3주차. 클린코드  (0) 2024.06.22
2주차. 단위테스트  (0) 2024.06.22