Search

반응형

'지역 클래스'에 해당되는 글 1건

  1. 2019.08.08 [Java_Tutorial]33강-자바 코딩, 지역 클래스3[Local Classes, 자바 프로그래밍 기초 , 자바 튜토리얼]
반응형

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

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

지역 클래스 (Local Classes)

로컬(지역) 클래스(Local classes)는 중괄호{ } 사이에 0개 또는 그 이상의 구문의 그룹이 있는 블록에 정의된 클래스다. 일반적으로 메서드의 몸체에서 지역변수가 정의된 걸 찾을 수 있다.

지역 클래스는 내부 클래스와 닮았다(Local Classes Are Similar To Inner Classes)

지역 클래스는 어떤 static 멤버를 선언이나 정의할 수 없는 이유로 내부 클래스와 닮았다.

vaildatePhoneNumber static메서드에서 정의된 PhoneNumber 클래스 같은 static메서드내 지역 클래스는 감싸고 있는 클래스의 static멤버만 참조할 수 있다. 예를 들어 만약 static으로 regularExpression 멤버변수를 선언하지 않았다면 자바 컴파일러는 non-static 변수인 regularExpressionstatic구문에서 참조될 수 없다. 라는 비슷한 에러 메시지를 만든다.

지역 클래스는 non-static이다. 왜냐하면 포함된 블록의 인스턴스 멤버에 접근권이 있기 때문이다. 그 결과 대부분 static으로 선언된 종류들을 포함할 수 없다.

인터페이스는 본질적으로 static이라서 블록 내에 인터페이스를 선언할 수 없다. 예를 들어 아래 발취된 코드는 컴파일되지 않는다. 왜냐하면 인터페이스 HelloTheregreetInEnglish 메서드의 몸체 내에 정의되어 있다.

    public void greetInEnglish(){

       interface HelloThere {

          public void greet();

       }

       class EnglishHelloThere implements HelloThere {

            public void greet(){

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

           }

      }

      HelloThere myGreeting = new EmglishHelloThere();

      myGreeting.greet();

    }

 

 

지역 클래스에서 static을 초기화 하는 부분 또는 멤버 인터페이스를 선언할 수 없다. 아래 발췌된 소스도 컴파일되지 않는다. 왜냐하면 EnglishGoodbye 메서드 때문이다. sayGoodbyestatic로 선언되어 있다. Static은 오직 상수 선언시만 허용된다.라는 비슷한 오류 메시지를 만들 것이다.

    public void sayGoodbyeInEnglish(){

       class EnglishGoodbye() {

          public static void sayGoodbye(){

             System.out.println(“Bye bye”);

         }

      }

      EnglishGoodbye.sayGoodbye();

    }

지역 클래스는 상수로 제공되는 static 멤버를 가질 수 있다. EnglishGoodbye static멤버이기 때문에 아래 발췌 코드는 컴파일된다.

farewell은 상수다.

    public void sayGoodbyeInEnglish(){

       class EnglishGoodbye{

           public static final String farewell = “Bye bye”;

           public void sayGoodBye(){

               System.out.println(farewell);

           }

       }

        EnglishGoodbye myEnglishGoodbye = new EnglishGoodbye(); 

        myEnglishGoodbye.sayGoodbye()’

   }

 

반응형