Programming/Java

제어자 modifier

helloworld: 2021. 8. 9. 11:18

제어자

클래스, 멤버변수, 메서드 선언부에 사용하여 부가적인 의미 부여

접근제어자 : public, protected, default, private (조합하여 사용 불가)

그 외 제어자 : static, final, abstract, native, transient, synchronized, volatile, strictfp(다른 제어자와 조합 가능)

 

static

사용되는 위치 : 멤버변수, 메서드, 초기화블럭

제어자 대상 의미
static 멤버변수 모든 인스턴스에 공통적으로 사용되는 클래스 변수
(모든 인스턴스에서 공통으로 유지해야 하는 값이 있는 경우 static을 붙이자)
클래스가 메모리에 로드 시 생성됨 -> 
클래스변수는 인스턴스 생성하지 않고 사용 가능
메서드 인스턴스를 생성하지 않고 호출 가능
인스턴스 멤버들을 직접 사용 불가
초기화블럭 클래스가 메모리에 로드 시 단 한번만 수행 
주로 클래스변수(static 변수) 초기화에 사용

※ 인스턴스 메서드와 static 메서드(클래스메서드)의 차이 : 메서드 내에서 인스턴스 멤버를 사용하는가 (인스턴스 멤버를 사용하지 않는다면 static메서드로 하자)

 

final 변경 불가

제어자 대상 의미
final 클래스 변경 불가, 확장 불가 -> 상속 불가
메서드 변경 불가 -> 오버라이딩 불가
멤버변수 값 변경 불가한 상수
지역변수

※ final 멤버변수 초기화는 보통 선언과 초기화 동시에 하지만, 인스턴스 변수라면 매개변수 생성자를 이용해 초기화할 수도 있다.

 

abstract 미완성

제어자 대상 의미
abstract 클래스 클래스 내에 추상메서드 선언되어 있음.
미완성 메서드 -> 인스턴스를 생성할 수 없다
메서드 선언부만 작성, 구현부는 없다

※ 드물지만 추상 메서드가 없는 클래스도 abstract를 붙여 추상 클래스로 만들 수 있다.

   예 ) WindowAdapter 클래스

         public abstract class WindowAdapter implements WindowListener, WindowStateListener, WindowFocusListener

         {

              public void windowOpened(WindowEvent e) {}

              public void windowClosing(WindowEvent e) {}

              public void windowClosed(WindowEvent e) {}

              public void windowIconified(WindowEvent e) {}

              .....

          }

 

 

 

 

※ 포스팅에 사용한 도서 : 남궁성 자바의 정석 3판