본문 바로가기
JAVA

17. 제어자

by seongju.lee 2022. 10. 3.

제어자는 클래스와 클래스의 멤버(멤버 변수, 메서드)에 부가적인 의미를 부여해준다.

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

그 외 : static, final, abstract, native, transient, ...

  • 접근 제어자를 가장 왼쪽에 입력한다.
  • 하나의 대상에 여러 제어자를 같이 사용 가능하다.

 

  • static 제어자
static 멤버 변수 - 모든 인스턴스에 공통적으로 사용(공유)되는 클래스변수
- 클래스 변수는 인스턴스를 생성하지 않고, 클래스가 메모리에 올라가면 사용 생성.
메서드 - 인스턴스를 생성하지 않고, 호출이 가능한 static 메서드가 됨.
- static 메서드 내에서는 인스턴스 멤버들을 사용 불가함.
class StaticTest {

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

 

 

  • final 제어자
final
클래스 - 변경, 확장될 수 없는 클래스이다.
- 다른 클래스의 조상이 될 수 없다.
- 상속계층에서의 마지막 클래스
메서드 - 변경될 수 없는 메서드이다.
- final 메서드는 오버라이딩을 통해 재정의 될수가 없다.
멤버변수 - 변수 앞에 final이 붙으면, 변경 불가한 상수가 된다.
지역변수
final class FinalTest {  // 조상이 될 수 없는 클래스

    final int MAX_SIZE = 10;  // 상수
    
    
    final void getMaxSize() {  // 오버라이딩할 수 없는 메서드
    	final int LOCAL_VARIABLE = MAX_SIZE;  // 상수
        return MAX_SIZE;
    }

}
  • final키워드 활용 예시
    • String 클래스: 보안을 의해서 final class를 사용하여 상속할 수 없는 클래스로 활용함.
    • Math 클래스 : static 메서드 집합

 

  • abstract 제어자
abstract 클래스 - 클래스 내에 추상메서드가 선언되어 있음을 의미.
메서드 - 선언부만 작성하고 구현부는 작성하지 않은 추상 메서드임을 의미.
abstract class AbstractTest { // 추상 클래스
	abstract void move();  // 추상 메서드(구현부가 없는 메서드)
}
  • 추상 클래스는 인스턴스 생성이 불가하다. (구현부가 없는 메서드는 미완성 메서드이고, 때문에 추상 클래스는 미완성 클래스이기 때문이다)
  • 객체를 생성하기 위해서는 추상클래스를 상속받아서 완전한 클래스를 만든 후에 객체 생성이 가능함.

 

 

 

접근 제어자

접근 제어자를 통해 설계를 잘 해야만 캡슐화가 될 수 있다.

접근제어자를 사용하는 이유는 아래와 같다.

  • 외부로부터 데이터를 보호하기 위해서이다.(캡슐화)
  • 외부에는 불필요한, 내부적으로만 사용되는 부분을 감추기 위해서이다.

  • 접근 제어자의 종류와 범위
제어자 같은 클래스 같은 패키지 자손 클래스(다른 패키지) 전체
public O O O O
protected O O O  
(default) O O    
private O      
  • class는 public 또는 (default)만 사용가능하다.
  • 멤버(멤버변수, 메서드)는 public, protected, default, private을 적절히 사용하여 캡슐화를 진행한다.

접근 제어자에 따른 멤버 접근 범위

 

'JAVA' 카테고리의 다른 글

19. 다형성, 참조변수의 형변환  (0) 2022.11.10
18. 캡슐화  (0) 2022.10.03
16. super()와 super  (0) 2022.10.02
15. 오버라이딩  (0) 2022.10.02
14. 상속과 포함  (0) 2022.10.02