[java] 자바 인피니스팬의 접근 제어
자바에서는 클래스, 메소드, 변수 등의 접근 제어를 통해 해당 요소에 대한 접근을 제한할 수 있습니다. 이를 통해 프로그램의 보안성과 모듈성을 높일 수 있습니다.
다음은 자바의 4가지 접근 제어자와 인피니스팬에 대한 설명입니다.
1. 접근 제어자
- private: 같은 클래스 내에서만 접근 가능
- default: 같은 패키지 내에서만 접근 가능
- protected: 같은 패키지 또는 상속받은 클래스에서 접근 가능
- public: 어떤 클래스에서든 접근 가능
2. 인피니스팬
- 인피니스팬이란 패키지 안에 소속된 클래스들끼리는 서로 접근 제한 없이 상호작용할 수 있다는 개념입니다.
- 따라서 동일한 패키지에 속한 클래스끼리는 접근 제어자의 영향을 받지 않고 서로의 멤버에 자유롭게 접근할 수 있습니다.
package com.example.myapp;
public class MyClass {
private int privateVar;
int defaultVar;
protected int protectedVar;
public int publicVar;
public static void main(String[] args) {
MyClass obj = new MyClass();
obj.privateVar = 1; // 동일 클래스 내에서 접근 가능
obj.defaultVar = 2; // 같은 패키지 내에서 접근 가능
obj.protectedVar = 3; // 같은 패키지 또는 상속받은 클래스에서 접근 가능
obj.publicVar = 4; // 어떤 클래스에서도 접근 가능
System.out.println(obj.privateVar); // 출력: 1
System.out.println(obj.defaultVar); // 출력: 2
System.out.println(obj.protectedVar); // 출력: 3
System.out.println(obj.publicVar); // 출력: 4
}
}
package com.example.myapp;
public class AnotherClass {
public static void main(String[] args) {
MyClass obj = new MyClass();
obj.privateVar = 1; // 오류! 다른 클래스에서 private 변수에 접근할 수 없음
obj.defaultVar = 2; // 같은 패키지 내에서 접근 가능
obj.protectedVar = 3; // 같은 패키지 또는 상속받은 클래스에서 접근 가능
obj.publicVar = 4; // 어떤 클래스에서도 접근 가능
System.out.println(obj.defaultVar); // 출력: 2
System.out.println(obj.protectedVar); // 출력: 3
System.out.println(obj.publicVar); // 출력: 4
}
}
위의 예제에서는 MyClass
라는 클래스와 AnotherClass
라는 클래스가 동일한 패키지 com.example.myapp
에 속해 있습니다. 이를 통해 서로의 멤버 변수에 접근할 수 있습니다. 하지만 AnotherClass
에서는 MyClass
의 privateVar
에 접근할 수 없는 것을 확인할 수 있습니다.