상수만을 위한 클래스
enum 클래스명{
상수, 상수, 상수
}
모든 열거형의 상위 클래스
enum Transport{
BUS,
SUBWAY,
TAXI,
}
abstract class Transportaiton extends java.lang.Enum{
public static final BUS = new Transportaiton(){};
public static final SUBWAY = new Transportaiton(){};
public static final TAXI = new Transportaiton(){};
private Transporation(){}
}String name() : Enum 상수이름을 문자열로 변환
(String toString()동일)
int ordianl() : 상수의 위치번호
package exam01;
public class Ex04 {
public static void main(String[] args) {
Transportation trans = Transportation.BUS;
String str = trans.name(); //trans.toString()
System.out.println(str); //> BUS
int ordianl = trans.ordinal();
System.out.println(ordianl); //> 0번째 출력
}
}
valeOf(String str) : 호출 객체가 Enum상수이므로 Class 객치는 X
(문자열 → 상수, 상수 → 문자열)
데이터베이스는 자바객체를 인식하지 못하기 때문에 상수를 문자열로 변환한다.
values() : 정의된 상수 목록을 배열로 변환
클래스 클래스를 사용안해도된다.
valeOf(String str) public class Ex05 {
public static void main(String[] args) {
String trans1 = "BUS";
Transportation BUS = Transportation.valueOf(trans1);
}
}values() public class Ex06 {
public static void main(String[] args) {
Transportation[] trans = Transportation.values();
System.out.println(Arrays.toString(trans)); //>[BUS, SUBWAY, TAXI]
}
}public enum Transportation {
BUS(1400),
SUBWAY(1300),
TAXI(4500);
private final int fare;
Transportation(int fare){
this.fare = fare;
}
public int getFare(){
return fare;
}
public abstract int getTotal(int person);
}
열거형에 추상 메서드를 선언하면 각 열거형 상수가 이 추상 메서드를 반드시 구현해야 한다.
추상클래스나 인터페이스를 가지고 추상 메서드를 구현함으로써 익명 클래스를 작성하는 것과 유사하다
public enum Transportation {
BUS(1400){},
SUBWAY(1300){},
TAXI(4500){};
private final int fare;
Transportation(int fare){
this.fare = fare;
}
public int getFare(){
return fare;
}
}
정보 전달을 위한 목적이 정해진 클래스의 일종
@interface 애노테이션 명{
}
컴파일러가 자동 변환
interface 애노테이션명 extends java.lang.annotation.Annotation{
}
JDK에 이미 정의된 애노테이션
@Override: 재정의된 메서드임을 알려주는 목적@Deprecated: 향 후 제거될 가능성이 있는 메서드 임을 알려주는 목적
애너테이션을 정의할때 필요한 애너테이션
@Target: 애너테이션 적용 범위
ElementType: 적용범위 enum 상수
METHOD: 메서드 위에 적용FIELD: 멤버 변수CONSTRUCTOR: 생성자PARAMETER: 매개 변수LOCAL_VARIABLE: 지역변수TYPE_PARAMETER: 참조변수TYPE_USE: 참조자료형@Retention: 정보 전달 시점
RetentionPloicy
SOURCE
java 파일 상에 유지, 컴파일러 완료 후(class파일)에는 제거
컴파일러가 필요한 정보를 제공
컴파일러가 필요한 정보CLASS(기본값)
애너테이션이 자바 파일상의 유지가 되고 컴파일 완료 후 유지
정보전달 x
기본값임에도 사용 XRUNTIME
애너테이션이 java 파일 상에 유지, 컴파일 완료 후 (class 파일) 유지
정보전달이 실행 중에 제공
단순 정보 전달 목록(설정 X) (@Override)
package exam03;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target({ElementType.TYPE,ElementType.METHOD,ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnno {
}
package exam03;
@MyAnno
public class Ex01 {
@MyAnno
private String str;
@MyAnno
public void method(){
}
}