코드일기장

[Java] 접근 제어자 (access modifier) 본문

Java/OOP

[Java] 접근 제어자 (access modifier)

won_hyeok2 2022. 2. 20. 22:53

 

 

 

접근 제어자는 맴버 또는 클래스에 사용된다.

접근 제어자의 역할은 해당하는 맴버 또는 클래스를 외부에서 접근하지 못하도록 제한을 해준다.

 

접근 제어자는 4가지이다.

 

 

private

같은 클래스 내에서만 접근 가능하다.

(default)

같은 패키지 내에서만 접근 가능하다.

(참고로 default는 접근제어자를 따로 안 적는다. 접근제어자의 기본값이다.)

protected

같은 패키지와 다른 패키지의 자손 클래스에서 접근 가능하다.

public

접근 제한이 없다.

 

 

 

접근제어자 범위를 나열해보면
public> protected>(default)>private
왼쪽이 범위가 넓은 쪽이다.

 

 

 

제어자 같은 클래스 같은 패키지 다른 패키지의 자손클래스 전체
public O O O O
protected O O O  
(default) O O    
private O      

 

 

class는 접근제어자를 public과 (default)만 사용할 수 있다.

 

맴버는 4가지 모두 사용할 수 있다.

 

 

 

class- public, (default)

맴버- public, protected, (default), private

사용할 수 있는 접근제어자

 

 

 

package weon;

public class MyParentTest {

	public static void main(String[] args) {
		MyParent mp=new MyParent();
		mp.printMembers();
		
		//System.out.println(mp.prv_num);  error 같은 클래스가 아님
		System.out.println(mp.dft_num);
		System.out.println(mp.prt_num);
		System.out.println(mp.pub_num);
	}

}

class MyParent{
	private int prv_num=5; 	//같은 클래스
			int dft_num=10; 	//같은 패키지
	protected int prt_num=150;	//같은 패키지+다른 패키지 자손클래스
	public int pub_num=2000; 	//접근제한 x
	
	public void printMembers() {
		System.out.println(prv_num);
		System.out.println(dft_num);
		System.out.println(prt_num);
		System.out.println(pub_num);
	}
}
5
10
150
2000
10
150
2000

 

 

 

 

 

 

 

package weon;

public class MyParent {
	private int prv_num1 = 5;
	int dft_num1 = 10;
	protected int prt_num1 = 150;
	public int pub_num1 = 2000;

}
package weon2;

public class My {

	public static void main(String[] args) {
		MyTest mt = new MyTest();
		mt.callMembers();
		// System.out.println(mt.prv_num1); //error 같은 클래스 아님
		// System.out.println(mt.dft_num1); //error 같은 패키지 아님
		// System.out.println(mt.prt_num1); //error 다른 패키지의 자손 클래스가 아님
		System.out.println(mt.pub_num1);
	}

}

class MyTest extends weon.MyParent {
	void callMembers() {
		// System.out.println(prv_num1); //error 같은 클래스 아님
		// System.out.println(dft_num1); //error 같은 패키지 아님
		System.out.println(prt_num1);
		System.out.println(pub_num1);
	}
}
150
2000
2000

 

 

 

 

정리하면,

 

private는 하나의 클래스 파일에서만 접근 가능

(default)는 하나의 폴더에서 접근 가능

protected는 자신이 속한 폴더 외 다른 폴더의 자손 클래스까지

public은 하나의 프로젝트에서 접근 가능

'Java > OOP' 카테고리의 다른 글

[Java] 참조변수의 형변환  (0) 2022.03.15
[Java] 다형성  (0) 2022.03.04
[Java] static, final, abstract의 정의  (0) 2022.02.18
[Java] 패키지, import, static import  (0) 2022.02.05
[Java] super, super() (객체지향 2-3)  (0) 2022.01.30
Comments