🛹 목표
목표 | 난이도 | 달성 여부 |
토비 스프링 | 🥺 | ✔️ |
이펙티브 자바 ITEM 10, 11 - equals는 일반 규약을 지켜 재정의하라 - equals를 재정의하려거든 hashcode도 재정의하라 |
🥺 | ✔️ |
패스트 캠퍼스 강의 듣기 | 😘 | ✔️ |
알골리즘 문제풀이 | 🥺 | ✔️ |
📋 공부 내용 & 기록
1. 자바 equals메서드의 구현 방법
- == 연산자를 사용해 입력이 자기 자신의 참조인지 확인한다.
- instanceof 연산자로 입력이 올바른 타입인지 확인
- 입력을 올바른 타입으로 형변환
- 입력 객체와 자기 자신의 대응되는 `핵심` 필드들이 모두 일치하는지 하나씩 검사
@Override
public boolean equals(Object o) {
if (o == this)
return true;
if (!(o instanceof PhoneNumber))
return false;
PhoneNumber pn = (PhoneNumber) o;
return pn.lineNum == lineNum && pn.prefix == prefix && pn.areaCode == areaCode;
}
그 외 주의사항
- float와 double을 제외한 기본 타입 필드는 == 연산자로 비교하고, 참조타입 필드는 각각의 equals 메서드로, float와 double은 각각 Float.compare(float, float), Double.compare(double, double)로 비교한다.
- equals를 구현했다면 대칭적인지, 추이성이 있는지, 일관적인지 생각해보자.
- 대칭성 : null이 아닌 모든 참조 값 x, y에 대해 x.equals(y)가 true이면, y.equals(x)도 true다.
- 추이성 : null이 아닌 모든 참조 값 x, y, z에 대해 x.equals(y)가 true이고 y.eqauls(z)가 true면 x.equals(z)도 true다.
- 일관성 : null이 아닌 모든 참조 값 x, y에 대해 x.equals(y)를 반복해서 호출하면 항상 true를 반환하거나, 항상 false를 반환한다.
- equals를 재정의할 땐 hashcode도 반드시 재정의하자
2. Mockito VS BDD Mockito
Mockito
- Mockito는 의존성을 가지는 객체들을 가짜 객체로 만들어 테스트하는데 도움을 준다.
- Mock 객체에 원하는 동작을 미리 정하고 이를 기반으로 테스트 함
- when 메서드를 통해 원하는 동작을 미리 정하고 이를 기반으로 테스트한다.
- verify 메서드는 특정 메서드의 호출이 잘 이루어졌는지 확인할 수 있다.
BDDMockito
- BDDMockito는 Mockito를 상속한 클래스로 Mockito와 동작이 차이 없다.
- BDD는 시나리오를 기반으로 테스트하는 패턴으로 Given, When, Then 구조로 테스트를 설계한다.
- 테스트 대상이 A상태에서 출발하며(Given) 어떤 상태 변화를 가했을 때(When), 기대하는 상태로 완료되어야 한다(Then).
- Mockito에서 Given에 해당하는 상황에 when 메서드를 사용하다보니 가독성이 좋지 않아 시나리오에 맞게 테스트를 이해할 수 있도록 given 메서드를 포함하는 BDDMockito가 등장하게 되었다.
- Mockito.when → BDDMockito.given
- Mockito.verify → BDDMockito.then
3. @RestClientTest
- 외부 API를 사용할 때 대상 API를 Mocking 할 수 있도록 지원한다.
- 요청 받는 쪽을 위한 테스트가 아닌, 요청하는 쪽 입장에서의 테스트
- @SpringBootTest와 달리 최소한의 Cotext만 사용해서 테스트를 진행
- RestTemplate은 Mocking이 되지 않는다. 따라서 테스트 대상 Bean은 RestTemplateBuilder를 사용해야 한다.
API 연동에서 신경쓸 부분
- API Request 스펙에 맞는 URL로 request 되는가
- API Request 스펙에 맞는 body가 구성되었는가
- API Response 스펙에 맞는 연동 로직이 구성되었는가
4. 기본형 매개변수와 참조형 매개변수
자바에서 메서드를 호출할 때 매개변수로 설정한 값을 메서드의 매개변수에 복사하여 넘겨준다.
- 매개변수 타입이 기본형일 때는 기본형 값이 복사, 참조형이면 인스턴스의 주소가 복사
- 배열도 객체와 같이 주소갑을 가지고 있어 객체처럼 매개변수를 통해 값을 변경할 수 있다.
'TIL' 카테고리의 다른 글
[TIL] 🌱 2023.04.01 - Projection (0) | 2023.04.01 |
---|---|
[TIL] 🌱 2023.03.31 - Mock? MockBean? (0) | 2023.03.31 |
[TIL] 🌱 2023.03.21 - 함수적 인터페이스 (0) | 2023.03.21 |
[TIL] 🌱 2023.03.20 - Objects.requireNonNull() (0) | 2023.03.20 |
[TIL] 🌱 2023.03.16 - 빌더 패턴 (0) | 2023.03.16 |