<일기>
오늘 아침에는 피부과에 다녀왔다. 두드러기가 많이 희미해지기는 했지만, 발, 등 정중앙, 배쪽이 여전히 남아있었다. 그래서 주사 맞고 약 받고 금방 돌아왔다. 살면서 처음으로 엉덩이 주사를 서서 맞아봤다 ㅋㅋ
오후에는 팀과제인 호텔 예약 시스템을 고도화 해갔다. 어제는 각자 나눈 파트별로 구현을 대부분 했고, 오늘은 실제로 실행해보면서 에러 나는 부분들 고쳐나갔다. 생각보다 버그가 별로 없어서 ㄷㄱ님의 설계력에 감탄했다~ 오늘 오후에는 ㄷㄱ님이 테스트 코드에 대해 간단히 설명해주었고 내일은 테스트 한번 짜보자고 했다. 마침 나도 테스트 코드 공부 중이었으니 좋다 :D
저녁 즈음에는 주말에 있을 스터디를 위해 이펙티브 자바의 내 부분을 공부하기 시작했다. 아이템24를 선택했는데 잘할 수 있겠지..
TDD 책은 틈틈히 공부 중이다. 7장이 대역에 대해 설명해주는 파트라 조금 긴데, 필요한 부분이라 중간에 멈추면 흐름 끊길까봐 계속 공부하고 있다. 7장 이후로는 양도 적당하고 코드보단 글이라 찬찬히 하루에 1챕터씩 정리해나가면 될 것 같다. 파이팅~
지금은 노션에다가 정리하고 있는데, 나중에는 지식 한 조각 카테고리에 책마다 하위 카테고리 파서 챕터별로 정리를 해보는 식으로 해야겠다.
</일기>
벌써 커밋이 100이 넘어가고 풀리퀘도 35건이 되었다. 팀원들이 풀리퀘에 익숙해지고 있는 것 같아 뿌듯-
이펙티브 자바 정리한 걸 붙여넣으려고 했는데 미완이라 일부분만 넣어야 겠다.
⭐ 용어 정리
중첩 클래스 (nested class) : 다른 클래스 안에 정의된 클래스.
중첩 클래스는 자신을 감싼 바깥 클래스에서만 쓰여야 하며, 그 외의 경우는 톱레벨 클래스로 만들어야 한다.
톱레벨 클래스 : 소스파일에서 가장 바깥에 존재하는 클래스.
중첩 클래스의 종류는
- 정적 멤버 클래스
- (비정적) 멤버 클래스 (*)
- 익명 클래스 (*)
- 지역 클래스 (*)
이 중 첫 번째를 제외한 나머지는 **내부 클래스(inner class)**에 해당한다. (위에서 * 표시 한 부분)
이번 아이템에서는 각각의 중첩 클래스를 언제 그리고 왜 사용하는지에 대해 다룬다.
⭐ 4. 지역 클래스
지역 클래스는 블록 안에 정의된 클래스로, 4가지 중첩 클래스 중 가장 드물게 사용된다.
지역 클래스는 지역 변수를 선언할 수 있는 곳이면 실질적으로 어디서든 선언할 수 있고, 유효 범위도 지역 변수와 같다.
다른 세 중첩 클래스와의 공통점도 하나씩 가지고 있다.
- 멤버 클래스처럼 이름이 있고, 반복해서 사용할 수 있다.
- 익명 클래스처럼 비정적 문맥에서 사용될 때만 바깥 인스턴스를 참조할 수 있으며, 정적 멤버는 가질 수 없으며(? 가지던데?), 가독성을 위해 짧게 작성해야 한다.
⭐ 핵심 정리
중첩 클래스에는 네 가지가 있으며 각각의 쓰임이 다르다.
- 멤버 클래스 : 메서드 밖에서도 사용해야 하거나 메서드 안에 정의하기엔 너무 길 경우 사용
- 멤버 클래스의 각 인스턴스가 바깥 인스턴스를 참조한다면 비정적으로, 아니라면 정적으로 만든다.
- 익명 클래스 : 중첩 클래스가 한 메서드 안에서만 쓰이면서 그 인스턴스를 생성하는 지점이 단 한 곳이고, 해당 타입으로 쓰기에 적합한 클래스나 인터페이스가 이미 있을 경우 사용
- 지역 클래스 : 익명 클래스를 쓰기 부적절한 경우에 사용
정적 멤버 클래스랑, 비정적 멤버 클래스랑, 익명 클래스는 지금 정리를 다시 하고 있어서 내일이면 완성 될 듯 하다~
노션으로 보면 이쁜데 티스토리는 너무 힝거 거믕거 밖에 없어서.. 아쉽다. 나중에는 그냥 노션에 웹 링크 오픈해서 돌려야겠다.
다음은 TDD 책 7장 정리한 거다. 7장은 코드가 많아서 글은 별로 없다.
07. 대역
대역의 필요성
테스트 대상에서 파일 시스템을 이용하거나, DB로부터 데이터를 조회나 추가하거나, 외부의 HTTP 서버와 통신하는 등의 외부 요인이 관여할 수도 있다.
테스트 대상이 이런 외부 요인에 의존하면 테스트를 작성하고 실행하기 어려워진다. 테스트 대상 코드에서 사용하는 외부 API 서버가 일시적으로 장애가 나면 테스트를 원활하게 수행할 수 없고, 내부 DB 더라도 상황에 맞게 데이터를 구성하는 것이 항상 가능한 것은 아니다.
외부 요인은 테스트 결과도 예측할 수 없게 만든다.
테스트 대상에서 의존하는 요인 때문에 테스트가 어려울 때는 대역을 써서 테스트를 진행할 수 있다.
Double double은 대역에 해당한다. test double 이란, 테스트에서 진짜 대신 사용할 대역을 의미한다. 대의 종류에는 스텁, 가짜, 스파이, 모의 객체가 존재하며, 각 종류마다 쓰임새가 다르다.
대역을 이용한 테스트
은 완전한 코드가 안 나와있어서 추후 해보기로 하고
대역을 사용한 외부 상황 흉내와 결과 검증
외부의 상황을 흉내내고, 외부의 결과를 검증할 수 있다.
대역의 종류
스텁 (Stub) | 구현을 단순한 것으로 대체 |
가짜 (Fake) | 제품에는 적합하지 않지만, 실제 동작하는 구현을 제공 |
스파이 (Spy) | 호출된 내역을 기록 기록한 내용은 테스트 결과를 검증할 때 사용 스텁 이기도 하다 |
모의 (Mock) | 기대한 대로 상호작용하는지 행위를 검증 기대한 대로 동작하지 않으면 익셉션 발생 가능 스텁이자 스파이도 된다 |
'TIL ✍️' 카테고리의 다른 글
23년 10월 28일(토요일) - 20번째 TIL (0) | 2023.10.28 |
---|---|
23년 10월 27일(금요일) - 19번째 TIL (0) | 2023.10.27 |
23년 10월 25일(수요일) - 17번째 TIL (1) | 2023.10.25 |
23년 10월 24일(화요일) - 16번째 TIL (1) | 2023.10.24 |
23년 10월 23일(월요일) - 15번째 TIL (2) | 2023.10.23 |