[TIL] 2025-01-20_키오스크_과제해설

Yuri·2025년 1월 20일

TIL

목록 보기
32/59
post-thumbnail

✏️ 과제2 키오스크 과제 해설 세션 & 수준별 학습 Day2

구현 방법은 여러 가지이고, 사람마다 코딩스타일과 방식이 있다. 하지만, 커다란 방향성은 같아야한다.

과제 해설

1. List.of()로 선언 및 초기화

List<menuItem> list = new ArrayList<>(List.of());

2. 예외로직은 소스에서 분리하여 코드 가독성 ↑

  • 0을 입력받는 경우 프로그램 종료 → 일반적인 케이스와 확실하게 분리

3. 생성자를 통해 필드를 정의할 때, 통째로 필드를 받아서 정의하자

  • menuItems를 정의할 때, 가변인수보다 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()로 의존성 주입한다.

학습 노트

객체(상태, 행동) → “이 객체는 이러한 행동을 한다. 이런 역할이다.” 를 정의
"함수로 대화한다"의 의미는 나와 같은 코드를 볼 동료 개발자에게 어떤 행동을 하는지 명확하게 알려주는 것.

전달력 있는 함수 대화법

  • 무엇을 할지 명확히 표현: 함수명을 명확한 행동 + 목적어로 명명
  • 작은 대화는 더 구체적, 큰 대화는 더 포괄적: 작은 함수를 이끄는 상위 단계 함수에서는 포괄적
  • 하고자 하는 말은 정확하게 표현
  • 어려운 말은 쉽게 표현: 대화를 위한 쉬운 표현을 만들어주기 → 명확하게 메서드로 만드는 것도 방법
  • 확장성을 고려한 표현: 유지보수성, 재활용성
  • 목적어와 함께 표현: 목적과 의도를 명확하게 표현
  • 상황에 맞는 직관적인 단어 선택
  • 보편적으로 이해되는 단어 선택

갖춰야할 대화 자세

  • Stream & Lambda 를 통한 간결한 대화
  • Optional 과 결합한 안정적인 대화
  • 간편한 병렬 대화

정리

다른 사람이 쉽게 이해하고 가져다 쓸 수 있는 코드
→ 대화의 전달력을 향상시키자.


📝 TO-DO

  1. 과제2 코드 개선
  2. 기초 Spring 강의 듣기(1주차~)
  3. 자바 강의

💭 Diary

지난번 과제와 마찬가지로 해설을 듣기 전까지는 계속 안보이다가 해설 세션을 듣고 나니 왜 이렇게 만들었지 싶은 부분이 눈에 보여 코드 리뷰 이후 개선하여 수정 반영이 필요할 것 같다. 👀

profile
안녕하세요 :)

0개의 댓글