본문 바로가기
JAVA

13. 접근지정자

by 김마리님 2020. 4. 6.

접근지정자는 클래스나 패키지에서 다른 클래스나 패키지로 접근해도 되는지 여부를 지시하는 지시어이다.

접근지정자는 다음과 같은 종류가 있다.

  • public
  • default
  • private
  • protected

 

1. public

패키지에 상관 없이 어떤 클래스에서도 사용이 허용된다.

ex)

package a;

public class PublicData {
		public int num=10;
}
package b;

import a.PublicData;

public class App{
	public static void main(String[] args) {
		PublicData p=new PublicData();
		System.out.println("public : "+p.num);

패키지가 a와 b 서로 다름에도 불구하고 서로 참조가 가능하다. 

 

 

2. default (딱히 접근자를 지정하지 않고 공백으로 두기도 함)

default 접근 지정자를 가지고 있을 경우 한 패키지 내에서만 접근이 가능하다.

package a;

public class DefaultData {
	int num=10;

}
package b;

import a.DefaultData;

public class App extends ProtectedData{
	public static void main(String[] args) {
		
		DefaultData d= new DefaultData();
		System.out.println("default : "+d.num);

다음과 같이 다른 패키지에서는 접근할 수가 없다.

 

 

3. private 

private 접근 지정자는 같은 클래스 내에서만 접근이 가능하다.

package a;

import lombok.Data;

@Data
public class PrivateData {
	int num=10;
}
package b;

import a.PrivateData;

public class App extends ProtectedData{
		
		PrivateData pd=new PrivateData();
		System.out.println("private : "+pd.num);

다른 패키지일뿐만 아니라 클래스도 다르기 때문에 오류가 난다. (변수의 은닉화에 사용하던 접근 지정자 맞음)

그렇기 때문에 이를 해결하기 위해서 변수를 getter setter 매서드를 통해 간접 접근한다.

		PrivateData pd=new PrivateData();
		System.out.println(pd.getNum());

 

4. protected

protected는 같은 패키지 내에서만 접근을 허용한다.

package a;

public class ProtectedData {
	protected int num=20;
}
package a;

public class App {
	public static void main(String[] args) {
		ProtectedData p=new ProtectedData();
		System.out.println("protedcted : "+p.num);
	}
}

 

그러나 다른 클래스 내에서는 접근할수가 없다.

package b;

import a.ProtectedData;

public class App{
	public static void main(String[] args) {
		ProtectedData pt=new ProtectedData();
		System.out.println(pt.num);
	}
}

protected 접근 지정자를 가지고 있는 클래스나 변수를 타 패키지에서 접근하려고 하면 그 클래서를 상속받아야 한다.

package b;

import a.ProtectedData;

public class App extends ProtectedData{
	public static void main(String[] args) {
		
		App pt=new App();
		System.out.println(pt.num);

이 때, 변수는 현재 클래스명으로 설정해야한다.

 

반응형

'JAVA' 카테고리의 다른 글

14. Json  (0) 2020.04.06
13. 입출력  (0) 2020.04.06
JAVA 실습 8. 객체 지향, 제네릭과 컬렉션을 이용한 커피숍 만들기.  (0) 2020.04.03
Warpper 클래스와 제네릭 기초  (0) 2020.04.03
12. 컴포지션  (0) 2020.04.03