반응형
1. 스프링 빈 ( Spring Bean )
- 스프링 빈은 객체와 이름, 클래스 타입의 정보가 스프링 컨테이너로 관리되는 객체를 의미한다.
2. 자바 빈 ( Java Bean )
- 자바 빈은 기본 생성자가 선언되어 있어야 함.
- getter / setter 패턴으로 클래스 내부 속성에 접근할 수 있어야 한다.
- java.io.Serializable을 구현하고 있어야한다.
3. DTO ( Data Transfer Object )
- DTO는 소프트 웨어 사이에 데이터를 전달하는 객체를 의미한다.
- 데이터를 전달하는 객체이므로 DTO내부에는 비즈니스 로직이 없어야한다. ( getter 제외 )
4. 값 객체 ( Value Object, VO )
- 값 객체는 특정 데이터를 추상화 하여 데이터를 표현하는 객체를 의미한다.
- equals 메서드를 재정의해서 클래스가 표현하는 값을 서로 비교하면 좋다.
불변클래스
getter, setter 메서드를 무분별하게 사용하지 않도록 주의해야한다.
불변 클래스를 선언하는 방법은
- 클래스를 반드시 final로 선언한다.
- 클래스의 맴버변수들을 반드시 final로 선언한다.
- 생성자를 직접 선언하여 기본생성자가 있지 않도록 한다.
- 맴버 변수에서는 setter 메서드를 만들지 않고 getter메서드를 만들어 사용한다.
불변 클래스 예시) Money
public final class Money implements Serializable {
private final Long value;
private final Currency currency;
public Money(Long value, Currency currency) {
if (value == null || value < 0) {
throw new IllegalArgumentException("invalid value = " + value);
}
if (currency == null) {
throw new IllegalArgumentException("invalid currency");
}
this.value = value;
this.currency = currency;
}
public Long getValue() {
return value;
}
public Currency getCurrency() {
return currency;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Money money = (Money) o;
if (!getValue().equals(money.getValue())) return false;
return getCurrency().equals(money.getCurrency());
}
}
불변 클래스를 설계할 떄는 반드시 final 키워드를 클래스에 선언해야 한다.
final 키워드를 선언하지 않으면 클래스 상속이 발생할 수 있고 Money의 메서드들이 오버라이드 될 수 있다.