반응형
Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
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
Archives
Today
Total
관리 메뉴

웹풀스택 공부 중

15 - 6. Java - ENUM 본문

웹개발/Java

15 - 6. Java - ENUM

lukeit 2024. 11. 4. 13:15

ENUM

분류된 객체 모음

  • 특정 타입의 객체들을 한곳에 묶어둔다. “Categorized 객체”

  • 사용목적

    • 메서드 수행 시, Parameter에 너무 많은 경우의 수가 발생하는것을 방지

      • Parameter(값)의 종류나 Return value의 종류를 제약하고 싶을때 사용한다

      • 경우의 수?

          public static void createMessage(**String** message) {
                  System.out.println("당신에게 메세지를 보냅니다. : " + message);
          }
        • 이런식 일때, String message에 모든 메세지를 보낼 수 있다

          • 예시.) “사랑합니다”나, “감사합니다” 만으로 줄이고 싶을 때 Enum을 사용하여 경우의 수를 줄일 수 있다

            @Getter
            @RequiredArgsConstructor
            @FieldDefaults(makeFinal = true, level = AccessLevel.PRIVATE)
            public enum MessageType {
              LOVE("사랑합니다."),
              THANKS("감사합니다.");
            
              String message;
            }
            
            // Calling the corresponding type of it:
            public static void createMessage(**MessageType type**) {
                  System.out.println("당신에게 메세지를 보냅니다. : " + **type.getMessage()**);
            }
          • 한번 만든 Enum 객체는 바꿀일이 없기때문에 final 도 붙여준다

        • Enum으로 Parameter값에 대한 제약뿐만 아니라, Method 내 로직에서 활용할 값에 대한 제약도 설정이 가능하다

          • 예시)

            1. “사랑합니다.” 라는 메세지를 보낼때는 (2) SMS 메세지로 전송해야한다.

            2. *“감사합니다.” 라는 메세지를 보낼때는 *(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;
              }
              
              // Calling it
              public static void createMessage(MessageType type) {
              System.out.println("당신에게 메세지를 보냅니다. : " + type.getMessage());
              System.out.println("다음으로부터 전송되었습니다. : " + type.getMedia().getSender());
              }
반응형