Java (자바)

[Java] 접근 제한자 - public/protected/default/private

Oscar:) 2022. 7. 9. 00:53

 

이번 포스팅에서는

자바의 접근 제한자에 대해 공부해보자.

 

 

코드의 제일 첫 부분으로 시작하는 녀석이고,

자바의 제일 기초적인 내용 중 하나인데

 

그동안 제대로 모른채 사용하고 있었을지도 모른다.

 

 

 

접근 제한자란?

 

말 그대로, 접근을 제한해 주는 역할을 한다.

 

클래스를 다른 패키지에서 사용하지 못하게 하거나,

생성자를 호출하지 못하게 하는 등

 

적절한 기준에 부합하도록 접근을 제한한다.  

 

 

'접근 제어자' 또는 '접근 지정자' 라고 불리기도 한다.

 

 

클래스, 생성자, 메서드, 변수 등

모든 요소에 사용한다.

(지역 변수에는 사용할 수 없다)

 

어느 기준까지 접근을 제한할 것인지 정해주며,

각각의 접근 제한자마다 그 기준이 상이하다.

 

 

 

접근 제한자를 왜 사용하는가?

 

자바, 즉 객체 지향 언어의 핵심 요소 중 하나인

'캡슐화'와 관련이 있다.

 

캡슐화는 항상 은닉화를 전제로 한다.

 

데이터를 묶어서 요약하고,

내부적인 접근을 허용하지 않는 대신,

사용자에게 편의성을 제공해 주는 것이다.

 

 

접근 제한자를 사용함으로써,

데이터에 접근을 제어하며 보호할 수 있다.

 

 

 

접근 제한자의 종류

 

다음과 같이 4가지 종류가 있다.

 

 

public  /  protected  /  default  /  private

 

 

● public

제한이 없으며, 외부에서도 자유롭게 접근이 가능하다.

 

상황에 구애받지 않고 사용하고 싶을 때 사용한다.

 

 

+ 다른 개발자들이 사용할 수 있도록

라이브러리 클래스를 개발할 때 필수적으로 사용한다.

 

인터넷으로 배포되는 라이브러리 클래스 또한,

모두 public 접근 제한을 가지고 있다.

 

 

protected

같은 패키지 & 상속받은 클래스에서 접근이 가능하다.

 

다른 패키지에서 상속 받을 수 있게끔 할 때 사용한다.

 

 

default

같은 패키지 내에서만 접근이 가능하다.

 

접근 제한자를 따로 작성하지 않으면

default 로 취급된다.

 

종종 default 접근 제한자는 취급하지 않고

3가지 종류만 있다고 이야기하기도 한다.

 

 

● private

같은 클래스 내에서만 접근이 가능하다.

 

'사적인' 이라는 사전적 의미답게

가장 보수적인 접근제한자이다.

 

그렇기에,

완전히 폐쇄적인 상황에서 사용한다.

 

 

 

한 눈에 보는 접근 제한자의 범위

 

  동일 Class 동일 package 상속받은 Class 제한 없음
private O      
default O O    
protected O O O  
public O O O O

 

 

 

+ 추가적인 특징

 

생성자에서의 접근 제한자는 예외적인 경우가 있다.

 

생성자를 따로 작성해주지 않으면,

컴파일러에 의해 기본 생성자가 제공된다.

(클래스-(2) 포스팅에서 배웠다)

 

이때, 자동으로 생성되는 기본 생성자의 접근 제한자는

해당 클래스의 접근 제한자와 동일해진다.

 

 


 

 

 

이번 포스팅에서는 접근 제한자에 대해 알아보았다.

 

앞으로는 접근 제한자를 골똘히 생각해가며 사용할 것 같다.