๋ถ๋ฅ๋ ๊ฐ์ฒด์ ๋ชจ์
Java Enum
Enum์ ํ์ ๋ ๊ฐ๋ค์ ์งํฉ์ ์ ์ํ ๋ ์ฌ์ฉ๋๋ Java์ ํน๋ณํ ๋ฐ์ดํฐ ํ์ ์ด๋ค. ํน์ ๋ฉ์๋์ ํ๋ผ๋ฏธํฐ๋ ๊ฐ์ ์ค์ ํ ๋ ์ผ์ด์ค๊ฐ ๋๋ฌด ๋ง์์ ธ ๋ณต์กํด์ง๋ ๊ฒ์ ๋ฐฉ์งํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ค. Enum์ ํตํด ์ ์๋ ๊ฐ๋ง์ ์ฌ์ฉํ๋๋ก ์ ์ฝํ ์ ์๋ค.
๋ง์ ๊ฒฝ์ฐ, ๋ฉ์๋ ํ๋ผ๋ฏธํฐ์ Integer๋ String๊ณผ ๊ฐ์ ๊ฐ๋ค์ด ์ฌ์ฉ๋๋ค. ํ์ง๋ง ๊ฐ์ด ์๋ชป๋ ๊ฒฝ์ฐ๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด Enum์ ์ฌ์ฉํ๋ฉด, ๊ฐ์ ๊ฒฝ์ฐ์ ์๋ฅผ ์ ํํ ์ ์๋ค. ์ด๋ ์๋ชป๋ ๊ฐ์ ์ ๋ฌ์ ๋ฐฉ์งํ๋ค.
Enum ์ฌ์ฉ ์์
๋ฌธ์ ์ํฉ:
public static String createMessage(String message) {
return "๋น์ ์๊ฒ ๋ฉ์ธ์ง๋ฅผ ๋ณด๋
๋๋ค. : " + message;
}
์ ์ฝ๋์์ message ํ๋ผ๋ฏธํฐ๋ก ์ด๋ค ๋ฌธ์์ด์ด๋ ์ ๋ ฅํ ์ ์์ด, ์ ํ๋์ง ์์ ๊ฐ์ด ์ ๋ฌ๋ ์ํ์ด ์๋ค. ์ด๋ฅผ Enum์ ์ฌ์ฉํ์ฌ ๊ฐ์ ํ ์ ์๋ค.
Enum์ ์ฌ์ฉํ์ฌ ๊ฐ ์ ํํ๊ธฐ:
enum MessageType {
LOVE("์ฌ๋ํฉ๋๋ค."),
THANKS("๊ฐ์ฌํฉ๋๋ค.");
private final String message;
public String getMessage() {
return this.message;
}
MessageType(String message) {
this.message = message;
}
}
public static String createMessage(MessageType type) {
return "๋น์ ์๊ฒ ๋ฉ์ธ์ง๋ฅผ ๋ณด๋
๋๋ค. : " + type.getMessage();
}
์ ์ฝ๋์์ MessageType์ด๋ผ๋ Enum์ ์ฌ์ฉํ์ฌ ๋ฉ์ธ์ง ํ์ ์ ์ ์ํ๊ณ , "์ฌ๋ํฉ๋๋ค"์ "๊ฐ์ฌํฉ๋๋ค" ๋ ๊ฐ์ง ๊ฐ๋ง ํ์ฉํ๋๋ก ์ค์ ํ๋ค. ์ด์ ์ด ๋ ๊ฐ ์ด์ธ์ ๊ฐ์ ๋ฉ์๋์ ์ ๋ฌ๋ ์ ์๋ค.
Enum์ผ๋ก ๋ณต์กํ ์ ์ฝ ์ค์
Enum์ ๋จ์ํ ํ๋์ ๊ฐ์ ์ ์ํ๋ ๊ฒ ์ธ์๋, ์ฌ๋ฌ ์์ฑ์ ํจ๊ป ์ ์ํ ์ ์๋ค. ์๋ฅผ ๋ค์ด, ๋ฉ์ธ์ง์ ํ์ ๋ฟ๋ง ์๋๋ผ, ์ ์กํ ๋งค์ฒด(SMS ๋๋ EMAIL) ๊น์ง ์ ์ฝํ ์ ์๋ค.
๋ณตํฉ Enum ์ฌ์ฉ ์์:
enum SendMediaType {
SMS,
EMAIL;
}
enum MessageType {
LOVE("์ฌ๋ํฉ๋๋ค.", SendMediaType.SMS),
THANKS("๊ฐ์ฌํฉ๋๋ค.", SendMediaType.EMAIL);
private final String message;
private final SendMediaType mediaType;
public String getMessage() {
return this.message;
}
public SendMediaType getMediaType() {
return this.mediaType;
}
MessageType(String message, SendMediaType mediaType) {
this.message = message;
this.mediaType = mediaType;
}
}
์ ์์์์ MessageType๊ณผ ํจ๊ป ์ ์ก ๋งค์ฒด(SendMediaType) ๋ ์ค์ ํ๋ค. ์ด๋ฅผ ํตํด ๊ฐ ๋ฉ์ธ์ง ํ์ ์ ๋ง๋ ์ ์ก ๋ฐฉ์(SMS ๋๋ EMAIL)๋ ์ ์ฝํ ์ ์๋ค.
๋ฉ์ธ์ง ์ ์ก ๋ฉ์๋:
public static void sendMessageType type) {
String message = createMessage(type);
System.out.prirntln(String.format("๋ค์์ %s ๋งค์ฒด๋ก ๋ค์์ ๋ฉ์ธ์ง๋ฅผ ๋ณด๋
๋๋ค : '%s'", type.getMediaType(), message));
}
๊ฒฐ๊ณผ:
sendMessage(MessageType.LOVE); // ๋ค์์ SMS ๋งค์ฒด๋ก ๋ค์์ ๋ฉ์ธ์ง๋ฅผ ๋ณด๋
๋๋ค : '๋น์ ์๊ฒ ๋ฉ์ธ์ง๋ฅผ ๋ณด๋
๋๋ค. : ์ฌ๋ํฉ๋๋ค.'
sendMessage(MessageType.THANKS); // ๋ค์์ EMAIL ๋งค์ฒด๋ก ๋ค์์ ๋ฉ์ธ์ง๋ฅผ ๋ณด๋
๋๋ค : '๋น์ ์๊ฒ ๋ฉ์ธ์ง๋ฅผ ๋ณด๋
๋๋ค. : ๊ฐ์ฌํฉ๋๋ค.'
Lombok์ ์ฌ์ฉํ์ฌ Enum ๊ฐ๊ฒฐํ๊ฒ ์ ์
Lombok ์ฌ์ฉ ์์:
@Getter
@RequiredArgsConstructor
enum MessageType {
LOVE("์ฌ๋ํฉ๋๋ค.", SendMediaType.SMS),
THANKS("๊ฐ์ฌํฉ๋๋ค.", SendMediaType.EMAIL);
private final String message;
private final SendMediaType mediaType;
}
Enum ๋ด๋ถ ๋ฉ์๋ ํ์ฉ
Enum ๋ด์์ ์ ์ ๋ฉ์๋๋ฅผ ์ถ๊ฐํ์ฌ ํน์ ๊ฐ์ ์ฐพ๊ฑฐ๋ ๊ฒ์ฆํ ์ ๋ ์๋ค. ์๋ฅผ ๋ค์ด ๋ฌธ์์ด ๊ธฐ๋ฐ์ผ๋ก Enum๊ฐ์ ์ฐพ๋ ๋ฉ์๋๋ฅผ ์ ์ํ ์ ์๋ค.
Enum์์ ๊ฐ ์ฐพ๊ธฐ:
@Getter
@RequiredArgsConstructor
enum MessageType {
LOVE("์ฌ๋ํฉ๋๋ค.", SendMediaType.SMS),
THANKS("๊ฐ์ฌํฉ๋๋ค.", SendMediaType.EMAIL);
private final String message;
private final SendMediaType mediaType;
public static MessageType findByName(String name) {
for (MessageType each : MessageType.values()) {
if (each.name().equals(name)) {
return each;
}
}
throw new IllegalArgumentException("ํด๋นํ๋ MessageType์ด ์์ต๋๋ค : " + name);
}
}
์ฌ์ฉ ์์:
MessageType type = MessageType.findByName("LOVE");
System.out.println(type.getMessage()); // "์ฌ๋ํฉ๋๋ค."
ref ) ํด๋น ๋งํฌ์ ์ฐ์ํํ์ ๊ธฐ์ ๋ธ๋ก๊ทธ๋ฅผ ์ฐธ๊ณ ํ์ !
https://techblog.woowahan.com/2527/
โน๏ธ์ฐธ๊ณ
[ASAC 6๊ธฐ ๊ฐ์์๋ฃ]
'๐ปDEV-STUDY > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Java] Optional (1) | 2024.10.02 |
---|---|
[Java] SOLID ์์น (1) | 2024.10.02 |
[Java] Interface / Abstract Class (1) | 2024.10.01 |
[Java] Final๊ณผ Static (2) | 2024.09.30 |
[Java] Collection (0) | 2024.09.28 |