인프런 커뮤니티 질문&답변

따뜻한 당나귀님의 프로필 이미지
따뜻한 당나귀

작성한 질문수

김영한의 실전 자바 - 중급 1편

타입 안전 열거형 패턴

섹션 5 - 3(타입 안전 열거형 패턴) if 문대신 개선된 switch 문으로 변경

작성

·

290

·

수정됨

0

package enumeration.ex2;

public class DiscountService {
    public int discount(ClassGrade grade, int price) {
        if (grade == ClassGrade.BASIC) {
            return price / 100 * 10;
        }
        if (grade == ClassGrade.GOLD) {
            return price / 100 * 20;
        }
        if (grade == ClassGrade.DIAMOND) {
            return price / 100 * 30;
        }
        return 0;
    }
}

 

package enumeration.ex2;

public class DiscountServiceTest {
    public int discount(ClassGrade grade, int price) {
        switch (grade) {
            case ClassGrade.BASIC -> {
                return price / 100 * 10;
            }
            case ClassGrade.GOLD -> {
                return price / 100 * 20;
            }
            case ClassGrade.DIAMOND -> {
                return price / 100 * 30;
            }
            default -> {
                return 0;
            }
        }
    }
}

안녕하세요. 위의 코드 같이 if 문으로 사용하면 정상적으로 실행이 가능한데

아래 처럼 if 문을 개선된 switch 문으로 바꾸면 왜 컴파일 오류가 뜨는지 정확히 알고 싶습니다.

case 에는 리터럴 상수만 사용 가능하고

참조값은 case에 적을 수 없는 것 같은데 맞나요?

답변 1

-4

안녕하세요. 따뜻한 당나귀님, 공식 서포터즈 코즈위버입니다.

스위치 문에서 열거형을 사용하기 위해 코드를 다음과 같이 수정해주세요.

switch (grade) {
    case BASIC -> {
        return price / 100 * 10;
    }
    case GOLD -> {
        return price / 100 * 20;
    }
    case DIAMOND -> {
        return price / 100 * 30;
    }
    default -> {
        return 0;
    }
}

감사합니다.

따뜻한 당나귀님의 프로필 이미지
따뜻한 당나귀

작성한 질문수

질문하기