접근지정자(접근제어자)권한
- 접근지정자는 클래스, 멤버변수, 멤버메서드 앞에 사용됨.
- 외부로부터 접근을 제어한다는 의미를 가지고 있음.
- 접근 지정자가 사용될 수 있는 곳 : 클래스, 멤버변수, 멤버메서드, 생성자
- 이들 접근지정자 중 protected, private 접근지정자는 클래스 앞에 사용을 못함.
단, Inner Class 앞에는 사용 가능.
1. private
- 동일한 클래스에서만 사용이 가능.
- 외부에서 인스턴스 변수를 바로 접근이 가능하게 제어를 하면 잘못된 데이터를 저장할 수 있는 문제 발생.
- 따라서 직접 접근을 못하게 제어하고 메서드(setter() / getter())를 사용하여 접근.
2. defualt
- 동일한 패키지에서만 접근이 가능. 생략 가능.
- 같은 클래스의 멤버, 같은 패키지 안의 다른 클래스의 멤버까지만 접근이 가능.
- 다른 패키지의 상속 관계에 있는 클래스라도 접근 불가.
3. protected
- 같은 클래스의 멤버, 같은 패키지 안의 다른 클래스의 멤버, 다른 패키지의 상속 관계에 있는 멤버까지 접근 가능.
4. public
- 모든 클래스에서 접근이 가능함.
- 같은 클래스의 멤버, 같은 패키지 안의 다른 클래스의 멤버,
다른 패키지의 상속 관계에 있는 멤버, 다른 패키지의 클래스의 멤버까지 접근 가능.
※ 접근 범위(scope) : public > protected > default > private
package accessOne;
public class Super {
// 멤버변수
private int num1 = 10; // 접근지정자 : private
int num2 = 20; // 접근지정자 : default
protected int num3 = 30; // 접근지정자 : protected
public int num4 = 40; // 접근지정자 : public
}
package accessTwo;
import accessOne.Super; // 상속 받기
public class Sub extends Super {
public static void main(String[] args) {
Sub sub = new Sub();
// 해당 클래스에서만 접근이 가능_private 접근자
// System.out.println("num1 : " + sub.num1); ==> error
// 해당 패키지 내에서만 접근이 가능_defualt 접근자
// 상속 관계에 있는 다른 패키지라도 접근이 불가능
// System.out.println("num2 : " + sub.num2); ==> error
// 패키지가 다르더라도 상속관계에 있으면 접근 가능_protected 접근자
System.out.println("num3 : " + sub.num3);
// 모든 클래스에서 접근이 가능_public 접근자
System.out.println("num4 : " + sub.num4);
}
}
결과
num3 : 30
num4 : 40
만일 저 에러처리한 주석을 풀어준다면, 아래와 같은 에러코드가 뜬다.
// 해당 클래스에서만 접근이 가능_private 접근자
System.out.println("num1 : " + sub.num1);
// 해당 패키지 내에서만 접근이 가능_defualt 접근자
// 상속 관계에 있는 다른 패키지라도 접근이 불가능
System.out.println("num2 : " + sub.num2);
이렇게 풀어준다면, 아래와 같은 에러발생
Exception in thread "main" java.lang.Error: Unresolved compilation problems:
The field Super.num1 is not visible
The field Super.num2 is not visible
at accessTwo.Sub.main(Sub.java:12)
'Back-End > Java' 카테고리의 다른 글
[Java] 예외(Exception) 처리 (1) | 2021.08.18 |
---|---|
[Java] final 지정자 (0) | 2021.08.18 |
[Java] 자바 빈(Java Bean), API, 패키지(package) (0) | 2021.08.18 |
[Java] 다형성(polymorphism) (0) | 2021.08.18 |
[Java] 인터페이스(Interface) (0) | 2021.08.17 |
댓글