티스토리 뷰
반응형
public class Study {
public static void main(String[] args) {
for(Animals animal : Animals.values()) {
animal.greeting();
animal.move();
}
}
}
enum Animals {
HUMAN(1.11) {
@Override public void move() {
System.out.println("move with human");
}
},
BIRD(1, "Birdie"){
@Override public void move() {
System.out.println("fly with bird");
}
},
DOG(2, "Doggo"){
@Override public void move() {
System.out.println("move with dog");
}
},
CAT(3, "Catch"){
@Override public void move() {
System.out.println("move with cat");
}
};
private final int age;
private final String name;
Animals(double height) {
this.age = 10;
this.name = "Human";
System.out.println("human height: " + height);
}
Animals(int age, String name) {
this.age = age;
this.name = name;
System.out.println(this.name + " created with age: " + this.age);
}
void greeting() {
System.out.println("Hello, my name is " + this.name + " and I'm " + this.age + " years old!");
}
abstract void move();
}
- enum은 열거 패턴을 지원하기 위한 특수한 유형의 클래스이다.
- enum은 클래스이므로 필드와 메소드, 생성자를 가질 수 있다.
- enum의 각 값은 대응되는 하나의 인스턴스로 생성되어 public static final 필드로 공개된다.
- 이 때, enum에서 생성되는 각 인스턴스는 대응되는 형식의 생성자를 통해 생성된다.
- 상술한 예시에서, HUMAN과 다른 값들은 괄호 안의 매개변수를 대응되는 형식의 생성자에 전달한다.
- 생성된 인스턴스들은 enum의 형태를 따르므로, 상술한 예시에서는 값 별 인스턴스마다 age, name, greeting 멤버를 갖는다.
- enum의 각 값에 대응되는 인스턴스는 enum이 최초로 사용되는 시점에 모두 생성된다.
- 이는 enum의 인스턴스를 표현하는 필드가 static이기 때문으로, 최초 호출 시점에 메모리에 모든 static 필드가 로드된다.
- enum에 정의된 메소드가 각 값마다 다르게 동작하도록 하고 싶은 경우, enum에 추상 메소드를 정의하고 각 값에서 이를 재정의한다.
'Dev. > java' 카테고리의 다른 글
[RestTemplate] org/apache/hc/client5/http/classic/HttpClient에 대한 NoClassDefFoundError (0) | 2023.11.08 |
---|---|
[Java] Objects.requireNonNull이란 (0) | 2022.03.09 |
[Java] 공변 반환 타입(covariant return type) (0) | 2022.02.28 |
[JVM] 메모리 구조(짧) (0) | 2022.01.19 |
[Java] method signature (메소드 시그니쳐) (0) | 2021.12.28 |
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- pgloader
- javascript
- Linux
- Database
- Vault
- Docker
- JEST
- hashicorp
- Node.js
- postgresql
- dev
- Puppeteer
- kotlin
- Git
- jQuery
- Gradle
- AWS
- JPA
- react
- terraform
- shell
- spring boot
- Spring Cloud Config
- etc
- IntelliJ
- Java
- AWS IoT
- eureka
- mysql
- 코딩테스트
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함