enum 클래스명 {
상수, 상수, 상수 ..
}
생성자 함수가 존재하지만 private 로 설정되어서 객체 생성이 불가능하다.
생성자를 통해 상수에 값 부여는 가능
public enum Transporatation {
BUS(1400),
SUBWAY(1300),
TAXI(4500);
Transporatation(int fare) {
}
}
public int getFare() {
return fare;
}
상수간의 비교 ===
3. 모든 열거형의 상위 클래스 - java.lang.Enum
enum Transport {
}
abstract class Transportaion extends java.lang.Enum {
public static final BUS = new Transportation();
public static final SUBWAY = new Transportation();}
public static final TAXI = new Transportation();
}
1) Enum 클래스에 정의된 메서드
-> String name() : Enum 상수 이름을 문자열로 변환
(String toString() 동일)
int ordinal() : 상수의 위치 번호
static valueOf : 변환 메서드
2) 컴파일러가 자동으로 추가해주는 메서드
-> valueOf(String str) : 호출 객체가 Enum 상수이므로 Class 객체는 필요X
values() : 정의된 상수 목록(enum)을 배열로 반환
public enum Transporatation {
BUS(1350) {
public int getTotal(int person) {
return getFare() * person;
}
},
SUBWAY(1450) {
public int getTotal(int person) {
return getFare() * person;
}
},
TAXI(4800) {
public int getTotal(int person) {
return getFare() * person;
}
};
private final int fare;
Transporatation(int fare) {
this.fare = fare;
}
public int getFare() {
return fare;
}
public abstract int getTotal(int person);
}
정보를 전달하기 위해 목적이 정해진 클래스의 일종
@interface 애노테이션명 {
}
컴파일러가 자동변환
interface 애노테이션명 extends java.lang.annotation.Annotation{
}
표준 애너테이션
-JDK에 이미 정의된 애노테이션
@Override : 재정의된 메서드임을 알려주는 목적
@Deprecated : 향후 제거될 가능성이 있는 메서드임을 알려주는 목적
메타 애너테이션
-애노테이션을 정의할때 필요한 애노테이션
-@Target : 애노테이션 적용 범위 설정
ElementType : 적용 범위 enum 상수
METHOD : 메서드 위에 적용
FIELD : 멤버 변수
CONSTRUCTOR : 생성자
PARAMETER : 매개변수
-@Retention : 정보 전달 시점
RetensionPolicy
SOURCE : 애노테이션이 java 파일 상에 유지, 컴파일 완료 후(class 파일)에는 제거
- 컴파일러가 필요한 정보를 제공
- 컴파일러가 필요한 정보
CLASS : 기본값
: 애노테이션이 java 파일 상에 유지, 컴파일 완료 후 유지
- 정보 전달 X
- 기본값임에도 사용 X
RUNTIME
: 애노테이션이 java 파일 상에 유지, 컴파일 완료 후 (class 파일) 유지
- 정보전달이 실행 중에 제공
단순 정보 전달 목록(설정 X) : 마커 애노테이션 -@Override
@Target({ElementType.TYPE, ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnno {
}
애노테이션에서 추가 정보 전달
-추상 메서드 정의