JAVA
[JAVA] 접근제어자
개발로 먹고 살자
2022. 1. 4. 18:50
자바에서는 변수, 메소드 등을 사용할 수 있게 하는 권한 설정이 가능하다.
이를 접근제어자라고 하는데 4가지로 분류가 된다.
private - default - protected - public
private
private은 가장 적은 접근을 허용한다.
private이 붙은 변수, 메소드는 해당 클래스 내에서만 접근이 가능하다.
public class Private {
private int age = 10;
private String name = "홍길동";
private void info() {
System.out.println(age);
}
private void access() {
info();
}
}
default
일반적으로 접근 제어자를 별도로 설정하지 않을 시 default로 설정이 된다.
default는 같은 패키지 내에서만 접근이 가능하다.
package Access;
public class Default {
int age = 10;
String name = "홍길동";
void info() {
System.out.println(age);
}
}
public class main {
public static void main(String[] args) {
Default def = new Default();
def.info();
}
}
다른 클래스이지만 둘 다 Access라는 패키지로 묶여 있다.
default이기에 main에서 private의 메소드인 info()에 접근이 가능하다.
protected
protected가 붙은 변수, 메소드는 동일 패키지 내의 클래스들이나
해당 클래스를 상속받은 다른 패키지의 클래스에서 접근이 가능하다.
package Access;
public class ProtectedTest { // 접근할 클래스
protected int age = 25;
protected String name = "홍길동";
}
------------------------------------------------
package Access;
public class main { // 동일 패키지내 접근 상속x
public static void main(String[] args) {
ProtectedTest protect = new ProtectedTest();
System.out.println(protect.name);
}
}
------------------------------------------------
package Access.Protected;
import Access.ProtectedTest;
public class Protected extends ProtectedTest { // 상속 받은 다른 패키지의 클래스
public static void main(String[] args) {
Protected protect = new Protected(); // 상속을 받았기에 자신의 클래스로 객체를 생성하여
System.out.println(protect.name); // 부모 클래스의 멤버 필드에 접근이 가능
}
}
public
public은 가장 많은 접근을 허용한다.
public이 붙은 변수, 메소드는 어떤 클래스, 패키지에서라도 접근이 가능하다.
package Access;
public class PublicTest {
public int age = 25;
public String name = "홍길동";
}
package Access.Protected;
import Access.PublicTest;
public class Protected {
public static void main(String[] args) {
PublicTest pub = new PublicTest();
System.out.println(pub.name);
}
}
접근제어자에 따른 표
이렇듯 4가지의 접근제어자가 존재한다.
변수, 메소드, 클래스 등 모두 접근 제어자가 가능하다.
코드를 짜기 쉽게 어디서든 접근이 가능하도록 모두 public으로 할 수도 있겠지만
접근제어자를 잘 사용한다면 외부의 접근으로부터 데이터를 보호하거나,
외부적으로 보여주기 싫은, 내부적으로만 사용되는 정보를 숨길 수 있다.
접근제어자를 활용하여 조금 더 괜찮은 코드를 작성해보자.