자바 - 열거형 생성자

안녕하세요, 미래의 자바 마법사 여러분! 오늘, 우리는 자바의 열거형과 그 생성자에 대한 흥미로운 여정에 떠날 거예요. 프로그래밍에 새로운 사람이라도 걱정하지 마세요; 저는 여러분을 이 모험을 단계별로 안내해 드리겠습니다. 그럼, 여러분의 가장 좋아하는 음료를 준비하고 편하게 앉아서, 같이 빠져들어봅시다!

Java - Enum Constructor

열거형이란?

열거형 생성자에 대해 이야기하기 전에, 먼저 열거형이란 무엇인지 이해해야 합니다. 열거형(enumeration)은 일종의 특별한 클래스로, 일정한 상수들의 그룹을 나타냅니다. 예를 들어 사전에 정의된 값들의 목록과 같습니다.

게임을 만들고 다양한 난이도 수준이 있다고 생각해 봅시다. 열거형을 사용하여 이 수준을 나타낼 수 있습니다:

public enum DifficultyLevel {
EASY,
MEDIUM,
HARD
}

여기서, EASY, MEDIUM, HARD는 우리의 DifficultyLevel 열거형의 상수(또는 멤버)입니다.

열거형 생성자 이해하기

이제 열거형이 무엇인지 알았으니, 열거형의 생성자에 대해 이야기해 봅시다. 일반 클래스처럼 열거형도 생성자를 가질 수 있습니다! 이 생성자들은 각 열거형 상수에 추가적인 데이터를 연결할 수 있게 해줍니다.

기본 열거형 생성자

우리의 DifficultyLevel 열거형을 각 수준에 설명을 추가하여 개선해 봅시다:

public enum DifficultyLevel {
EASY("초보자용"),
MEDIUM("중급자용"),
HARD("전문가용");

private final String description;

DifficultyLevel(String description) {
this.description = description;
}

public String getDescription() {
return description;
}
}

이 예제에서:

  1. 각 열거형 상수에 String 매개변수를 추가했습니다.
  2. private description 필드를 생성했습니다.
  3. String 매개변수를 받아서 description에 할당하는 생성자를 정의했습니다.
  4. 설명에 접근할 수 있는 getter 메서드를 추가했습니다.

이제 이 열거형을 어떻게 사용할 수 있는지 볼까요?

public class Game {
public static void main(String[] args) {
DifficultyLevel level = DifficultyLevel.MEDIUM;
System.out.println("선택한 난이도: " + level);
System.out.println("설명: " + level.getDescription());
}
}

출력:

선택한 난이도: MEDIUM
설명: 중급자용

멋지지 않나요? 우리는 열거형 상수에 추가적인 정보를 담았습니다!

열거형 생성자 사용

열거형 생성자는 각 열거형 상수에 데이터를 연결하고 싶을 때 매우 유용합니다.以下是一些常见的用例:

  1. 설명 추가: 우리의 DifficultyLevel 예제처럼.
  2. 수치 할당: 정렬이나 계산에 유용합니다.
  3. 다른 객체와 연결: 각 열거형 상수에 다른 클래스의 인스턴스를 연결할 수 있습니다.

다른 예제를 통해 각 열거형 상수에 수치를 할당하는 방법을 살펴보겠습니다:

public enum Planet {
MERCURY(3.303e+23, 2.4397e6),
VENUS(4.869e+24, 6.0518e6),
EARTH(5.976e+24, 6.37814e6);

private final double mass;   // in kilograms
private final double radius; // in meters

Planet(double mass, double radius) {
this.mass = mass;
this.radius = radius;
}

public double getMass() { return mass; }
public double getRadius() { return radius; }

// Universal gravitational constant (m3 kg-1 s-2)
public static final double G = 6.67300E-11;

public double surfaceGravity() {
return G * mass / (radius * radius);
}
}

이 예제에서, 우리는 Planet 열거형을 만들었는데, 각 상수가 질량과 반지름을 가집니다. 이제 각 행성의 표면 중력을 계산할 수 있습니다:

public class SolarSystem {
public static void main(String[] args) {
for (Planet p : Planet.values()) {
System.out.printf("%s의 표면 중력은 %.2f m/s²%n",
p, p.surfaceGravity());
}
}
}

출력:

MERCURY의 표면 중력은 3.70 m/s²
VENUS의 표면 중력은 8.87 m/s²
EARTH의 표면 중력은 9.80 m/s²

열거형 생성자의 범위

이제 열거형 생성자의 범위에 대해 이야기해 봅시다. 기억해야 할 주요 포인트는 다음과 같습니다:

열거형 생성자는 항상 private이며, 명시적으로 private으로 선언하지 않았다고 해도 그렇습니다.

이는 열거형의 상수 집합이 실행 시간에 변경되지 않도록 자바가 보장하기 위해서입니다.

Private 생성자를 가진 열거형

열거형 생성자는 묵시적으로 private이지만, 명시적으로 private으로 선언하는 것은 명확성을 위한 좋은 관행입니다:

public enum Season {
SPRING("따뜻"),
SUMMER("뜨끈"),
AUTUMN("서늘"),
WINTER("추위");

private final String temperature;

private Season(String temperature) {
this.temperature = temperature;
}

public String getTemperature() {
return temperature;
}
}

패키지-private 생성자를 가진 열거형

열거형 생성자는 public이 아니더라도 패키지-private(기본 접근 수정자)일 수 있습니다. 이는 같은 패키지内的 다른 클래스가 생성자를 볼 수 있게 합니다:

enum DatabaseConnection {
INSTANCE;

DatabaseConnection() {
// 데이터베이스 연결 초기화
}

void connect() {
System.out.println("데이터베이스에 연결되었습니다.");
}
}

이 예제에서, 우리는 열거형을 사용하여 데이터베이스 연결의 싱글톤 패턴을 구현하고 있습니다.

결론

축하합니다! 여러분은 자바의 열거형 생성자의 힘을 풀었습니다. 기억해요, 열거형은 단순한 상수 목록이 아니라, 생성자를 통해 타입 안전하고 데이터가 풍부한 객체를 만들 수 있는 강력한 도구가 됩니다.

자바 여정을 계속하면 더 많은 흥미로운 기능을 탐험할 수 있을 거예요. 코딩을 계속하고, 계속 배우며, 가장 중요한 것은 즐기세요! 아마도 어느 날, 여러분이 자바를 다음 세대의 프로그래머들에게 가르칠 수 있을지도 모릅니다.

마무리之前, 모든 열거형 유형에 사용할 수 있는 주요 메서드를 요약해 봅시다:

메서드 설명
values() 모든 열거형 상수를 포함하는 배열을 반환합니다
valueOf(String name) 지정된 이름의 열거형 상수를 반환합니다
name() 이 열거형 상수의 이름을 정확히 선언된 것처럼 반환합니다
ordinal() 이 열거형 상수의 진수를 반환합니다 (열거형 선언에서 초기 상수는 진수를 0으로 할당합니다)
compareTo(E o) 이 열거형과 지정된 객체의 순서를 비교합니다
equals(Object other) 지정된 객체가 이 열거형 상수와 같으면 true를 반환합니다
hashCode() 이 열거형 상수의 해시 코드를 반환합니다

기억해요, 연습이 쌓이면 완벽해집니다. 그럼, 여러분만의 열거형을 만들고, 생성자에 대해 실험해 보세요. 무엇인가 놀라운 것을 만들 수 있을지 기대해 봅시다. 코딩 잘 하세요!

Credits: Image by storyset