개발 일기

[Java] 자바 접근 제어자(Access Modifier) 정리 - public/private/protected/default 본문

Back-End/Java

[Java] 자바 접근 제어자(Access Modifier) 정리 - public/private/protected/default

개발 일기장 주인 2024. 6. 4. 02:52

정리하게된 계기

스프링 부트를 쓰게되면서 접근 제어자를 고민할때가 정말 많다. 그러나 사실 정확히 알지 못하고 그냥 때려맞추거나 Best Practice를 무작정 매번 따라 가려고한다. 근데 정확히 왜 이게 주로 이렇게 접근 제어자를 설정하는지 이해하면서 개발을 진행하고 싶고 그러기 위해서는 접근 제어자에 대해서 잘 알고 있어야한다는 판단이 섰다. 그래서 정리해보게 됐다.


접근 제어자(Access Modifier)란?

자바에서 접근 제어자는 클래스와 클래스의 멤버인 필드, 메소드, 생성자를 생성할 때 외부에서 접근할 수 있는 범위를 제한해주는 장치이다.

크게 클래스의 접근 제어자와 클래스 멤버의 접근 제어자 이렇게 두가지로 나누어서 고려해볼 수 있다.

 

 

클래스의 접근 제어자

클래스를 정의할 때 지정 가능한 접근 제어자는 public과 default 이렇게 두가지이다.

  • Public
    : public을 사용하면, 프로젝트 어디에서든지 해당 클래스에 접근 가능하다. 즉, 패키지에 한정되지 않는다.
  • (Default)
    : 해당 생성자는 생략 가능하며 클래스 앞에 접근 제어자가 없으면 default 클래스로, 같은 패키지 안의 클래스에서만 접근 가능하다.

 

 

 

클래스 멤버의 접근 제어자

클래스의 구성요소

클래스 멤버에는 위에서 언급한 대로 필드(Field), 생성자(Constructor), 메소드(Method)가 있다.

이 3개에 지정할 수 있는 접근제어자로는 4가지가 있다.

  • Public
    : 패키지와 관계없이 모든 클래스에서 접근 가능하다.
  • Protected
    : 같은 패키지안의 모든 클래스와, 다른 패키지의 자식 클래스(상속받은 경우)에서 접근이 가능하다.
  • (Default)
    : 이 또한 생략 가능하며, 같은 패키지 안의 클래스에서만 접근 가능하다.
  • Private
    : 같은 클래스안에 있는 멤버들만 접근이 가능하다.

공개 범위는 Public > Protected > (Default) > Private 순이다.

 

 

 

그래서 접근 제어자가 왜 필요한가?

프로그램의 안정성 보장

  • 객체를 사용하는 사용자가 어떠한 요청으로 인해 객체 내부의 변수나 메서드에 접근할 경우, 의도하지 않은 동작이나 오류가 발생할 수도 있다.
  • 위와 같은 의도치 않은 오작동을 접근 제어자를 사용함으로써 예방하고, 프로그램의 안정성을 높일 수 있다.

유지 관리에서의 장점

  • 프로그램의 규모가 커질수록 접근 제어자를 통해 코드 관리가 편리해진다.
  •  변수나 메소드를 관리할때 접근 제어자를 통해 정해진 범위 내에서 신경써도된다.
  • 추가적으로 접근 제어자를 통해 막아놓게되면 예상치 못한 곳에서 사용하려할때 컴파일 오류를 내서 잘못됐다는 것을 알아차리기 쉽다.