자동차 경주에 대한 라이브 피드백 시간인데
느낀점이 있어서 포스팅하게 되었다.
우리는 항상 getter, setter 메소드를 많이 써왔다.
그래서 나도 습관처럼 객체를 생성하고 비교를 할 경우에 아래와 같이 코드를 작성했었다.
@Test
void create() {
Position actual = new Position(5);
assertThat(actual.getPosition).isEqualTo(5);
}
이런식으로 get 메소드를 사용해서 값을 비교를 했는데
이 방식은 잘못되었다기 보다는 get을 사용하지 않고
객체와 객체를 비교하는 방법을 사용하는 것이 오히려 객체지향적 측면에서 좋을 것 같다.
그렇게 Position 클래스에 equals()
와 hashCode()
를 오버라이드 해주고 객체끼리 비교하게끔 만들어준다.
public class Position {
private Position position = new Position(0);
public Position(int position) {
if (position < 0) {
throw new IllegalArgumentException("음수는 위치 값이 될 수 없음");
}
this.position = position;
}
}
@Test
void create() {
Position actual = new Position(5);
assertThat(actual).isEqualTo(new Position(5));
}
이렇게 객체 두개가 같은지를 구현하면 테스트가 성공하게 된다.
이런식으로 어떤 객체를 생성했을때 객체끼리 비교하는 습관을 들이도록 해보자.
문자열과 원자값을 포장해서 쓰는게 객체지향에서 하기 굉장히 좋은 것이니까 지금부터라도 습관 들이자~😄
이제서야 이펙티브 자바 1장이 이해가 되는것 같다. 경험해봐야 이해가 잘되는 이 기분이 좋다.
필드변수를 하나만 두고 사용하는 클래스이다.
일급 콜렉션을 사용하면 계속해서 객체에게 메세지를 보내서 get메소드 대신 객체에게 위임해서 데이터를 조작하게끔 만들어야 한다.
하나씩 객체들을 포장해서 관리하면 테스트 로직을 짜기에 되게 수월하게 작성할 수 있다.
객체에 메시지를 보내라 = 객체가 하게 만들어라 = 객체에게 위임해라
클래스 역할은 작게할수록, 그리고 클래스를 잘게 쪼갠다면? TDD는 쉬워진다
항상 이것들을 생각하면서 코드를 작성하도록 하자 👍텍스트