클래스 & 변수 & 메소드의 접근을 다른곳에 허용 및 사용을 제한하기 위해서 사용하며, 주로 앞부분에 선언되어 사용한다.
public | protected | default(기본값) | private | |
같은 클래스 | 이용가능 | 이용가능 |
이용가능 |
허용 |
동일한 패키지 | 이용가능 | 이용가능 | 이용가능 | 이용 불 가능 |
다른 패키지 (상속 X) | 이용가능 | 이용가능 | 이용 불 가능 | 이용 불 가능 |
다른 패키지 (상속 O) | 이용가능 | 이용 불 가능 | 이용 불 가능 | 이용 불 가능 |
범위 순은 public > protected > default > private 이며 따로 지정하지 않았을경우 default 값이 기본으로 지정된다.
public : 다른 패키지까지 범위를 허용하며, 상속을 할수있다 (단 import를 해야 사용할 수 있다)
protected : 다른 패키지 및 서브 클래스까지 범위를 허용한다. 단, 상속받으면 사용이 가능하다
default : 같은 패키지내에서만 사용이 가능하다. 만약 제어자를 따로 설정하진 않았다면 기본값으로 default를 가진다
private : 오직 클래스 내부에서만 사용이 가능하다.
클래스 & 변수 & 메소드 앞에 주로 선언된다.
클래스의 경우 public or default만 쓸수있다.
* 간단한 코드를 통해 이해해보자
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의 경우 같은 프로젝트 안에 있다면 어떠한 패키지에 있던 사용이 가능하다.
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으로 바꾸면 해결이 된다.
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 로 바꾸면 해결된다.
자바 메모리 구조 (Java Memory structure)- Stack Memory (0) | 2021.03.29 |
---|---|
업캐스팅(Up Casting) / 다운캐스팅 (Down Casting) (0) | 2020.10.15 |
오버로딩 (Overloading) (0) | 2020.09.15 |
생성자 (Constructor) (0) | 2020.09.14 |
오버라이딩 - Overriding (0) | 2020.09.11 |