엔지니어로 가는 길

JAVA 지역 클래스(Local Classes) 본문

프로그래밍/Java

JAVA 지역 클래스(Local Classes)

탐p슨 2020. 5. 20. 22:07
728x90

출처: https://docs.oracle.com/javase/tutorial/java/javaOO/localclasses.html

 

지역 클래스(Local Classes)

 

지역 클래스는 블록 안에 정의된 클래스를 말한다. 아래 이미지에서 EnglishGreeting은 지역 클래스이다.

 

 

꼭지

 

1. 지역 클래스의 선언

2. Enclosing class 멤버에 접근하기

(*Enclosing class란 지역 클래스를 포함하고 있는 클래스)

3. 지역 클래스와 내부 클래스의 유사성

 

 

1. 지역 클래스의 선언

지역 클래스는 표현식, statements, 블록 모두에서 정의할 수 있다. 예를 들어 메소드의 body나 for문이나 if문 안에서 지역 클래스를 정의할 수 있다.

 

 

2. Enclosing class의 멤버에 접근

-지역 클래스는 enclosing class의 멤버에 접근할 수 있다.

-지역 변수가 final로 선언되었다면 지역 클래스는 지역 변수에도 접근할 수 있다.

(final로 선언되지 않은 지역 변수에는 접근할 수 없다.)

-지역 클래스가 메소드 내부에 선언된 경우 메소드의 매개변수에도 접근할 수 있다.

-Enclosing class의 멤버와 같은 이름으로 지역 클래스에 멤버를 선언하면 enclosing class의 해당 멤버는 가려진다.

 

(자바 8부터는 final 뿐만 아니라 유사 final 지역변수에도 접근이 가능하다. 유사 final이란 final이라는 키워드는 안붙었지만 초기화된 이후에 절대 바뀌지 않는 변수나 매개변수를 말한다. 아래의 경우 test는 final로 선언되지 않은 지역변수이기 때문에 Java 8 이전에는 PhoneNumber 클래스에서 사용할 수 없었지만, 코드에서 test의 값을 수정하지 않는 경우 effectively final(유사 final)로 인정하여 compile  에러가 발생하지 않는다. 하지만 "test = 7;"과 같이 test의 값을 수정하려고 하면 에러가 발생한다.)

 

 

 

3. 지역 클래스는 내부 클래스와 유사하다.

-지역 클래스와 내부 클래스 모두 정적인 멤버를 정의하거나 선언할 수 없다.

(정적 메소드 속의 지역 클래스만 enclosing class의 정적 멤버를 참조할 수 있다. 아래의 경우 validatePhoneNumber라는 정적 메소드 안에 PhoneNumber 클래스가 정의되어 있기 때문에 정적 멤버인  regularExpression을 사용할 수 있다.)

 

 

 

(static 키워드가 붙었어도 아래처럼 상수를 표현하기 위한 경우라면 예외적으로 static 멤버를 가질 수 있다.)

 

https://docs.oracle.com/javase/tutorial/java/javaOO/localclasses.html

 

-지역 클래스는 enclosing block의 인스턴스 멤버에 접근할 수 있기 때문에 non-static이다.

728x90

'프로그래밍 > Java' 카테고리의 다른 글

JAVA 람다 표현식의 문법과 사용  (0) 2020.06.23
JAVA 익명 클래스(Anonymous Classes)  (0) 2020.05.28
자바 스트림 API  (0) 2020.05.05
JVM 런타임 메모리 영역  (0) 2020.05.02
Java 중첩 클래스  (11) 2020.04.23
Comments