Java 액세스 한정자


Java 액세스 수정자는 Java에서 액세스 제어를 제공하는 데 사용됩니다. Java는 private, protected 및 public의 세 가지 키워드를 통해 액세스 제어를 제공합니다. 이러한 액세스 수정자를 항상 사용할 필요는 없으므로 "default access\, "package-private\ 또는 "no modifier\라는 또 다른 액세스 수정자가 있습니다.

Java 액세스 한정자

  1. 클래스가 "public\이면 어디에서나 액세스할 수 있습니다. 즉, 다른 패키지 등에 있는 다른 클래스에서 액세스할 수 있습니다.
  2. 소스 파일에는 "public\ 클래스가 하나만 있을 수 있으며 파일 이름은 public 클래스 이름과 같아야 합니다.
  3. 클래스에 "기본 액세스\ 권한이 있는 경우 동일한 패키지의 다른 클래스에서만 액세스할 수 있습니다.

클래스 멤버가 있는 Java 액세스 한정자

클래스 멤버 변수 및 메서드에 대한 네 가지 액세스 수정자를 모두 가질 수 있습니다. 그러나 구성원 액세스 한정자 규칙은 클래스 수준 액세스 규칙 이후에 적용됩니다. 예를 들어 클래스에 기본 액세스 권한이 있으면 다른 패키지에서 볼 수 없으므로 클래스의 메서드와 변수도 볼 수 없습니다. 각각을 개별적으로 살펴본 다음 간단한 프로그램으로 Java 액세스 수정자 사용법을 보여줍니다.

Java 액세스 수정자 - 공개 키워드

클래스 멤버가 "public\이면 어디에서나 액세스할 수 있습니다. 멤버 변수 또는 메서드는 전역적으로 액세스할 수 있습니다. 이것은 클래스 멤버에 대한 액세스를 제공하는 가장 간단한 방법입니다. 그러나 클래스와 함께 이 키워드를 사용하는 데 주의해야 합니다. 그렇지 않으면 누구나 값을 변경할 수 있습니다.일반적으로 클래스 변수는 비공개로 유지되며 getter-setter 메소드가 작동하도록 제공됩니다.

Java 액세스 수정자 - 개인용 키워드

클래스 멤버가 "private\이면 동일한 클래스 내에서만 액세스할 수 있습니다. 이것은 가장 제한된 액세스이며 클래스 멤버는 외부 세계에서 볼 수 없습니다. 일반적으로 클래스 변수를 비공개로 유지하고 비공개로 클래스 내부에서만 사용하도록 의도되었습니다.

Java 액세스 수정자 - 보호된 키워드

클래스 구성원이 "보호\되면 동일한 패키지의 클래스와 하위 클래스에만 액세스할 수 있습니다. 이 수정자는 비공개에서 덜 제한되지만 더 제한적입니다. 일반적으로 이 키워드를 사용하여 클래스 변수가 하위 클래스에서만 액세스할 수 있도록 합니다.

Java 액세스 수정자 - 기본 액세스

package com.journaldev.access;

class TestA {

	public void methodPublic(){
		methodPrivate();
	}
	
	protected void methodProtected(){
		methodPrivate();
	}
	
	void methodDefault(){
		methodPrivate();
	}
	
	private void methodPrivate(){}
}

TestA 클래스에는 기본 액세스 권한이 있으며 개인 클래스 메서드는 동일한 클래스의 다른 모든 부분에 액세스할 수 있습니다. TestB.java


package com.journaldev.access;

import com.journaldev.access.TestA;

public class TestB {

	public static void main(String args[]) {
		new TestA().methodPublic();
		new TestA().methodProtected();
		new TestA().methodDefault();

	}

	public void methodPublic() {

	}

	protected void methodProtected() {

	}

	void methodDefault() {

	}

	private void methodPrivate() {
	}

}

TestB는 TestA 클래스와 동일한 패키지에 있으므로 클래스 멤버에 액세스할 수 있습니다. 개인 멤버는 액세스할 수 없지만 동일한 패키지로 인해 다른 모든 멤버에 액세스할 수 있습니다. TestC.java


package com.journaldev.access.child;

import com.journaldev.access.TestB;

public class TestC {

	public static void main(String[] args) {
		new TestB().methodPublic();
	}

}

TestB 클래스는 public이기 때문에 접근이 가능합니다. TestC 클래스가 동일한 패키지나 TestB의 하위 클래스에 있지 않기 때문에 TestB 클래스의 공용 멤버만 액세스할 수 있습니다. TestE.java


package com.journaldev.util;

import com.journaldev.access.TestB;

public class TestE extends TestB {

	public static void main(String[] args) {
		new TestB().methodPublic();
		new TestB().methodProtected(); // compile time error

		// works, accessing super class protected method using subclass
		new TestE().methodProtected();

	}

}

TestE 클래스는 TestB의 하위 클래스이므로 자식 클래스 TestE를 통해 TestB 보호 멤버에 액세스할 수 있습니다. 슈퍼클래스의 보호된 메서드에 직접 액세스하려고 하면 컴파일 타임 오류가 발생합니다. 이것이 Java 액세스 수정자에 대한 전부이며 이해하기 쉽습니다. 기본 및 보호된 액세스와 혼동하지 마십시오. 쉽게 기억할 수 있는 방법은 기본 액세스가 하위 클래스에서 보호 및 보호 멤버에 액세스할 수 있는 것보다 더 제한적이라는 것입니다. 최근에 Java 액세스 수정자를 자세히 설명하는 비디오를 만들었습니다. 아래 YouTube에서 볼 수 있습니다. https://www.youtube.com/watch?v=QKjnbC3UBtY