[Java] 원시값 포장
본문 바로가기
Java

[Java] 원시값 포장

by IYK2h 2022. 11. 8.
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

댓글