Programming/Java

[Java 객체지향 프로그래밍] 접근 제한자 (접근 제어자)

joah.k 2021. 3. 1. 18:01
728x90

 

접근 제한자 ( Access Modifier ) 

 

제한자(modifier)란 클래스와 클래스 멤버의 선언 시 사용하여 부가적인 의미를 부여한다. 

자바에서는 정보 은닉을 위해 접근 제어자(access modifier)라는 기능을 제공하고 있는데, 접근 제한자를 사용하면 클래스 외부에서의 직접적인 접근을 허용하지 않는 멤버를 설정하여 정보 은닉을 구체화할 수 있다. 

(* 정보 은닉 = data hiding : 사용자가 굳이 알 필요가 없는 정보를 사용자로부터 숨기는 것) 

 

 

접근 제한자는 왜 중요한가 ? 

 

규모 있는 프로젝트를 진행한다고 가정해 보자. 규모가 커지는 만큼 복잡성이 증가한다.

그런데 객체를 사용하는 사용자가 객체 내부적으로 사용하는 변수나 메소드에 접근함으로서 개발자가 의도하지 않은 오작동을 일으킨다면...? 심각한 문제가 발생할 것이다. 

또한 보안적 관점에서도 그렇고 객체의 로직을 보호하기 위해 멤버에 따라서 외부의 접근을 허용하거나 차단할 필요가 있다. 

 

 

접근 제어자의 종류

 

자바에서는 다음과 같은 네 가지의 접근 제어자를 제공한다. 

 

1. private 

private 접근 제어자를 사용하여 선언된 클래스 멤버는 외부에 공개되지 않으며, 외부에서는 직접 접근할 수 없다.

private 멤버는 해당 멤버를 선언한 클래스 내부에서만 접근이 가능하다. 

 

2. public

public 접근 제어자를 사용하여 선언된 클래스 멤버는 외부로 공개되며, 해당 객체를 사용하는 프로그램 어디에서나 직접 접근할 수 있다. 자바 프로그램은 public 메소드를 통해서만 해당 객체의 private 멤버에 접근할 수 있으므로, public 메소드는 private 멤버와 프로그램 사이의 인터페이스 역할을 수행한다. 

 

3. default

default를 위한 접근 제어자는 따로 존재하지 않으며, 접근 제어자가 지정되지 않으면 자동적으로 default 접근 제어로 지정된다. default 접근 제어를 가지는 멤버는 같은 클래스의 멤버와 같은 패키지에 속하는 멤버에서만 접근할 수 있다.

 

4. protected

protected 멤버에 접근할 수 있는 영역은  

이 멤버를 선언한 클래스의 멤버/ 이 멤버를 선언한 클래스가 속한 패키지의 멤버 / 이 멤버를 선언한 클래스를 상속받은 자식 클래스(child class)의 멤버가 있다. 

 

접근 제한자의 접근 범위 

자바에서 접근 제어자의 접근 범위가 보다 많은 제어자부터 적은 제어자 순으로 나열하면

public > protected > default > private 순이라고 볼 수 있다. 

 

 

 

지시자 클래스 내부 동일 패키지  상속 받은 클래스 이외의 영역
private o x x x
default o o x x
protected o o o x
public o o o o

 

728x90