레넌의 개발 일기
모든 원시 값과 문자열을 포장하라 본문
'모든 원시 값과 문자열을 포장한다' 라는 말은 객체지향 체조 생활 원칙에서 나온 말이다.
원시값 포장이란?
int money = 5000;
Moeny money = new Money(5000);
첫번째줄에서는 원시 타입의 변수를 선언하였고,
두번째 줄에서는 원시타입의 변수를 객체로 포장하여 선언하였다.
원시값 포장이란 원시 타입을 이용해 의미를 나타내지 않고, 의미있는 객체로 포장한다는 개념이다.
자신의 상태를 객체 스스로 관리한다
public class User {
private final int money;
public User(final int moeny) {
this.money = money;
}
}
User라는 클래스에서 보유하고 있는 돈을 원시 타입인 int형으로 필드로 둬보자.
그렇다면, money에 관한 유효성 검사를 User클래스에서 진행하게 된다.
필드가 age, name 등등 더 늘어나게 되면 모든 값에 대한 관리를 User 클래스에서 해주어야한다.
public class User {
private final Money money;
public User(final Money money) {
this.money = money;
}
}
public class Money {
private final int money;
public Money(final int money) {
validateMoney(money);
this.money = money;
}
private void validateMoney(final int money) {
if (money < 0) {
throw new IllegalArgumentException("[ERROR] 유효한 금액이 아닙니다.");
}
}
}
하지만 위와 같이 money를 포장하여 처리하면 money의 상태를 User가 아닌 스스로 관리할 수 있게 된다.
유효성 검사 뿐만 아니라, 동등성 검사, 불변 등을 객체 내부에서 관리할 수 있다.
따라서 도메인을 사용하는 곳에서 믿고 사용할 수 있을 것이다.
이는 코드의 유지보수에도 도움이 된다.
'자바' 카테고리의 다른 글
생성자 대신 정적 팩터리 메서드를 고려하라 (0) | 2022.03.20 |
---|---|
Arrays.asList() 와 List.of() 의 차이 (0) | 2022.03.07 |
String, StringBuilder, StringBuffer (0) | 2022.02.28 |
MVC 패턴이란? (0) | 2022.02.18 |