자바 접근 제어자

Java 액세스 수정자는 Java에서 액세스 제어를 제공하는 데 사용됩니다. Java는 세 개의 키워드인 private, protected, 및 public을 통해 액세스 제어를 제공합니다. 이러한 액세스 수정자를 항상 사용할 필요는 없으며, “default access”, “package-private” 또는 “no modifier”와 같은 다른 옵션도 있습니다.

Java 액세스 수정자

Java 액세스 수정자를 클래스 및 클래스 변수 및 메서드와 함께 사용할 수 있습니다. Java 클래스에는 “public” 또는 “default” 액세스 수정자만 사용할 수 있습니다.

  1. 클래스가 “public”이면 어디서든 액세스할 수 있으며, 다른 패키지 등의 다른 클래스에서 액세스할 수 있습니다.
  2. 소스 파일에는 하나의 “public” 클래스만 있어야 하며 파일 이름은 public 클래스 이름과 동일해야 합니다.
  3. 클래스가 “default access”이면 동일한 패키지의 다른 클래스에서만 액세스할 수 있습니다.

클래스 멤버와 함께 사용하는 Java 액세스 수정자

우리는 클래스 멤버 변수와 메소드에 대해 네 가지 액세스 한정자를 가질 수 있습니다. 그러나 멤버 액세스 한정자 규칙은 클래스 레벨 액세스 규칙이 적용된 후에 적용됩니다. 예를 들어, 클래스가 기본 액세스를 가지고 있다면 다른 패키지에서 볼 수 없으므로 클래스의 메소드와 변수도 보이지 않을 것입니다. 각각을 개별적으로 살펴보고 간단한 프로그램으로 자바 액세스 한정자 사용법을 보여줄 것입니다.

자바 액세스 한정자 – public 키워드

클래스 멤버가 “public”이라면 어디서든 접근할 수 있습니다. 멤버 변수 또는 메소드는 전역적으로 접근됩니다. 이는 클래스 멤버에 대한 액세스를 제공하는 가장 간단한 방법입니다. 그러나 클래스 변수에 이 키워드를 사용할 때 값을 변경할 수 있는 누구나 될 수 있으므로 주의해야 합니다. 일반적으로 클래스 변수는 비공개로 유지되고 getter-setter 메소드가 제공되어 작업합니다.

자바 액세스 한정자 – private 키워드

클래스 멤버가 “private”이면 같은 클래스 내에서만 접근할 수 있습니다. 이것은 가장 제한적인 접근이며, 클래스 멤버는 외부 세계에 보이지 않을 것입니다. 보통, 클래스 변수를 private으로 유지하고 클래스 내에서만 사용될 예정인 메소드들을 private으로 유지합니다.

자바 접근 제어자 – protected 키워드

클래스 멤버가 “protected”이면 같은 패키지 내의 클래스와 하위 클래스에서만 접근할 수 있습니다. 이 제어자는 private보다는 제한적이지 않지만 public 접근보다는 더 제한적입니다. 보통, 이 키워드를 사용하여 클래스 변수가 하위 클래스에서만 접근 가능하도록 합니다.

자바 접근 제어자 – 기본 접근

만약 클래스 멤버에 특정한 접근 제한자가 지정되지 않았다면, 그것은 기본 접근으로 처리됩니다. 이 접근 규칙은 클래스와 유사하며, 기본 접근을 갖는 클래스 멤버는 동일한 패키지 내의 클래스에만 접근할 수 있습니다. 이 접근은 public 및 protected보다는 제한적이지만 private보다는 덜 제한적입니다. (최소 접근 가능) private < default < protected < public (최대 접근 가능) 아래 표는 동일한 패키지 내의 다른 클래스 또는 다른 패키지 및 하위 클래스와 관련하여 위의 접근 제한자를 요약합니다. 자바 접근 제한자가 작동하는 간단한 클래스를 작성해 보겠습니다. TestA.java

package com.journaldev.access;

class TestA {

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

TestA 클래스가 기본 접근을 갖고 있다는 점에 유의하십시오. private 클래스 메서드는 동일한 클래스의 다른 부분에서 모두 접근할 수 있습니다. 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 클래스와 동일한 패키지에 있으므로 해당 클래스 멤버에 액세스할 수 있습니다. private 멤버는 접근할 수 없지만 동일한 패키지 때문에 다른 모든 멤버에 액세스할 수 있습니다. 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 클래스의 public 멤버만 접근할 수 있습니다. 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

		// 하위 클래스를 통해 슈퍼 클래스 보호된 메서드에 액세스하는 것이 작동함
		new TestE().methodProtected();

	}

}

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

Source:
https://www.digitalocean.com/community/tutorials/java-access-modifiers