문자열과 타입 안정성

SungMin·2026년 5월 28일

자바 심화 정리

목록 보기
16/34

자바가 제공하는 열거형(Enum)에 관해 알기 위해서 먼저 그 배경을 알아야한다.

package enumeration;

public class DiscountService {
    public int discount(String grade, int price) {
        int discountPercent = 0;

        if (grade.equals("basic")) {
            discountPercent = 10;
        } else if (grade.equals("gold")) {
            discountPercent = 20;
        } else if (grade.equals("diamond")) {
            discountPercent = 30;
        } else {
            System.out.println(grade + ": 할인X");
        }

        return price * discountPercent / 100;
    }
}

등급에 따라 할인을 해주는 로직이 있다고 해보자.

package enumeration;

public class StringGrade_Ex0_2 {
    public static void main(String[] args) {
        int price = 10000;

        DiscountService discountService = new DiscountService();

        // 존재하지 않는 등급
        int vip = discountService.discount("vip", price);
        System.out.println(vip);

        // 오타
        int diamond = discountService.discount("DIAMOND", price);
        System.out.println(vip);

        // 대문자 입력
        int gold = discountService.discount("GOLD", price);
        System.out.println(gold);
    }
}

다만, 현재 실행 클래스의 문자열은 제대로 입력 되지 않았다.
단순히 문자열을 입력하는 방식은 오타가 발생하기 쉽고, 유효하지 않은 값을 입력할 수 있다.


등급에 따른 문자열을 사용하는 방식은 이러한 문제점이 있다.

  • 타입 안정성 부족: 오타가 발생하기 쉽고, 유효하지 않은 값을 입력할 수 있다.
  • 데이터 일관성 부족: "vip", "DIAMOND", "GOLD" 등 다양한 방식으로 입력할 수 있어 일관성이 떨어진다.

String 타입 안정성 부족 문제

  • 값의 제한 부족: String타입으로 카테고리를 표현하면 잘못된 문자열을 실수로 입력할 수 있다.
  • 컴파일시 오류 확인 불가: 이러한 잘못된 값은 컴파일 단계에서 확인이 되지 않고, 런타임에만 문제를 확인할 수 있다.

이러한 문제를 해결하기 위해서는 특정 범위로 값을 제한해야 한다.
하지만 String은 어떤 문자열도 받을 수 있기 때문에 자바 문법 관점에서는 문제가 없다.
결국 String 타입을 이용해서는 해당 문제를 해결할 수 없다.

profile
오늘도 한 걸음씩 나아가

0개의 댓글