우테코 프리코스 4주차

4주차 - Enum 추가

  • 하나의 함수는 하나의 기능을 반드시 지키자!
    • 이를 위해 15라인 이내로 함수 작성을 하려고 노력하자 “공백포함”
  • 변수 이름에 자료형은 사용하지 말자
  • 값을 하드코딩 하지 말자 - static final 같이 상수를 권장
  • else 를 사용하지 말고 해결해 보자
  • Java Enum 을 적용해보자
    • static final 상수를 나열하는 경우 사용!!
  • 도메인 로직에 단위 테스트를 진행하자
  • 테스트를 위한 코드는 구현 코드에서 분리!
    • “테스트를 위해 접근 제어자를 바꾸는 경우, 테스트 코드에서만 사용되는 메서드” 는 구현 코드에 작성하면 안 됨!
  • 메서드 시그니처를 수정하여 테스트하기 좋은 메서드로 만들기
  • private 함수를 테스트하고 싶다면 클래스(객체) 분리를 고려
    • 가독성의 이유만으로 분리한 private 함수의 경우 public으로도 검증 가능하다고 여겨질 수 있다. public 함수가 private 함수를 사용하고 있기 때문에 자연스럽게 테스트 범위에 포함된다. 하지만 가독성 이상의 역할을 하는 경우, 테스트하기 쉽게 구현하기 위해서는 해당 역할을 수행하는 다른 객체를 만들 타이밍이 아닐지 고민해 볼 수 있다. 다음 단계를 진행할 때에는 너무 많은 역할을 하고 있는 함수나 객체를 어떻게 의미 있는 단위로 분할할지에 초점을 맞춰 진행한다.
  • 컨벤션 잘 지키자
    • 깃커밋 컨벤션
    • 자바 컨벤션



해결과정

기능 목록 작성 후 규칙에 맞춰서 구현


1~3주차와 특별히 다른것은 없어서 Enum 부분만 정리

Enum도 객체로 생각하면 되고, “연관된 상수들에 주로 사용”


예시 코드

// enum 도 객체!
public enum Menu {
    양송이수프(6000, "애피타이저"), 타파스(5500, "애피타이저"), 시저샐러드(8000, "애피타이저"),
    티본스테이크(55000, "메인"), 바비큐립(54000, "메인"), 해산물파스타(35000, "메인"), 크리스마스파스타(25000, "메인"),
    초코케이크(15000, "디저트"), 아이스크림(5000, "디저트"),
    제로콜라(3000, "음료"), 레드와인(60000, "음료"), 샴페인(25000, "음료");
    private final int price;
    private final String type;
    Menu(int price, String type) {
        this.price = price;
        this.type = type;
    }

    public int getPrice() {
        return this.price;
    }
    public String getType() {
        return this.type;
    }
}

public enum Direction { EAST, SOUTH, WEST, NORTH } // 값 0, 1, 2, 3 가짐


출력 테스트

System.out.println(Menu.valueOf("샴페인")); // 샴페인
System.out.println(Menu.샴페인); // 샴페인
System.out.println(Menu.샴페인.getType()); // 음료
System.out.println(Menu.샴페인.getPrice()); // 25000
System.out.println(Menu.샴페인.name()); // 샴페인
System.out.println(Menu.샴페인.ordinal()); // 11 -> 11번째 순서의미
for(Direction dir : Direction.values()) { // 배열로 반환하는 메소드
    System.out.println(dir.compareTo(Direction.WEST)); // -2 -1 0 1
}


기본 제공 메소드

  • Menu.샴페인 처럼 바로 해당 Enum 객체에 접근도 가능하며,

  • Enum에서 제공하는 valueOf 메소드를 통해서 “String” 으로도 접근 가능

  • name() : 이름반환

  • ordinal() : 순서 반환

  • values() : 배열로 Enum 객체 전부 반환


-2 -1 0 1 의 의미는?

  • compareTo 특징과 Enum 특징 때문
    • public enum Direction { EAST, SOUTH, WEST, NORTH } // 값 0, 1, 2, 3 가짐
    • compareTo 는 두 값을 뺀 결과가 나옴
      • 음수면 “왼쪽”
      • 양수면 “오른쪽”
      • 0이면 “동일”
  • 계산 과정
    • 0 - 2 = -2
    • 1 - 2 = -1
    • 2 - 2 = 0
    • 3 - 2 = 1



마무리

아.. 날짜 체크 실수해서 git collaborator 기한안에 등록을 못 했다.

다들 날짜 체크 잘하길… ㅠㅠㅠ

댓글남기기