✏️ 과제2 키오스크 과제 해설 세션 & 수준별 학습 Day2
구현 방법은 여러 가지이고, 사람마다 코딩스타일과 방식이 있다. 하지만, 커다란 방향성은 같아야한다.
1. List.of()로 선언 및 초기화
List<menuItem> list = new ArrayList<>(List.of());
2. 예외로직은 소스에서 분리하여 코드 가독성 ↑
3. 생성자를 통해 필드를 정의할 때, 통째로 필드를 받아서 정의하자
new ArrayList<>() 를 생성한 후 해당 객체를 대입 // menuItems 에 MenuItem 값 할당
public void setMenuItems(MenuItem... menuItem) {
this.menuItems.addAll(Arrays.asList(menuItem));
}
// 클래스 생성자를 통해 값을 할당
public Menu(String categoryName, List<MenuItem> menuItems) {
this.categoryName = categoryName;
this.menuItems = menuItems;
}
🔧 [이펙티브 자바] 가변인수는 신중히 사용하라
성능에 민감한 상황이라면 가변인수가 걸림돌이 될 수도 있다. 가변인수 메서드는 호출될 때마다 배열을 새로 하나 할당하고 초기화한다.
가변인수
- 장점: 유연성, 가독성
- 단점: 오버로드의 모호성, 성능, 타입 안정성
→ 다른 방법이 있을 때 가변인수를 사용하는 것은 굳이 위험성을 감수하는 행위
4. 객체를 생성하면서 삽입하는 경우, 생성자의 매개변수로 초기화를 동시에 하도록 제약하자
5. double vs BigDecimal ✏️ TIL 작성
6. 낮은 결합도 & 의존성 분리: 데이터 객체와 서비스를 분리하자.
- Data: Kiosk, Menu, Cart
- Service: KioskService, MenuService, CartService
👉 모든 행위는 서비스에서 처리하도록 분리한다.
👉 코드 가독성과 유지보수성을 높일 수 있다.
서비스 ⇔ 데이터 객체는 서로 의존성이 있다.
CartService, MenuService를 만들 때 외부에서 의존성을 주입해준다.
CartService cartService = new CartService(new Cart());
cartService를 사용하는 쪽에서 new Cart()로 의존성 주입한다.
객체(상태, 행동) → “이 객체는 이러한 행동을 한다. 이런 역할이다.” 를 정의
"함수로 대화한다"의 의미는 나와 같은 코드를 볼 동료 개발자에게 어떤 행동을 하는지 명확하게 알려주는 것.
다른 사람이 쉽게 이해하고 가져다 쓸 수 있는 코드
→ 대화의 전달력을 향상시키자.
지난번 과제와 마찬가지로 해설을 듣기 전까지는 계속 안보이다가 해설 세션을 듣고 나니 왜 이렇게 만들었지 싶은 부분이 눈에 보여 코드 리뷰 이후 개선하여 수정 반영이 필요할 것 같다. 👀