Enum은 상수를 가지고 생성되는 객체들을 한곳에 모아둔 묶음이다. 상수들을 필요한 만큼 모두 정희하는 것도 개발자에겐 귀찮은 일이므로 Enum이란 class에서 한번에 정의할 수 있는 것이다.
[접근제한] enum [enum class 이름] {
...
}
과 같이 정의할 수 있다.
public enum Ex{
JAVA, XML, JSON
}
public static void main(String[] args){
Ex java = Ex.JAVA;
System.out.println("EX java : "+ java);
System.out.println("EX json : "+ java.json);
}
과 같이 상수를 하나의 묶음에서 객체처럼 가져와서 사용할 수 있다.
Enum은 그저 상수의 이름만 갖고 있는 것이 아닌 값도 가지고 있을 수 있다.
public enum Ex{
JAVA, XML, JSON
}
public static void main(String[] args) {
for(Ex e : Ex.values()){
System.out.print(e);
System.out.println(" = " + e.ordinal());
}
}
위 코드를 실행하면
다음과 같은 결과를 확인할 수 있다. 이 결과를 통해 우리가 알 수 있는 것은 Enum은 객체들을 배열로 관리한다는 것과 특정 값을 대입하지 않았을 땐 0부터 1씩 증가하여 값을 자동으로 넣어서 관리하고 있다는 것이다.
inner class란 class안에 또 다른 class가 정듸되는 것을 의미한다.
class Outer{
class inner{
...
}
}
다음과 inner 같이 선언하여 사용할 수 있다.
inner class를 익명으로 생성하여 사용할 수 있는데. 이는 한번만 사용하고 버려지는 객체를 사용할 때 유용한 내부 클래스이다.
interface TestInner{
int data = 1000;
public void printData();
}
public class Outer {
public static void main(String[] args) {
new TestInner(){
@Override
public void printData() {
System.out.println(TestInner.data);
}
}.printData();
}
}
다음과 같이 인터페이스가 존재할 때 인터페이스를 정의하지 않고 한번만 사용하기 위해 내부에서 new 예약어를 통해 객체를 생성하면서 class를 정의해주며 class에서 바로 메서드를 실행시킬 수 있다.
다음과 같이 결과값도 확인해 볼 수 있다.