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으로 할 수도 있겠지만

접근제어자를 잘 사용한다면 외부의 접근으로부터 데이터를 보호하거나,

외부적으로 보여주기 싫은, 내부적으로만 사용되는 정보를 숨길 수 있다.

접근제어자를 활용하여 조금 더 괜찮은 코드를 작성해보자.