[Java] 접근 제어자

이지원·2024년 5월 11일

Java Study

목록 보기
5/9

접근 제어자란?

접근 제어자는 클래스 내부 또는 외부에서 메소드 그리고 필드(변수)에 접근을 제어하는 역할을 하는 키워드이다. 클래스, 메소드에 접근한다는 것은 호출한다는 뜻이고 변수에 접근한다는 것은 변수의 값을 읽어 들인다는 뜻이다.


  • 접근 제어자 종류

    • public : 외부에서 모든 접근이 허용된 접근 제어자이다.

    • protected : 같은 패키지에 속해있을 때 접근이 허용되고, 예외적으로 상속 관계에 있으면 접근이 허용되는 접근 제어자이다.

    • default : 앞에 접근 제어자를 붙이지 않았으면 자동으로 default 접근 제어자가 할당 된다. 같은 패키지에 속해있을 때 접근이 허용된다.

    • private : 같은 클래스 내에서만 접근이 허용되는 접근제어자이다.

    • 따라서 public > protected > default > private 순으로 접근 허용 범위가 나뉘어진다.


  • 클래스 접근 제어자

    • public 과 default 만 사용가능하다.

    • 범위는 위의 접근 제어자와 동일하다.

    • 하나의 자바 파일에 public 클래스는 하나만 등장할 수 있다.

    • 하나의 자바 파일에 default 접근 제어자를 사용하는 클래스는 무한정 만들 수 있다.


  • 접근 제어자의 필요성

위에서 접근 제어자 그리고 클래스 접근 제어자에 대해 알아봤다. 그럼 왜 접근 제어자가 필요할까? 그냥 public으로 설정 후 사용해도 상관없지 않을까? 라고 생각할 수 있다. 아래에서 예시를 통해 변수에 접근 제어자와 메서드에 접근 제어자가 필요한 이유를 설명하겠다.

위의 클래스는 Car 클래스에서 필드(변수)와 메서드를 모두 public으로 외부에서 모든 접근을 허용하였다. 이를 CarMain 클래스에서 보면 와 같이 모든 메서드와 변수가 접근 가능하다. 이러한 상황에서 무슨 일이 일어날 수 있을까? 실무에서는 각 파트별로 업무가 나누어져 있어서 클래스를 만든 사람과 클래스를 이용하는 사람이 다를 수 있어 클래스를 이용하는 사람은 속도를 설정하는데 있어서 변수를 바로 이용할 것인지 어떤 메서드를 이용할 것인지 혼란이 올 수 있다. 또한, 보안 측면에서도 위험할 수 있다. 따라서 Car 클래스를 아래와 같이 수정해 보자. 이 후 CarMain 클래스에서 Car 클래스의 인스턴스를 이용할려고 보면 와 같이 클래스 만든 사람의 의도에 맞게 변수와 메서드에 허용을 막음으로써 이용하는 사람도 혼란이 오지 않고 클래스를 쉽게 사용할 수 있다.

  • 접근 제어자를 통한 객체 지향 프로그래밍의 한 걸음

객체 지향 프로그래밍은 뒤에서 자세하게 설명을 할 예정이다. Java는 객체지향 프로그래밍언어 라는 것만 기억하자. 따라서 접근제어자는 객체지향 프로그래밍언어에서 다음과 같은 기능을 한다.

  1. 데이터 감추기
  2. 메서드 감추기

데이터와 메서드를 감춤으로써 외부에서는 꼭 필요한 기능만 노출하고 나머지는 모두 내부로 감추는 것이다

profile
백엔드 개발자취

0개의 댓글