본문 바로가기

Java

제어자(modifier)

출처 - Java의 정석 기초편 (남궁 성)

 

 

1. 제어자

- 클래스와 클래스의 멤버(변수, 메서드)에 부가적인 의미 부여

- 접근 제어자: public, protected, (default), private

- 그 외: static, final, abstract 등

- 하나의 대상에 여러 제어자 사용가능 (접근 제어자는 하나만 선택)

 

 

2. static

- 클래스의, 공통적인

- 사용: 멤버변수, 메서드, 초기화 블럭

- 인스턴스 멤버를 사용하지 않는 메서드는 static 붙여, 인스턴스를 생성하지 않고도 호출 가능하도록 고려

 

class StaticTest {
    static int width = 200; // 클래스 변수(static변수)
    static int height = 120;
    
    static { // 클래스 초기화 블럭
    	// static 변수의 복잡한 초기화 수행
    }
    
    static int max(int a, int b) { // 클래스 메서드(static메서드)
    	return a > b ? a : b;
    }
}

 

 

3. final

- 마지막의, 변경될 수 없는

- 사용: 클래스(상속 불가), 메서드(오버라이딩 불가), 멤버변수(상수), 지역변수(상수)

 

final class FinalTest { // 조상이 될 수 없는 클래스
    final int MAX_SIZE = 10; // 값을 변경할 수 없는 멤버변수
    
    final noid getMaxSize() { // 오버라이딩할 수 없는 메서드
    	final int LV = MAX_SIZE; // 값을 변경할 수 없는 지역변수
        return MAX_SIZE;
    }
}

 

 

4. abstract

- 추상의, 미완성의

- 사용: 클래스, 메서드

- 추상 클래스는 미완성 설계도이므로 상속 받아서 완전한 클래스를 만든 후 인스턴스 생성가능

 

abstract class AbstractTest { // 추상 클래스(추상 메서드 존재)
    abstract void move(); // 추상 메서드(선언부만 작성, 구현부가 없는 메서드)
}

AbstractTest a = new AbstractTest(); // 에러. 추상 클래스 인스턴스 생성불가

 

 

5. 접근 제어자(access modifier)

- public: 접근제한없음

- protected: 같은 패키지+자손

- (default): 같은 패키지

- private: 같은 클래스

- 사용: 클래스, 멤버변수, 메서드, 생성자

- 캡슐화: 외부로부터 데이터 보호(데이터 감추기), 내부적으로만 사용되는 부분을 감추기 위해(복잡성 감소)