금융에 대한 모든 것

접근 제어자란?

 접근 제어자는 클래스나 변수메서드의 접근을 제어하기 위해 적어주는 예약어를 말합니다. 흔히   있는 public부터 private, protecte, default  가지 종류가 있습니다

public

 public이 붙은 변수나 메서드는 같은 프로젝트 안에서 사용 가능합니다다음은 하나의 프로젝트에 존재하는 패키지 A 패키지 B 코드입니다.

패키지 A

package A;

public class ClassA {
    
    public static String static = "static";
}

 

패키지 B

package B;

import A.ClassA;

public class ClassB {

    public static void main(String[] args) {
        
        ClassA.static = "";
    }
}

위와 같이 클래스를 import 해주면 다른 패키지에서 접근이 가능하여 변수들을 사용할  있는 것을 확인할  있습니다.

 

default

 접근 제어자가 아무것도 붙지 않은 변수나 메서드는 default 상태로같은 패키지 안에서만 사용 가능합니다아까 전에 사용했던 public 변수들의 public 지워 보겠습니다.

패키지 A

package A;

public class ClassA {
    
    static String static = "static";
}

 

패키지 B

package B;

public class ClassB {

    public static void main(String[] args) {
        
        ClassA.Static = "";       // 오류 발생
    }
}

public을 지우고 나서 변수를 사용하려 하면 오류가 나는 것을 확인할  있습니다변수들이 속해 있는 패키지가  서로 다르기 때문에 접근이 불가능한 상태입니다

 

protected

 protected가 붙은 변수나 메서드는 default 같이 다른 패키지에서는 사용이 불가능하고 상속 관계일 때와 다른 클래스에서 사용 가능합니다. B 패키지에 ClassC 클래스를 정의하여 변수에 protected 붙이고 ClassB 클래스가 ClassC 클래스를 상속하도록 해보겠습니다.

클래스 ClassC

package B;

public class ClassC {
    
    protected String instance = "instance";
}

 

클래스 ClassB

package B;

import B.ClassC;

public class ClassB extends ClassC {

    public static void main(String[] args) {
        
        ClassB inst = new ClassB();
        inst.instance = "";
    }
}

상속받은 ClassB에서 ClassC 변수가 오류 없이  사용되는 것을 확인할  있습니다따라서 사용 가능 범위는 protected public보다 좁고 default보다  것을   있습니다.

 

private

 private이 붙은 변수나 메서드는 같은 클래스 내에서만 사용 가능합니다방금 전의 변수에서 protected 지우고 private 붙여보도록 하겠습니다

 

클래스 ClassC

package B;

public class ClassC {
    
    private String instance = "instance";
    
    public void method() {
        instance = "";
    }
}

같은 클래스에 속해 있는 method 메서드 안에서는 문제없이 변수를 사용하고 있는 모습입니다.

 

클래스 ClassB

package B;

public class ClassB {

    public static void main(String[] args) {     

        ClassC inst = new ClassC();
        inst.instance = "";     // 오류 발생
    }
}

하지만 다른 클래스에서는 사용이 불가능한 것을 확인할  있습니다.

 

 내용을 정리하자면 다음과 같습니다.

접근 제어자

외부 패키지에서 사용

상속 관계에서 사용

외부 클래스에서 사용

같은 클래스에서 사용

public 

O

O

O

O

protected

X

O

O

O

default

X

X

O

O

private

X

X

X

O

접근 제어자를 사용하는 이유

 이렇게 접근 제어자를 사용하는 이유는 보안 때문이라고   있습니다만약에 웹사이트에서 아이디와 비밀번호 같은 중요한 정보를 public 변수에 저장을 한다면 아무데서나 직접적으로 접근하여  값을 변경할  있기 때문에 노출되기 쉽습니다이런 중요한 변수들은 대부분 private 붙여줍니다.

 

 또한 여러 사람들과 함께 프로그램을 만들다 보면 다른 사람이 내가 만든 중요한 변수나 메서드를 무분별하게 사용하여 값을 변경할  있는데이를 막기 위해 상황에 맞는 접근 제어자를 사용합니다.

 

 이렇게 중요한 변수와 메서드에 접근 제어자를 이용해 사용 범위를 지정해주면 완성도가 높은 프로그램을 완성할  있습니다.

반응형