forked from woowacourse/java-vendingmachine-precourse
일급 객체와 일급 컬렉션
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;
}
이번 미션으로 예를 들면, 아래와 같은 로직에 대해서만 관리가 필요할 때,
상태와 로직을 따로 관리
할 수 있다. 로직이 변경되어도 상태에는 영향이 없다.
- 음료들 중 최솟값을 구하는 로직
- 음료들 중 판매할 수 있는 재고가 있는지?
- 자판기 음료들 중 구매하고 싶은 음료가 있는지?
클래스 별 책임을 나누는데 원시값 포장이 큰 도움이 되었다.
유지보수 하기 좋은 코드를 위해서는 어떤 클래스에서, 어떤 일을 하는지
파악하기 좋아야한다고 생각한다.
원시값 포장을 통해 책임 분리를 명확하게 하고,
상태와 행위 관리를 한 곳에서 하게 됨을 알게 되니
조금이나마 객체지향에 가까워지는 것 같다.