접근 제어자(access modifier)

Kuno17·2022년 12월 28일
0

Java 기초

목록 보기
1/6
post-thumbnail
접근 제어자는 맴버 또는 클래스에 사용되어, 해당하는 맴버 또는 클래스를 외부에서 접근하지 못하도록 제한하는 역할을 한다.
  • 접근제어자가 사용될 수 있는 곳- 클래스, 맴버변수, 메서드, 사용자
    - private - 같은 클래스 내부만 접근가능
    - (default) - 같은 패키지 내에서만 접근가능
    - protected - 같은 패키지 내에서, 그리고 다른 패키지의 자손 클래스에서 접근 가능
    - public - 접근 제한 없음.

예시를 통해 확인이 가능하다.

다음과 같이 패키지 파일 2가지를 만들고 Myparent 클래스와 이를 상속할 MyparentTest2 클래스를 각 패키지에 생성하여 각 상관 관계를 확인할 수 있다.

package Pkg1;
public class Myparent {
    private int prv; //같은 클래스
    int dft; // 같은 패키지
    protected int prt; // 같은패키지 + 자손(다른 패키지)
    public int pub; //접근제한 없음

    public void printMembers() {
        System.out.println(prv);
        System.out.println(dft);
        System.out.println(prt);
        System.out.println(pub);
    }
}
 class MyparentTest {
    public static void main(String[] args) {
        Myparent p = new Myparent();
//        System.out.println(p.prv); //에러
        System.out.println(p.dft); //OK
        System.out.println(p.prt); //OK
        System.out.println(p.pub); //OK

    }
}

private 제어자가 붙은경우 같은 클래스 내부에(Myparent)에서만 사용이 가능하다.
그 외 나머지 제어자들은 같은 패키지내의 범위는 허용하기 때문에 class MyparentTest에서 사용이 가능하다.

그렇다면 범위에 같은패키지 + 다른 패키지의 자손 클래스를 지원하는 protected 제어자와 제한이 없는 public의 경우는 다음과 같이 확인할 수 있다.

package pkg2;

import Pkg1.Myparent;
class MyChild extends Myparent {
    public void printMembers() {
//        System.out.println(prv); //에러
//        System.out.println(dft); //에러
        System.out.println(prt);
        System.out.println(pub);
    }
}
public class MyparentTest2 {
    public static void main(String[] args) {
        Myparent p = new Myparent();
//        System.out.println(p.prv); //에러
//        System.out.println(p.dft); //에러
//        System.out.println(p.prt); //에러
        System.out.println(p.pub); //OK public은 접근제한이 없음.

    }
}

Impot 로 Pkg1패키지의 .Myparent 클래스를 불러왔다.
이를 상속받은 MyChild class에서 prt변수는 사용할 수 있으나 자손 클래스가 아닌 다른 클래스에서는 사용이 불가능하다.

public 제어자의 경우 어디서나 이용이 가능하다.

profile
자바 스터디 정리 - 하단 홈 버튼 참조.

0개의 댓글