본문 바로가기
JAVA/Java

[Java] 자바 접근제어자 (Access Modifier) Public, private, default, protected 사용법

[1] 들어가며

 

자바에는 Public, Private, Default, Protected와 같이 4가지의 접근제어자가 있습니다.

접근제어자는 자바의 Class나 함수 혹은 변수앞에 붙어 이들에 대한 접근 권한을 설정합니다.

예를들어 함수나 변수의 선언부 앞에 private가 붙은 변수나 함수는 자신이 속한 같은 클래스 내에서만 접근이 가능합니다.

자세한 내용은 아래에서 다루어 보도록 하겠습니다.

 

 

 

 

 

[2] Public

 

첫번째로 살펴볼 접근제어자는 Public입니다.

가장 접근권한이 낮아서 어디서든 접근이 가능한 접근제어자라고 보시면됩니다.

public으로 설정된 메소드(함수)나 변수는 다른 어떤 class에서도 접근이 가능합니다.

아래 코드를 보시면 main2클래스 소속의 public static int num이라는 변수는 public이기 때문에

다른 클래스인 mainClass에서 자유롭게 가져다 사용할 수 있습니다. 

 

public class mainClass {

	public static void main(String[] args) {
		int num2 = main2.num;
	}
}



class main2 {
	public static int num = 1;
}

 

 

 

 

 

[3] protected

 

두번째로 살펴볼 접근제어자는 protected 입니다.

protected 는 public다음으로 접근권한이 낮으며 같은 package 소속의 class라면 어디서든지 자유롭게 사용이 가능하고

다른 패키지 소속의 클래스라 하더라도 상속만 받는다면 사용이 가능합니다.

아래의 소스코드를 보면 비록 서로 다른 패키지 이지만 상속을 받아 mainClass에서 int num1을 사용하고 있습니다.

만약 상속을 받는 것을 의미하는 extends test 부분을 지운다면 에러가 발생할 것입니다.

 

package test;

import test2.test;

public class mainClass extends test {

	public static void main(String[] args) {
		int result = test.num1;
	}

}

 

package test2;

public class test {
	protected static int num1 = 2;
}

 

 

 

 

 

[4] default

 

세번째로 살펴볼 접근제어자는 default 입니다.

함수나 메소드 앞에 아무것도 붙이지 않으면 접근제어자 default로 설정된 것입니다.

default는 protected 다음으로 접근권한이 낮으며 같은 package 소속의 class라면 어디서든지 자유롭게 사용이 가능합니다.

아래에서 보시는바와 같이 main2클래스 소속의 int num을 같은 패키지 소속의 mainClass에서 가져다 사용하고 있습니다.

만약 main2 클래스가 다른패키지에 있었다면 mainClass에서 int num변수를 사용할 수 없는 것은 당연합니다.

 

public class mainClass {

	public static void main(String[] args) {
		int num2 = main2.num;
	}
}



class main2 {
	static int num = 1;
}

 

 

 

 

 

[5] private

 

마지막으로 살펴볼 접근제어자는 private입니다.

가장 접근하기 어려운 접근제어자인 private는 오직 자기 자신이 속한 클래스에서만 사용이 가능합니다.

대표적으로 dto나 VO에서 많이 사용합니다.

 

 

 

 

 

댓글