본문 바로가기

우아한테크코스

레벨 1 - 레벨 로그

자동차 경주

단위 테스트를 작성하는 이유

  • 내가 작성한 코드가 생각한대로 잘 동작하는지 확인하기 위해 출력을 해서 눈으로 확인할 필요가 없다
  • 코드가 복잡해지면 기능 하나하나 확인하기 쉽지 않다
  • 테스트 케이스를 생각하는 과정에서 코드 예외처리를 어떻게 진행할지 생각할 수 있다
  • 리팩토링 시 테스트 코드가 따로 작성되어있으면 수정 기능 확인 테스트 코드를 실행시켜보면 된다
  • 개발 및 테스트에 대한 시간과 비용 절감 가능

MVC 패턴 
하나의 애플리케이션, 프로젝트를 구성할 구성요소를 세가지의 역할로 구분한 패턴

  • 비즈니스 로직과 화면을 구분한다
  • 모델과 뷰는 서로를 몰라야 한다. (컨트롤러가 중재)
  • domain view 의존하지 않도록 한다
  • view domain 의존하지 않도록 한다

toString() 사용법

  • 모든 하위클래스에서 재정의해야 한다
  • 프로덕션 출력용으로 사용하지 말아야 한다

사다리

TDD

실패하는 테스트 코드 작성 -> 테스트가 성공하는 프로덕션 코드 만들기 -> 리팩토링 을 계속 반복하면서 개발하는 방법

 

원시값 포장
원시 유형의 (변수명) 이용해 의미를 나타내지 않고, 의미있는 객체로 포장한다는 개념

 

일급 컬렉션
Collection
Wrapping하면서 다른 변수가 없는 클래스

 

블랙잭

Collection 복사 방법

 

방어적 복사

  • 생성자를 통해 초기화하거나 내부의 객체를 반환할 때, 새로운 객체로 감싸서 복사해주는 방법
  • 원본 collection 과의 주소 연결은 끊어줬지만 collection 이 가지고 있는 각각의 객체의 주소는 공유되어 있다.

copy.of

  • 원본 객체와의 주소 공유도 끊어주고, unmodifiable 로 만들어서 반환
  • cf. unmodifiableList()
    • 원본 객체와의 주소가 공유되어 있어 원본 객체가 변경되었을 경우 동일하게 영향을 받는다.
    • 읽기 용도로만 사용
    • 수정을 막는 것이 핵심 기능

체스

캐싱

데이터나 값을 미리 복사해두는 작업

반복적으로 사용되는 객체들을 미리 캐싱해두고 사용함으로써 계산이나 접근 시간 없이 빠르게 데이터에 접근할 수 있다

특히 VO 는 값만 같으면 동일한 역할을 하기 때문에 사용될 때마다 인스턴스를 생성하는 것은 메모리 낭비이다