공통 피드백
원시값 포장하기 (값객체)
객체에 값도 규칙이 존재합니다. 예를 들어 로또 숫자는 단순한 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 |