
우아한테크코스 레벨1에서 자동차 경주 미션을 받았다.
이 미션의 목표는 단위테스트이다. 자동차는 이름과 위치를 가진다.
이름과 위치에 대해서 검증을 하다보니 더 분리해서 테스트할 수 있을 것 같았고, 원시 값 포장에 대해서 알 수 있었다. 내가 배운 것을 정리해보려 한다.
원시 값 포장이란 말 그래도 원시 타입을 그대로 사용하지 않고, 객체로 래핑해서 가독성과 유연성, 안전성을 높이는 것을 말한다.
예를 들어, 자동차 이름을 String name 처럼 그대로 사용하지 않고, CarName과 같이 객체로 래핑해서 사용하는 것을 말한다.
class Car {
private final String name;
private final int position;
...
}
class Car {
private final CarName name;
private final Position position;
...
}
class CarName {
private final String name;
...
}
그렇다면 원시 값을 포장하는 이유는 뭘까?
이름과 위치에 대한 검증 코드가 생긴다면 Car에 많은 코드가 생긴다.
CarName과 Position으로 분리하면 각각 역할을 분리해서 Car는 자동차가 할 일만 신경 쓸 수 있다.
class Position implements Comparable<Position> {
@Override ...
}
Position을 통해서 값을 비교할 수 있게 해서 유연성을 확보할 수 있고, 원시 타입을 그대로 쓰는 것이 아닌 객체로 래핑해서 코드를 추상화할 수 있다.
테스트의 경우에도, Car에서 이름과 위치에 대한 테스트를 하지 않고 Car의 역할만 테스트할 수 있어서 가독성이 높아진다.
유연성, 추상화, 안전성을 위해서 원시 값 포장을 이용하자.