본문 바로가기

자바의 접근 제어자의 종류와 접근 범위

@yeong0jae2024. 9. 23. 17:40

 

 
 
자바의 클래스는 필드(멤버 변수)와 메서드로 구성됩니다.
프로그래밍을 하게 되면 클래스는 필연적으로 외부에서 생성하고, 외부에서 사용하게 됩니다.
 
이렇게 외부에서 다른 클래스에, 즉 다른 클래스의 인스턴스를 생성하고 접근을 할 때, 중요한 개념이 있습니다.
바로 '접근 제어자' 입니다.
 

접근제어자란?

접근 제어자는 무엇일까요
접근 제어자는 해당 필드와 메서드의 접근 권한을 제어하는 키워드입니다.
 
코드로 보겠습니다.

위는 전형적인 클래스입니다. name과 age 필드가 있는게 보이죠.
이 name 과 age 필드 맨 앞에 붙어있는 키워드인 "private"이 곧 접근 제어자입니다.
또한 생성자에 붙어있는 "public"도 마찬가지입니다.
 

접근제어자의 종류

자바에는 4가지 종류의 접근 제어자가 있습니다.
1. public
2. private
3. protected
4. default
입니다.
 
여기서 우리가 프로그래밍을 하면서 접근 제어자를 잘 활용하려면 무엇이 중요할까요?
 
바로, 각각의 접근 제어자가 어느 정도의 접근을 허용하는지 아는 것이 중요합니다.
 

 
1. public 접근 제어자

 
public은 해당 필드 혹은 메서드에 어떤 곳이든 상관없이 어디서든 접근할 수 있도록 합니다.
 
코드로 보겠습니다.

먼저, 위와 같이 Main과 Person이 다른 패키지에 존재하도록 했습니다.
 

Main은 다른 패키지에 있는 클래스임에도 Person의 멤버에 접근이 가능한 것을 볼 수 있습니다.
만약 접근이 불가능하다면, 컴파일 시점에 에러임을 확인할 수 있고, p1.age, p1.name에 빨간줄이 생깁니다.
 
 
 

2. private 접근 제어자

 
private이 붙은 필드와 메서드는 해당 클래스에서만 접근할 수 있도록 허용합니다.
 
위의 public을 설명할 때 코드에서 Person의 필드를 private으로 바꿔보겠습니다.

보시다시피 p1의 필드값에 접근할 수 없게 됩니다.
이는 Person이 Main과 동일안 패키지에 있다고 하더라도 똑같습니다.
무조건 해당 클래스(Person)에서만 접근할 수 있게 됩니다.
 
 
 

3. default 접근 제어자

 
default는 접근 제어자를 생략한 경우를 말하며, 같은 패키지에 있는 클래스까지 접근을 허용해줍니다.
 
Person의 필드를 default로 바꿔보겠습니다.

바로 에러가 뜨죠.
Main과 Person이 다른 패키지에 있기 때문입니다.
 
Person을 main 패키지에 둬보겠습니다.

정상적으로 접근이 되는 것을 확인할 수 있습니다.
 
이로서, default는 같은 패키지까지의 접근을 허용한다는 것을 확인해보았습니다.
 
 
 

4. protected 접근 제어자

 
마지막으로, protected 접근 제어자입니다.
protected는 default와 같습니다. 같은 패키지까지의 접근만 허용합니다.
 
하지만 다른 점이 무엇일까요?
바로 "상속"의 경우가 다릅니다.
protected 접근 제어자의 경우에는 다른 패키지에 있는 클래스이더라도 상속받은 클래스에서는 접근 가능합니다.
 
model 패키지에 Person을 상속받는 Student 클래스를 생성해보겠습니다.

위의 Student 클래스의 printStudentInfo 메서드를 보시면,
Person에서 protected로 선언된 name과 age에 자유롭게 접근 가능한 것을 확인할 수 있습니다.
 
Student 클래스는 Person과 다른 패키지에 있는 클래스지만,
Person을 상속받고 있기 때문에(자식 클래스이기 때문에) Person의 protected 필드에 접근이 가능한 것입니다.
 
 
 
 
 
 
 

yeong0jae
@yeong0jae :: yeongjae’s dev

서버 개발을 공부하는 대학생입니다.

공감하셨다면 ❤️ 구독도 환영합니다! 🤗

목차