2 minute read

JAVA 의 접근 제어자에 대해서 알아보도록 하겠습니다.

접근 제한자

접근 제한자는 누군가로부터의 접근을 제한 혹은 제어하고자 하는 목적으로 사용됩니다. 주로 사용되는 것은 다음 네 가지가 사용됩니다.

  • private : 가장 엄격한 제한자로 선언된 멤버가 자신의 클래스 내부에서만 사용되도록 제한합니다.
  • protected : private 와 비슷한 속성을 지니는 제한자로 자신의 클래스 내부와 상속받은 하위 클래스 그리고 동일한 파일 내부 그리고 동일한 폴더에서만 사용되도록 제한합니다.
  • default : 접근 제어자를 별도로 설정하지 않는 다면 변수나 메서드는 default 접근 제어자가 자동으로 설정되어 동일한 패키지 안에서만 접근이 가능합니다.
  • public : 제한자들 중에 가장 인자한 제한자로 객체가 선언되어 있는 곳이면 어디서든 사용할 수 있습니다.

private

private 접근 제한자는 OOP 의 특징 중에 하나인 캡슐화 중 은닉성을 강화하는 예약어로 사용됩니다. 동일 클래스 내에서만 사용할 수 있는 환경을 제공하는 것으로 객체를 발생시키면 메모리는 할당되어도 그것이 사용될 수 있는 범위는 해당 멤버가 선언된 클래스 내로 국한됩니다.
private 제한자를 두는 이유는 일반적으로 멤버는 값이 바뀔 경우에 프로그램에 치명적일 경우, 메소드는 클래스 내부에서만 사용하는 메소드일 경우에 private 을 사용합니다. 사용되는 형식은 다음과 같습니다.

public class Sample {
    private String secret;
    private String getSecret() {
        return this.secret;
    }
}



protected

접근 제한자가 protected 로 설정되었다면 protected 가 붙은 변수나 메서드는 동일 패키지의 클래스 또는 해당 클래스를 상속받은 클래스에서만 접근이 가능합니다. 예시로 알아보도록 하겠습니다.

package house;  // 패키지가 서로 다르다.

public class HousePark {
    protected String lastname = "park";
}
package house.person;  // 패키지가 서로 다르다.

import house.HousePark;

public class EungYongPark extends HousePark {  // HousePark을 상속했다.
    public static void main(String[] args) {
        EungYongPark eyp = new EungYongPark();
        System.out.println(eyp.lastname);  // 상속한 클래스의 protected 변수는 접근이 가능하다.
    }
}

HousePark 클래스를 상속한 EungYoungPark 클래스의 패키지는 house.person 으로 HousePark 의 패키지인 house 와 다르지만 HousePark 의 lastname 변수가 protected 이기 때문에 eyp.lastname 과 같은 접근이 가능합니다. 만약 lastname 의 접근 제어자가 protected 가 아닌 default 였다면 eyp.lastname 문장은 컴파일 오류가 발생할 것입니다.



default

접근 제한자를 별도로 설정하지 않는다면 변수나 메서드는 default 접근 제어자가 자동으로 설정되어 동일한 패키지 안에서만 접근이 가능합니다.



public

접근 제한자가 public 으로 설정되었다면 public 접근 제어자가 붙은 변수나 메서드는 어떤 클래스에서도 접근이 가능합니다.
예시를 통해 좀 더 자세히 알아보도록 하겠습니다.

package house;

public class HousePark {
    protected String lastname = "park";
    public String info = "this is public message.";
}

HousePark  info 변수는 public 접근 제한자가 붙어 있으므로 어떤 클래스라도 접근이 가능합니다. 그래서 다음과 같이 작성할 수도 있습니다.

```java
import house.HousePark;

public class Sample {
    public static void main(String[] args) {
        HousePark housePark = new HousePark();

        System.out.println(housePark.info);
    }
}

```



마치며

JAVA 프로그래밍을 하면서 접근 제한자를 모두 public 으로 설정해도 프로그램은 어느 정도 잘 동작할 것입니다. 하지만 접근 제한자를 이용하면 프로그래머의 실수를 방지할 수 있고, 기타 위험 요소를 제거할 수 있는 등의 장점이 있습니다.
아마 개인 프로젝트에서는 자주 사용되지는 않을 것입니다. 하지만 실무에서는 이런 접근 제한자를 잘 이용해서 위험 요소가 적은 프로그램을 만들 수 있기에 중요하다고 볼 수 있습니다.
긴글 읽어주셔서 감사드리며, 잘못된 내용이나 오타, 궁금한 것이 있으시다면 댓글 달아주시기 바랍니다.

Tags:

Categories:

Updated:

Comments