일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- order by
- 형변환
- html
- 리눅스
- DML
- 정보처리기사
- select
- 알고리즘
- 스프링
- StringBuilder
- scanner
- 프로그래머스 SQL
- 프로그래밍
- 정보처리기사필기요약
- 웹개발
- SQL
- 클래스
- where
- github
- mybatis
- 백준
- 자바스크립트
- String클래스
- 개발자
- 프로그래머스 sql 고득점 kit
- Linux
- 예외처리
- 자바
- 백엔드
- MySQL
- 프론트엔드
- 메서드
- Git
- select문
- 입출력
- Java
- 데이터 조회
- BufferedReader
- JavaScript
- sql문
- Today
- Total
ToBe끝판왕
[ JAVA ] 열거형 ( ENUM ) 본문
열거형 - ENUM
• 관련된 상수들의 집합을 정의하는데 사용되는 특수한 데이터 타입
• 의미가 명확한 상수 집합을 만들 수 있고, 코드의 가독성 및 유지보수성을 높일 수 있다.
※ String ( 문자열 ) 사용시 문제점
• 타입 안정성 부족
- 문자열은 오타가 발생하기 쉽다.
- 유효하지 않은 값이 입력될 수 있다.
- 컴파일 시 오류감지가 불가하고 런타임에서만 발견되므로 디버깅이 힘들다.
• 데이터 일관성
- 다양한 형식으로 데이터를 입력할 수 있어 일관성이 떨어진다.
타입 안전 열거형 패턴 ( Type - Safe Enum Pattern )
• 타입 안전 열거형 패턴을 사용하면, 나열한 항목만 사용이 가능하다.
• 타입 안전성 향상 : 정해진 객체만 사용이 가능하여 잘못된 값이 입력되는 문제를 근본적으로 해결
• 데이터 일관성 : 정해진 객체만 사용하므로 데이터의 일관성 보장
• 타입 안전 열거형 패턴을 편리하게 사용할 수 있는 열거형( Enum Type ) 을 제공
- 열거형을 정의할 때, class 대신 enum 을 사용
- 원하는 상수의 이름을 나열
- 열거형을 사용하는 경우 static import 를 적절하게 사용하면 더 읽기 좋은 코드를 만들 수 있다
• 열거형 예시
- 열거형도 클래스이다.
- 열거형은 자동으로 java.lang.Enum을 상속받는다. ( 추가로 다른 클래스 상속 불가 )
- 열거형은 인터페이스를 구현 가능하다.
- 외부에서 임의로 생성 X
package enumeration.ex3;
public enum Grade {
BASIC, GOLD, DIAMOND;
}
// 위 열거형은 아래의 코드와 의미가 같다.
public class Grade extends Enum {
public static final Grade BASIC = new Grade();
public static final Grade GOLD = new Grade();
public static final Grade DIAMOND = new Grade();
// private 생성자
private Grade() {}
}
package enumeration.ex3;
public class DiscountService {
public int discount(Grade classGrade, int price) {
int discountPercent = 0;
if( classGrade == Grade.BASIC) {
discountPercent = 10;
} else if( classGrade == Grade.GOLD ) {
discountPercent = 20;
} else if( classGrade == Grade.DIAMOND ) {
discountPercent = 30;
} else {
System.out.println("할인 X");
}
// 할인금액을 return 해준다
return price * discountPercent / 100;
}
}
package enumeration.ex3;
public class ClassGradeEx3_1 {
public static void main(String[] args) {
int price = 10000;
DiscountService discountService = new DiscountService();
int basic = discountService.discount(Grade.BASIC, price);
int gold = discountService.discount(Grade.GOLD, price);
int diamond = discountService.discount(Grade.DIAMOND, price);
System.out.println("BASIC 등급의 할인 금액: " + basic);
System.out.println("GOLD 등급의 할인 금액: " + gold);
System.out.println("DIAMOND 등급의 할인 금액: " + diamond);
}
}
// 실행 결과
BASIC 등급의 할인 금액: 1000
GOLD 등급의 할인 금액: 2000
DIAMOND 등급의 할인 금액: 3000
• 열거형은 외부에서 생성 불가
package enumeration.ex3;
public class ClassGradeEx3_2 {
public static void main(String[] args) {
int price = 10000;
DiscountService discountService = new DiscountService();
/* Grade grade = new Grade(); // enum은 인스턴스 생성 불가
int result = discountService.discount(newClassGrade, price);
System.out.println("newClassGrade 등급의 할인 금액: " + result);
*/
}
}
• 열거형 주요 메서드
- java.lang.Enum 클래스를 자동 상속받기 때문에 해당 클래스가 제공하는 메서드를 사용 가능
- values() : 모든 ENUM 상수를 포함하는 배열을 반환
- valueOf(String name) : 주어진 이름과 일치하는 ENUM 상수를 반환
- name() : ENUM 상수 이름을 문자열로 반환
- ordinal() : ENUM 상수의 선언 순서( 0부터 시작) 을 반환
package enumeration.ex3;
import java.util.Arrays;
public class EnumMain {
public static void main(String[] args) {
// 모든 ENUM 반환
Grade[] values = Grade.values();
System.out.println("values = " + Arrays.toString(values));
for (Grade value : values) {
System.out.println("name = " + value.name() + ", ordinal = " + value.ordinal());
}
// String --> ENUM 변환, 잘못된 문자면 IllegalArgumentException 발생
String input = "GOLD";
Grade gold = Grade.valueOf(input);
System.out.println("gold = " + gold);
}
}
※ 해당 내용은 인프런 김영한 강사님의 "실전 자바 중급1" 인강의 참고자료와 예시들을 참고하였습니다
'■ 프로그래밍 SKILLS > JAVA' 카테고리의 다른 글
[ JAVA ] 예외 처리 (2) (0) | 2024.08.21 |
---|---|
[ JAVA ] 예외 처리 (1) (0) | 2024.08.21 |
[ JAVA ] 래퍼 클래스 ( Wrapper Class ) (0) | 2024.08.20 |
[ JAVA ] String 클래스 (2) (0) | 2024.08.19 |
[ JAVA ] String 클래스 (1) (0) | 2024.08.13 |