[우아한테크코스] 2월 25일 TIL

1 minute read

오늘 배운 점 정리

  1. 로또 미션 피드백 반영
  2. 로또 미션 2단계 진행
  3. 테코톡

테코톡

  1. DTO vs VO
    • DTO: 데이터 전달용
      데이터를 전달하기 위해 사용하는 객체, 계층 간 데이터를 전달하기 위한 객체
      오직 getter/setter 메서드만 갖는다. 다른 로직은 가지지 않는다.
      불변객체로 생성하면 불변성을 보장할 수 있다.
      Entity class와 DTO class는 분리하는게 좋다. view의 변경에 따라 다른 값을 제공하지 않아도 되도록
      속성 값이 같다해도 같은 객체가 아닐 수 있다.
    • VO: 값 표현용
      값 자체를 표현하므로 불변 객체여야 하고, 생성자를 통해서만 값을 초기화해야한다.
      getter/setter 이외에 로직을 가질 수 잇다.
      속성 값이 모두 같으면 같은 객체

  2. MVC 패턴
    유지보수가 편해지는 코드 구성 방식
    • model: 데이터와 관련된 부분
    • view: 사용자에게 보여지는 부분
    • controller: model과 view를 연결하는 부분
    1. model은 controller와 view에 의존하지 않아야 한다.
    2. view는 model에만 의존해야 하고 controller에는 의존하면 안된다.
    3. view가 model로부터 데이터를 받을 때는 사용자마자 다르게 보여주어야 하는 데이터에 대해서만 받아야 한다.
    4. controller에는 model과 view에 의존해도 된다.
    5. view가 model로부터 데이터를 받을 때 반드시 controller에서 받아야 한다.

  3. 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);
        }
    }

제네릭

읽어볼 글1
읽어볼 글2

모던 자바 인 액션 쩡리