[우아한테크코스] 2월 25일 TIL
오늘 배운 점 정리
- 로또 미션 피드백 반영
- 로또 미션 2단계 진행
- 테코톡
테코톡
- DTO vs VO
- DTO: 데이터 전달용
데이터를 전달하기 위해 사용하는 객체, 계층 간 데이터를 전달하기 위한 객체
오직 getter/setter 메서드만 갖는다. 다른 로직은 가지지 않는다.
불변객체로 생성하면 불변성을 보장할 수 있다.
Entity class와 DTO class는 분리하는게 좋다. view의 변경에 따라 다른 값을 제공하지 않아도 되도록
속성 값이 같다해도 같은 객체가 아닐 수 있다. - VO: 값 표현용
값 자체를 표현하므로 불변 객체여야 하고, 생성자를 통해서만 값을 초기화해야한다.
getter/setter 이외에 로직을 가질 수 잇다.
속성 값이 모두 같으면 같은 객체
- DTO: 데이터 전달용
- MVC 패턴
유지보수가 편해지는 코드 구성 방식- model: 데이터와 관련된 부분
- view: 사용자에게 보여지는 부분
- controller: model과 view를 연결하는 부분
- model은 controller와 view에 의존하지 않아야 한다.
- view는 model에만 의존해야 하고 controller에는 의존하면 안된다.
- view가 model로부터 데이터를 받을 때는 사용자마자 다르게 보여주어야 하는 데이터에 대해서만 받아야 한다.
- controller에는 model과 view에 의존해도 된다.
- view가 model로부터 데이터를 받을 때 반드시 controller에서 받아야 한다.
- this
LottoNumber caching
private static final LottoNumber[] cache;
static {
cache = new LottoNumber[(MAXIMUM_NUMBER - MINIMUM_NUMBER) + 1];
for (int i = 0; i < MAXIMUM_NUMBER; i++) {
cache[i] = new LottoNumber(i + MINIMUM_NUMBER);
}
}
위와 같은 방식으로 LottoNumber를 45개만 만들고 캐싱하여 아래 정적 팩토리 메서드를 적용해 사용하도록 구현하였다.
public static LottoNumber valueOf(String value) {
try {
return cache[makeNumber(value) - MINIMUM_NUMBER];
} catch (ArrayIndexOutOfBoundsException e) {
throw new IllegalArgumentException(ERROR_MESSAGE_INVALID_RANGE);
}
}
public static LottoNumber of(int number) {
try {
return cache[number - MINIMUM_NUMBER];
} catch (ArrayIndexOutOfBoundsException e) {
throw new IllegalArgumentException(ERROR_MESSAGE_INVALID_RANGE);
}
}