개발공부

JAVA쪼렙탈출기: 접근제한자

Yuniverse. 2023. 6. 16. 09:59
Python과 SQL만 써본 주니어 분석가. '개발공부를 해보고 싶다', '개발도 공부하긴 해야하는데...'는 말만 한지 어연 1년이 넘어가는 중, 이대로는 안되겠다 싶어 냅다 JAVA 수업 수강에 카드를 긁었다. 쪼렙 중의 쪼렙이 JAVA를 배워나가는 여정을 "JAVA 쪼렙 탈출기"라는 시리즈로 남길 예정이다.

 

접근 제한자

다른 class에서 class 또는 class 멤버의 접근을 허용할지를 결정한다.

  • public : 모든 class에서 사용 가능
  • protected : 같은 package, 상속받은 class에서 접근 가능
  • default : 같은 package 내에서만 접근 가능
  • private : class 안에서만 접근 가능. 외부에서는 접근 불가
  class 내부 같은 package 하위 class 다른 package
public o o o o
protected o o o x
default o o x x
private o x x x

 

package ch07_acessA;

public class First {
	
	public int dataA;
	protected int dataB;
	int dataC;
	private int dataD;
	
	void defaultMethod() {}
	public void publicMethod() {}

}
package ch07_acessA;

public class AreaOne {
	
	public static void main(String[] args) {
		
		First firstA = new First();
		firstA.dataA = 1;
		firstA.dataB = 2;
		firstA.dataC = 3;
		// firstA.dataD = 4; Error (private라서)
		firstA.defaultMethod();
		firstA.publicMethod();
		
		
	}
	
}

First 클래스에서 dataD를 private로 설정하였기 때문에 AreaOne 클래스에서 dataD에 값을 지정할 수 없다.

 

package ch07_acessB;

import ch07_acessA.First;

public class AreaTwo {
	
	public static void main(String[] args) {
		
		First firstB = new First(); // 다른 package에 있는 class를 쓰기 위해선 import를 해야한다.
		firstB.dataA = 1;
		// firstB.dataB = 2; Error 
		// firstB.dataC = 3; Error 
		// firstB.dataD = 4; Error 
		// firstB.defaultMethod(); Error 
		firstB.publicMethod();
		
	}

}

별개의 패키지를 만들었을 경우엔 public 접근 연산자가 붙은 변수만 사용 가능하다.

 

 

만약에 First 클래스를 아래와 같이 작성했다면 어떻게 될까?

package ch07_acessA;

class First {
	
	public int dataA;
	protected int dataB;
	int dataC;
	private int dataD;
	
	void defaultMethod() {}
	public void publicMethod() {}

}

그 때는 ch07_acessB 패키지에서 import 자체가 불가하다. Second 클래스 접근연산자가 default로 잡혀 있어서 아예 다른 패키지에서 사용이 안 되기 때문이다.