자동차 경주
단위 테스트를 작성하는 이유
- 내가 작성한 코드가 생각한대로 잘 동작하는지 확인하기 위해 출력을 해서 눈으로 확인할 필요가 없다
- 코드가 복잡해지면 기능 하나하나 확인하기 쉽지 않다
- 테스트 케이스를 생각하는 과정에서 코드 예외처리를 어떻게 진행할지 생각할 수 있다
- 리팩토링 시 테스트 코드가 따로 작성되어있으면 수정 후 기능 확인 시 테스트 코드를 실행시켜보면 된다
- 개발 및 테스트에 대한 시간과 비용 절감 가능
MVC 패턴
하나의 애플리케이션, 프로젝트를 구성할 때 구성요소를 세가지의 역할로 구분한 패턴
- 비즈니스 로직과 화면을 구분한다
- 모델과 뷰는 서로를 몰라야 한다. (컨트롤러가 중재)
- domain 은 view 에 의존하지 않도록 한다
- view 는 domain 에 의존하지 않도록 한다
toString() 사용법
- 모든 하위클래스에서 재정의해야 한다
- 프로덕션 출력용으로 사용하지 말아야 한다
사다리
TDD
실패하는 테스트 코드 작성 -> 테스트가 성공하는 프로덕션 코드 만들기 -> 리팩토링 을 계속 반복하면서 개발하는 방법
원시값 포장
원시 유형의 값(변수명)을 이용해 의미를 나타내지 않고, 의미있는 객체로 포장한다는 개념
일급 컬렉션
Collection을 Wrapping하면서 그 외 다른 변수가 없는 클래스
블랙잭
Collection 복사 방법
방어적 복사
- 생성자를 통해 초기화하거나 내부의 객체를 반환할 때, 새로운 객체로 감싸서 복사해주는 방법
- 원본 collection 과의 주소 연결은 끊어줬지만 collection 이 가지고 있는 각각의 객체의 주소는 공유되어 있다.
copy.of
- 원본 객체와의 주소 공유도 끊어주고, unmodifiable 로 만들어서 반환
- cf. unmodifiableList()
- 원본 객체와의 주소가 공유되어 있어 원본 객체가 변경되었을 경우 동일하게 영향을 받는다.
- 읽기 용도로만 사용
- 수정을 막는 것이 핵심 기능
체스
캐싱
데이터나 값을 미리 복사해두는 작업
반복적으로 사용되는 객체들을 미리 캐싱해두고 사용함으로써 계산이나 접근 시간 없이 빠르게 데이터에 접근할 수 있다
특히 VO 는 값만 같으면 동일한 역할을 하기 때문에 사용될 때마다 인스턴스를 생성하는 것은 메모리 낭비이다
'우아한테크코스' 카테고리의 다른 글
책임 연쇄 패턴을 사용해서 지하철 추가 요금 정책을 반영해보자 (0) | 2023.06.16 |
---|---|
h2 database 를 사용해서 InMemoryDao Test 하기 (0) | 2023.04.10 |
[우테코 프리코스] 5기 합격 (0) | 2023.01.04 |
[우테코 프리코스] 최종 코딩 테스트 (1) | 2023.01.04 |
[우테코 프리코스] 4주차 (1) | 2023.01.04 |