상세 컨텐츠

본문 제목

접근 제어자 (modifier)

Coding (코딩)/Java (자바)

by 매일매일 배우는 개발자 2020. 9. 16. 12:13

본문

728x90

접근제어자란??

 

클래스 & 변수 & 메소드의 접근을 다른곳에 허용 및 사용을 제한하기 위해서 사용하며, 주로 앞부분에 선언되어 사용한다.

 

  public protected default(기본값) private
같은 클래스 이용가능 이용가능
이용가능
허용
동일한 패키지 이용가능 이용가능 이용가능 이용 불 가능
다른 패키지 (상속 X) 이용가능 이용가능 이용 불 가능 이용 불 가능
다른 패키지 (상속 O) 이용가능 이용 불 가능 이용 불 가능 이용 불 가능

 

범위 순은 public > protected > default > private 이며 따로 지정하지 않았을경우 default 값이 기본으로 지정된다.

 

public : 다른 패키지까지 범위를 허용하며, 상속을 할수있다 (단 import를 해야 사용할 수 있다)

protected : 다른 패키지 및 서브 클래스까지 범위를 허용한다. 단, 상속받으면 사용이 가능하다

default : 같은 패키지내에서만 사용이 가능하다. 만약 제어자를 따로 설정하진 않았다면 기본값으로 default를 가진다

private : 오직 클래스 내부에서만 사용이 가능하다.

 

사용방법

클래스 & 변수 & 메소드 앞에 주로 선언된다.

클래스의 경우 public or default만 쓸수있다.




 

* 간단한 코드를 통해 이해해보자

public

package tistory; // package name = tistroy

public class Test {
	
		public int a; // 맴버변수 a 선언
		public int b; // 맴버변수 b 선언
		
		public int Car (int a, int b) { //파라미터 a와 b를 선언
		
			this.a = a;
			this.b = b;
			
			return a*b; // 리턴값은 a*b.
	}
	
}
		
---------------------------------------------------------------------------------		
		
		
package otherPackage; // package name 은 otherPackage

import tistory.Test; // tistory 패키지 안에 Test 클레스를 가져왔다.

public class Result {

	public static void main(String[] args) {
		
		Test t1 = new Test();
		
		
		
		
		System.out.println(t1.Car(1, 2));
		
	}
	
}

// 여기의 결과값은 2이다.
		
		
	

	

		
		
		
	

 

 

 public의 경우 같은 프로젝트 안에 있다면 어떠한 패키지에 있던 사용이 가능하다.

 


protected

package tistory; // tistory 패키지

public class Test {
	
		int a; // 맴버변수 a 를 선언
		int b; // 맴버변수 b 를 선언
		
		protected int Car (int a, int b) {
		
			this.a = a; // 매개변수 a를 설정
			this.b = b; // 매개변수 b를 설정
			
			return a*b;
	}
	
}
		
		
--------------------------------------------------------------------------------------------

package otherPackage;  // otherPackage 패키지

import tistory.Test;

public class Result{

	public static void main(String[] args) {
		
		Test t1 = new Test();
		
		
		
		
		System.out.println(t1.Car(1, 2)); <-- Car 메소드가 protected 접근제한자 이므로 오류가 뜸
		
	}
	
}

		
		
	

		
		
	

 

해결방안

Car 메소드가 다른패키지 안에 있기때문에 Car 메소드를 protected 에서 public으로 바꾸면 해결이 된다.

 


private

 

package otherPackage;

public class Person {
	private String name = "AAA"; // private 접근 제한자
	private int age = 10;  // private 접근 제한자
			
}



--------------------------------------------------------------------------

package otherPackage;

public class Test1 {

	public static void main(String[] args) {
		
		Person p1 = new Person();
		
		System.out.println("나의 이름은 : " + p1.name);
		System.out.println("나의 나이는 : " + p1.age);
		

	}

}

// 이 main method의 실행결과는 오류가 뜨는데 private는 같은 클래스 내부에서만 사용할수 있다.

 

해결방안

Person class내부의 private 접근제한자를 public or protected 로 바꾸면 해결된다.

 

 

 

728x90

관련글 더보기