메서드 수행 시 파라미터에 너무 많은 경우의 수가 발생하는것이 싫은 경우 파라미터를 한정적으로 정의하여 사용
public static void createMessage(String message) {
System.out.println("당신에게 메세지를 보냅니다. : " + message);
}
public static void createMessage("사랑합니다." 혹은 "감사합니다." message) {
System.out.println("당신에게 메세지를 보냅니다. : " + message);
}
Enum 을 사용한다면, 아래와 같이 값의 경우의 수를 줄일 수 있다 : 값의 제약 (파라미터)
값의 제약으로써 파라미터의 제약 혹은 반환값의 제약
public enum MessageType {
LOVE("사랑합니다."),
THANKS("감사합니다.");
private final String message;
MessageType(String message) {
this.message = message;
}
public String getMessage() {
return this.message;
}
}
@Getter
@RequiredArgsConstructor
@FieldDefaults(makeFinal = true, level = AccessLevel.PRIVATE)
public enum MessageType {
LOVE("사랑합니다."),
THANKS("감사합니다.");
String message;
}
이렇게 Enum 을 정의하면 아래와 같이 깔끔하게 파라미터를 2가지 종류로 제약할 수 있다!
public static void createMessage(MessageType type) {
System.out.println("당신에게 메세지를 보냅니다. : " + type.getMessage());
}
“사랑합니다.” 라는 메세지를 보낼때는 (2) SMS 메세지로 전송“감사합니다.” 라는 메세지를 보낼때는 (2) 이메일로 전송@Getter
@RequiredArgsConstructor
@FieldDefaults(makeFinal = true, level = AccessLevel.PRIVATE)
public enum MessageType {
LOVE("사랑합니다.", SendMediaType.SMS),
THANKS("감사합니다.", SendMediaType.EMAIL);
String message;
SendMediaType media;
}
@Getter
@RequiredArgsConstructor
@FieldDefaults(makeFinal = true, level = AccessLevel.PRIVATE)
public enum SendMediaType {
SMS("010-0000-0000"),
EMAIL("aaron@example.com");
String sender;
}
public static void createMessage(MessageType type) {
System.out.println("당신에게 메세지를 보냅니다. : " + type.getMessage());
System.out.println("다음으로부터 전송되었습니다. : " + type.getMedia().getSender());
}
당신에게 메세지를 보냅니다. : 사랑합니다.
다음으로부터 전송되었습니다. : 010-0000-0000
당신에게 메세지를 보냅니다. : 감사합니다.
다음으로부터 전송되었습니다. : aaron@example.com
findByName 이라는 함수를 만들어서,@Getter
@RequiredArgsConstructor
@FieldDefaults(makeFinal = true, level = AccessLevel.PRIVATE)
public enum MessageType {
LOVE("사랑합니다.", SendMediaType.SMS),
THANKS("감사합니다.", SendMediaType.EMAIL);
String message;
SendMediaType media;
public static MessageType findByName(String name) {
// for (Element : Collection) = Enhanced For Loop
for (MessageType each : MessageType.values()) {
if (each.name().equals(name)) {
return each;
}
}
throw new RuntimeException("ENUM 내 존재하지 않는 이름입니다 : " + name);
}
}
public static void createMessage(String type/* LOVE 혹은 THANKS */) {
MessageType messageType = MessageType.findByName(type);
System.out.println("당신에게 메세지를 보냅니다. : " + messageType.getMessage());
System.out.println("다음으로부터 전송되었습니다. : " + messageType.getType().getSender());
}