[객체지향 생활체조 원칙] 규칙 3. 모든 원시 값과 문자열을 포장한다.
본문 바로가기
OOP

[객체지향 생활체조 원칙] 규칙 3. 모든 원시 값과 문자열을 포장한다.

by IYK2h 2022. 11. 7.
728x90

모든 원시 값과 문자열을 포장한다.

byte, int, long, String, char 과 같은 원시 타입, 문자열 변수를 객체로 포장해 사용하라.

포장한 객체로라면 아주 사소하더라도 컴파일러와 개발자에게 해당 값이 어떤 값이며 왜 쓰는지에 대해 정보를 전달할 수 있다.

이에 따라 단순히 값을 나타내는 것뿐 아니라, 비즈니스적인 의미를 함께 표현해준다.

public class SingUp {
​
    private static final int MIN_AGE = 19;
​
    public void checkUserAge(int age) {
​
        if (age < MIN_AGE) {
            throw new IllegalArgumentException("가입 가능 나이는 " + MIN_AGE + " 살 이상이어야 합니다.");
        }
      // 추가 검증 ...
    }
}

만약 나이에 대한 검증을 다른 클래스에서 사용해야 한다면 같은 로직을 구현해야 한다.

public class UserAge (
    private static final int MIN_AGE = 19;
​
    private int age;
  
    public void UserAge(int age) {
        if (age < MIN_AGE) {
            throw new IllegalArgumentException("가입 가능 나이는 " + MIN_AGE + " 살 이상이어야 합니다.");
        }
        this.age = age;
    }
)
​
public class SingUp {
    public void checkSingUp(UserAge userage) {
        // 추가 검증 ...
    }
}

기존 int 타입 age 변수를 UserAge 클래스로 포장했다. SingUp 클래스에 의존하는 프로그램은 반드시 UserAge 클래스의 인스턴스를 생성하게 된다. 생성 과정에서 값에 대한 유효성 체크를 하게 된다. 이에 따라 일관된 검증 로직을 관리할 수 있다.

유효성 검증의 기준을 클래스가 직접 가지게 된다. 즉, 상태에 대한 책임을 스스로 지게 된다.

가입 가능 나이가 변경되거나, 나이에 따른 가점이 주어지거나 할 때에도 UserAge 클래스를 수정하면 된다.

추가로 객체 타입일 때 해당 객체의 생성자를 통해 유효성을 확인할 수 있게 된다.

728x90

댓글