728x90
Wrapper Class랑 비슷한 개념이다. 하지만 더 큰 범위를 포함한다.
원시값 포장
원시값 포장은 원시유형의 값을 이용해 의미를 나타내지 않고, 의미 있는 객체로 포장한다는 개념이라고 볼 수 있다.
변수를 선언하는 방법에는 두 가지가 있다.
int Coin = 20;
Coin coin = new coin(20);
포장하는 이유
게임에 사용되는 coin이 있다고 가정하자. coin은 가지고 있을 수 있는 범위가 정해진다거나, 게임을 할때마다 확인한다면. 그때마다 코인의 값이 조건을 만족하는지 확인하려면, 많은 중복된 코드가 작성될 것이다.
Coin Class 로 원시값 coin 을 포장하면 문제를 해결할수있게된다.
public class Coin {
public static final String COIN_TO_GAME = "1";
public static final String COIN_TO_FINISH = "2";
private String coin;
public Coin() {
this.coin = COIN_TO_GAME;
}
public Coin(String coin) {
checkCoin(coin);
this.coin = coin;
}
public String getCoin() {
return this.coin;
}
private void checkCoin(String coin) {
if (!coin.equals(COIN_TO_GAME) && !coin.equals(COIN_TO_FINISH)) throw new IllegalArgumentException();
}
}
위와같이 포장함으로써 coin의 값은 "1", "2" 의 값만 가질 수 있다고 보장된다.
테스트
추가로 포장해서 사용한다면, 테스트하기도 용의하다.
class CoinTest {
@Test
@DisplayName("정상 값")
void checkValue() {
//given
//when
Coin coin = new Coin("1");
//then
assertThat(coin.getCoin()).isEqualTo("1");
coin = new Coin("2");
//then
assertThat(coin.getCoin()).isEqualTo("2");
}
@Test
@DisplayName("잘못된 값")
void checkWrongValue() {
//given
//when
//then
assertThatExceptionOfType(IllegalArgumentException.class)
.isThrownBy(() -> new Users("0"));
assertThatExceptionOfType(IllegalArgumentException.class)
.isThrownBy(() -> new Users("3"));
assertThatExceptionOfType(IllegalArgumentException.class)
.isThrownBy(() -> new Users("-"));
}
728x90
'Java' 카테고리의 다른 글
[Java] 일급 컬렉션(First Class Collection)이란? (0) | 2022.11.22 |
---|---|
[Java]Wrapper Class (0) | 2022.11.11 |
[Java] List, ArrayList 차이 (0) | 2022.08.30 |
[Java] 문자열 합치기 왜 StringBuilder 인가 (0) | 2022.08.16 |
[Java]문자열 자르기 (0) | 2022.08.09 |
댓글