Java

[중앙정보처리학원] Java* 객체지향 접근 제한자 (Access Modifier)

해보구 2024. 4. 22. 16:40

접근 제한자

접근 제한자(access modifier)는 클래스, 필드, 메서드, 생성자에 대한

접근 권한을 제한하는 키워드이다.

자바에서는 다음과 같은 네 가지의 접근 제한자가 있다.

 

 

public, : 모두 접근가능

protected, : 같은 패키지 내 가능, default보다 주로 사용됨

default, : void 앞에 아무것도 붙지않으면 void

private : 같은 클래스 내에서만 접근이 가능하다.

 

 

 

같은 클래스 내의 경우의 코드

package day07.modi.pac1;

public class A {

    // 필드
    public int f1;
    int f2; // default 제한
    private int f3;

    // 메서드
    public void m1() {}
    void m2() {} // default 제한
    private void m3() {}


    // 생성자
    public A(int a) {}
    A(double b) {}
    private A(boolean c) {}

    void test() {
        this.f1 = 10;
        this.f2 = 10;
        this.f3 = 10;  // 같은 클래스 내에서는 public 이든 default 든 private 이든 다 okay.

        m1();
        m2();
        m3();

        new A(10); // public
        new A(5.5); // default
        new A(false); // boolean
    }
}

 

같은 패키지내 다른 클래스일 경우

package day07.modi.pac1;

import day04.Dancer;
import day07.modi.pac2.C;

public class B {

    public int z1;
    int z2;
    private int z3;

    void test() {

       A a1 =  new A(50); // public
        A a2 = new A(5.55); // default
//        A a3 = new A(true); // private

        a1.f1 = 20; // public
        a1.f2 = 50; // default


        C c = new C();
        c.y1 = 10;
//        c.y2 = 20;
//        c.y3 = 30;

        Dancer dancer = new Dancer(); // default 다른패키지라 안됨 public 이되면 사용가능
        dancer.dance(); // Dancer에 public이 되어도 dance에 public이 되야함
    }
}

 

 

패키지까지 다를 경우

package day07.modi.pac2;

import day04.Dancer;
import day07.modi.pac1.A;
import day07.modi.pac1.B;

public class C {

    public int y1;
    int y2;
    private int y3;

    void test() {

        A a = new A(100);// public
//        new A(3.14); // default
//        new A(false); // private

        a.f1 = 10; // public
//        a.f2 = 20; // default
//        a.f3 = 30; // private

        a.m1();
//        a.m2();
//        a.m3();


        new B();
    }
}