Skip to content

일급 객체와 일급 컬렉션

her0807 edited this page Dec 14, 2021 · 1 revision

원시 타입 포장🎁

다른 참가자의 코드를 보다가 필드값이 하나인데, 클래스로 만든 것을 보게 되었다.

값이 하나인데 이걸 클래스로? 기회 비용이 많이 드는 것 같은데 굳이 이렇게 하는 이유가 뭘까?

상태상태 변경을 한 곳에서

어떤 기계가 있는데 그 기계가 돈을 투입하면 제품을 준다고 하자.

필드 값을 다 내놓으면 머신 클래스에서 기계가 가진 돈에 관한 상태 변경도 해야하고,

제품 수량에 관한 상태 변경도 해야 한다.

class Machine{

int machineMoney = 0; 
int userMoney = 0; 
int product = 0; 

'''

원시 값 포장

상태 각각을 클래스로 묶어서 만들면, 해당 상태와 상태를 관리하는 로직을

한 클래스에서 관리 할 수 있게 된다.

class Money{

int amount = 0; 

public void decAmount(){
    amount--;
}

'''

이렇게 된다면 유지 보수에 효과적이지 않은가?

일급 컬렉션

원시 값(일급 객체)을 컬렉션으로 가지고 있으며, 그 외 다른 멤버 변수가 없는 상태를 의미한다.

public class Drinks {
    private final List<Drink> drinkInventory;

}

사용 이유

이번 미션으로 예를 들면, 아래와 같은 로직에 대해서만 관리가 필요할 때,

상태와 로직을 따로 관리할 수 있다. 로직이 변경되어도 상태에는 영향이 없다.

  • 음료들 중 최솟값을 구하는 로직
  • 음료들 중 판매할 수 있는 재고가 있는지?
  • 자판기 음료들 중 구매하고 싶은 음료가 있는지?

느낀점

클래스 별 책임을 나누는데 원시값 포장이 큰 도움이 되었다.

유지보수 하기 좋은 코드를 위해서는 어떤 클래스에서, 어떤 일을 하는지

파악하기 좋아야한다고 생각한다. 

원시값 포장을 통해 책임 분리를 명확하게 하고,

상태와 행위 관리를 한 곳에서 하게 됨을 알게 되니

조금이나마 객체지향에 가까워지는 것 같다. 

참고