본문 바로가기
Programming/Java, Spring

모든 원시값과 문자열을 포장했는가? - 우아한테크코스 우테코 클린코드 #4

by Renechoi 2022. 10. 30.

모든 원시값과 문자열을 포장했는가? - 우아한테크코스 우테코 클린코드 #4

 

이전글에 이어 우아한테크코스에서 요구하는 클린코드 원칙들을 살펴본다. 

 


자바의 원시타입 변수로는 총 8개로 byte, short, int, long, float, double, char, boolean 이 있다. 

 

이와 같은 원시타입, 문자열 변수를 객체로 포장하라는 규칙이다. 

 

원시값을 포장한다는 말은 무엇일까? 

 

원시 유형의 변수를 그대로 사용하지 말고 객체 형태로 사용하라는 뜻으로 해석된다. 즉, 포장을 통해 사용하려는 도메인의 의미를 더욱 구체화하여 표현하자는 의미이다.

 

예를 들어, money를 선언하는 것에 대해 생각해보자. 

 

public class Money{
	private int money; 

	public void countMoney(int money){
    	this.money += money; 
    }
}

 

이와 같은 형식의 문제점은 무엇일까? 

 

과연 money가 int 타입이 맞느냐 하는 문제이다. 범위에서부터 정확성이 떨어진다. int의 범위는 음수까지 허용가능한데, money는 음수가 될 수 없다. 

 

따라서 이와 같이 primitive type을 그대로 사용하기 보다는 의미에 맞게 "포장"을 해야 한다는 뜻이다. 

 

 

public class Money {
   private final int amount;

   public Money(int amount){
      checkValue(amount);
      this.amount = amount;
   }

   private void checkValue(int amount) {
      ...
   }


}

 

이렇게 객체를 한 번 더 다른 의미의 메서드로 감싸주는 것을 wrapping이라고 할 수 있다. 

 

이렇게 하는 것의 장점은 무엇일까? 

 

OOP의 적용이 가능하다는 것으로, 객체 간의 결합도를 떨어트려 서로 메시지를 주고 받으며 역할을 분담할 수 있게 된다. 

 

 

 


 

사실 이 개념을 적용해 리팩토링을 하는 것이 잘 되지 않는다. 

 

객체의 역할을 분담하는 의미에서 아래와 같은 리팩터링이 가능하지 않을까 싶다. 

 

 

 

좀 더 이론적 기초에 대한 공부가 필요할듯 싶다. 

반응형