JAVA/Enum,Annotation,Stream,람다

열거형(Enum)과 어노테이션(Annotation)에 대해 배워보자

_DoYun 2022. 5. 19. 09:49

열거형이란 서로 관련있는 것들끼로 모아서 순서를 정해놓는 것을 말합니다. 예를 들어, Enum의 주제가 동물, 즉 Animal이라면 그 안에 있는 요소들은 ELEPHANT, LION, TIGER, RABBIT 등으로 구성될 수 있습니다. 이러한 구성요소들은 상수들이며, 대문자로 적는것이 암묵적인 규칙입니다. 

enum Animal {
    ELEPHANT,
    TIGER,
    LION,
    RABBIT
}

# 열거형(Enum) 

열거형의 장점들은 다음과 같습니다.

  • 코드가 단순하며 가독성이 좋다. 
  • 인스턴스를 생성할 필요가 없다. 
  • 구현의도가 Enum임을 명확하게 나타낼수 있다.

다음은 열거형 메서드들을 정의한 표입니다.

리턴 타입메소드(매개변수)설명

타입 메소드 설명
String name() 열거객체 문자열 리턴
int ordinal() 열거 객체의 순번(0부터 시작)을 리턴
int compareTo(비교값) 주어진 매개값과 비교해서 순번 차이를 리턴
열거 타입 valueOf(String name) 주어진 문자열의 열거 객체를 리턴
열거 배열 values() 모든 열거 객체들을 배열로 리턴

 

* name()

enum Animal {
    ELEPHANT,
    TIGER,
    LION,
    RABBIT
}

Animal animal = Animal.LION;
String L = animal.name();
System.out.println(L);
LION

* ordinal()

//생략

Animal animal = Animal.LION;

int L = animal.ordinal()
System.out.println(L);
2

* compareTo()

//생략

Animal animal1 = Animal.LION;
Animal animal2 = Animal.TIGER;
int L = animal1.compareTo(animal2);
System.out.println(L);
1

* valueOf()

//생략

Animal animal = Animal.valueOf("LION");
System.out.println(animal);
LION

* values()

//생략

Animal[] animal = Animal.values();
for(Animal a : animal){
   System.out.println(a);
}
ELEPHANT
TIGER
LION
RABBIT

 

# 어노테이션(Annotation) 

일반적으로 코드에서 주석의 역할은 코드를 읽는 사람들의 이해를 돕기 위한 설명글입니다. 그렇다면 프로그램을 위한 설명글은 어떤것이 있을가요?

 

  • 표준 어노테이션
  • 메타 어노테이션
  • 사용자 정의 어노테이션

그중에서 저희는 표준 어노테이션에 정의와 예시들을 살펴보겠습니다. 표준 어노 테이션에는 대표적으로 다음과 같은 어노테이션들이 포함되어 있습니다. 

  • @Override
  • @Deprecated
  • @SuppressWarnings

* @Override

class Animal{
    void run(){}
}

class ELEPHNAT extends Animal{
    @Override
    void runn(){} // 스팰링 틀림

위 처럼 상속 과정에서 오버라이드 한 메서드의 이름이 개인의 실수로 틀릴 수 있습니다. 그러나 해당 경우 프로그램은 새로운 메서드를 만든 것으로 인식하여 별도의 컴파일 오류 없이 넘어가게 됩니다.

 

이러한 경우를 미연에 방지하고자 @Override을 통해 만약 해당 어노테이션이 부착된 메서드 명이 상속된 부모 클래스 내에 존재하지 않는다면 자동으로 컴파일 오류를 발생합니다.

 

* @Deprecated

@Deprecated
public String Fly(){
    return "bird";
}

@Deprecated는 더이상 사용하지 않는 필드나 메서드가 생겼지만 호환을 위해 필요한 경우 사용하는 어노테이션입니다.

@Depreacated가 코드를 작성하면, 컴파일할 때 아래와 같은 메시지가 나타납니다.

1
2
Note: 파일명.java uses or overrides a deprecated API.
Note: Recomplie with -Xlint:deprecation for details.

 

* @SuppressWarnings

쉽게 말해 오류가 발생될 코드에 경고 메시지를 억제하는 어노테이션입니다.

@SuppressWarnings("unchecked")
ArrayList list = new ArrayList(); 
list.add("a");

System.out.println(list.get(0));
a

위 코드의 ArraList는 제너릭을 따로 설정하지 않았습니다 @SuppressWarnings를 통해 아무런 오류와 경고 메세지 없이 정상적으로 코드를 실행시키는 것이 가능했습니다.