반응형

[Oracle Java Tutorial을 읽고 순서에 의해 정리한 후 본인의 경험과 이해를 바탕으로 작성된 글임을 밝힌다.]

[Java Tutorial, 자바 프로그래밍 기초 배우기, Java Programming, 자바 튜토리얼]

Enum 타입 (Enum Types)

Enum 타입은 미리 정의한 상수들의 세트가 되는 변수로 특별한 데이터 타입이다..그 변수는 미리 정의된 그 값들 중 하나와 같아야 한다. 방위(동서남북)를 나타내거나 요일을 나타내는 공통 샘플도 있다.

상수인 이유로 enum타입 필드의 이름들은 대문자이다.

자바 언어에서는 enum키워드를 사용해서 enum타입을 정의한다. 예를 들어 요일 enum타입을 정의할 수 있다.

     public enum Day {

        SUNDAY, MONDAY, TUESDAY, WEDNESDAY,. THURSDAY, FRIDAY, SATURDAY

     }

고정된 상수의 세트를 대표하기 위해 필요한 때에 enum타입을 사용하는게 좋다. 우리가 아는 모든 가능한 종류의 세트를 사용할 수 있다. 메뉴, 명령어 등등

 

 

 

아래는 Day enum 타입 예제이다.

   public class EnumTest {

      public enum Day {

         SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY

      }

      Day day;

      public EnumTest(Day day) {

         this.day = day;

      }

      public void tellItLikeItIs() {

          switch(day) {

          case MONDAY:

               System.out.println("Mondays are bad");

          break;

          case FRIDAY:

               System.out.println("Fridays are better");

          break;

          case SATURDAY: case SUNDAY:

              System.out.println("Weekends are best");

          break;

          default:

               System.out.println("Midweek days are so-so");

          }

    }

    public static void main(String[] args) {

        EnumTest firstDay = new EnumTest(Day.MONDAY);

        firstDay.tellItLikeItIs();

        EnumTest thirdDay = new EnumTest(Day.WEDNESDAY);

        thirdDay.tellItLikeItIs();

        EnumTest fifthDay = new EnumTest(Day.FRIDAY);

        fifthDay.tellItLikeItIs();

        EnumTest sixthDay = new EnumTest(Day.SATURDAY);

        sixthDay.tellItLikeItIs();

       EnumTest seventhDay = new EnumTest(Day.SUNDAY);  

       seventhDay.tellItLikeItIs();

    }

}

아래는 결과이다.

Mondays are bad

Midweek days are so-so

Fridays are better

Weekends are best

Weekends are best

자바 프로그래밍 언어의 enum 타입(Java Programming) 다른 언어에 대비 훨씬 더 파워풀하다. Enum 선언은 클래스로 정의된다. (enum type으로 불린다.) enum 클래스 몸체는 메서드와 다른 필드를 포함할 수 있다. 컴파일러는 enum을 생성할 때 자동으로 몇 개의 특별한 메서드를 추가한다. 예를 들어 선언한 enum의 값 전체를 포함한 배열을 리턴하는 static 값 메서드가 있다. 이 메서드는 enum타입의 값을 for-each 구문을 이용해 공통으로 사용될 수 있다. 예를 들어 아래 예저는 Planet 클래스 예제로 태양계의 모든 행성을 for 순환문으로 만든 것이다.

For(Planet p : Planet.values()) {

}

반응형
반응형

[Oracle Java Tutorial을 읽고 순서에 의해 정리한 후 본인의 경험과 이해를 바탕으로 작성된 글임을 밝힌다.]

[Java Tutorial, 자바 프로그래밍 기초 배우기, Java Programming, 자바 튜토리얼]

익명 클래스 (Anonymous Classes)

익명 클래스는 여러분이 만드는 코드를 좀 더 간결하게 만들 수 있게 한다. 익명 클래스는 동시에 클래스를 선언하고 인스턴스화 할 수 있게 한다. 이름이 없는 것 빼고는 지역 클래스와 같다. 딱 한 번 지역 클래스 사용이 필요할 때 사용하면 된다.

익명 클래스 선언 (Declaring Anonymous Classes)

지역 클래스는 클래스 선언인 반면 익명 클래스는 표현이다. 이 말은 또 다른 표현으로 정의한다는 의미이다. 다음 예제는 지역 변수 frenchGreetingspanishGreeting 의 선언 구문에서 익명 클래스를 사용한다. 그러나 변수 ehglishGreeting의 초기화를 위해 지역 클래스를 사용했다.

   public class HelloWorldAnonymousClasses {

      interface HelloWorld {

         public void greet();

         public void greetSomeone(String someone);

      }

      public void sayHello() {

 

      class EnglishGreeting implements HelloWorld {

         String name = "world";

          public void greet() {

             greetSomeone("world");

          }

          public void greetSomeone(String someone) {

             name = someone;

             System.out.println("Hello " + name);

          }

       }

       HelloWorld englishGreeting = new EnglishGreeting();

       HelloWorld frenchGreeting = new HelloWorld() {

          String name = "tout le monde";

          public void greet() {

             greetSomeone("tout le monde");

          }

          public void greetSomeone(String someone) {

             name = someone;

             System.out.println("Salut " + name);

          }

       };

       HelloWorld spanishGreeting = new HelloWorld() {

          String name = "mundo";

          public void greet() {

             greetSomeone("mundo");

          }

          public void greetSomeone(String someone) {

             name = someone;

             System.out.println("Hola " + name);

         }

       };

       englishGreeting.greet();

       frenchGreeting.greetSomeone("Fred");

       spanishGreeting.greet();   

   }

   public static void main(String[] args) {

      HelloWorldAnonymousClasses myApp = new HelloWorldAnonymousClasses();

      myApp.sayHello();

    }

}

 

 

익명 클래스 문법 (Syntax Anonymous Classes)

앞에서 언급된 것처럼 익명 클래스는 표현이다. 익명 클래스 표현의 문법은 코드 블록에 클래스 정의가 포함된 것을 제외하고 생성자 호출과 비슷하다.

frenchGreetion 객체의 인스턴스화에 대해 생각해 보자.

    HelloWorld frenchGreeting = new HelloWorld() {

       String name = "tout le monde";

       public void greet() {

          greetSomeone("tout le monde");

       }

       public void greetSomeone(String someone) {

          name = someone;

          System.out.println("Salut " + name);

       }

    };

익명 클래스 표현은 아래 것들로 구성된다.

  • New 조작어

  • 구현할 인터페이스 또는 확장할 클래스의 이름. 이 예제는 익명 클래스는 인터페이스 HelloWorld를 구현한다.

  • 일반 클래스 인스턴스 생성 표현과 마찬가지로 생성자에 대한 인수를 포함하는 괄호

  • 인터페이스를 구현할 때 거기엔 생성자가 없다. 그래서 비어 있는 괄호를 사용한다.

  • 본문은 클래스 선언 본문이다. 좀 더 구체적으로 말하면 본문에서 메서드 선언은 허용되지만 구문은 아니다.

익명 클래스 정의는 표현이기 때문에 틀림없이 구문의 부분이다. 이 예제에서 익명 클래스 정의는 frenchGreeting 객체 인스턴스 구문의 부분이다. (중괄호를 닫을 땐 세미콜론을 붙여준다.)

 

반응형