접근 제어자의 종류
- private : 같은 클래스 내에서만 접근이 가능하다.
- default(nothing) : 같은 패키지 내에서만 접근이 가능하다. 접근 제어자를 선언하지 않은 경우도 해당된다.
- protected : 같은 패키지 내에서, 그리고 다른 패키지의 자손 클래스에서 접근이 가능하다.
- public : 접근 제한이 없다.
예제코드 pkg.ModifierTest (pkg/ModifierTest.java)
package pkg;
public class ModifierTest {
private void messageInside() {
System.out.println("This is private modifier");
}
public void messageOutside() {
System.out.println("This is public modifier");
messageInside();
}
protected void messageProtected() {
System.out.println("This is protected modifier");
}
void messagePackagePrivate() {
System.out.println("This is package private modifier");
}
}
messagePacakgePrivate()
메소드의 경우, 접근 제어자가 선언되지 않아 package private(default)로 선언된다.
예제코드 Main.java
import pkg.ModifierTest;
class Child extends ModifierTest {
void callParentProtected() {
System.out.println("call my parent's protected method");
// super: 상속받은 부모 클래스를 지칭하는 키워드
super.messageProtected(); // protected는 다른 패키지의 자손 클래스에서 접근 가능
// super.messageInside(); // Error: 해당 메소드는 private 이므로 같은 패키지 내에서만 접근 가능
}
}
public class Main {
public static void main(String[] args) {
ModifierTest modifierTest = new ModifierTest();
modifierTest.messageOutside();
// → This is public modifier
// → This is private modifier 출력됨
// Error: 세 메소드는 pkg.ModifierTest 내부에서만 접근 가능 (protected 예외)
// modifierTest.messageInside();
// modifierTest.messageProtected();
// modifierTest.messagePackagePrivate();
Child child = new Child();
child.callParentProtected();
// → call my parent's protected method
// → This is protected modifier 출력됨: Child라는 클래스가 pkg.ModifierTest를 상속받았으므로
}
}
super
: 상속받은 부모 클래스를 지칭하는 키워드- Java는 패키지 내의 클래스를 인식할 때 단순히 ModifierTest (클래스 이름)가 아닌 pkg.ModifierTest (패키지 이름도 참조) 으로 인식한다.
접근 제어자를 사용하는 이유는?
객체지향 프로그래밍은 객체들 간의 상호작용을 코드로 표현한다. 이런 특징에 의해, 사용자는 객체들 간의 관계에 따라서 객체마다 접근할 수 있는 정보와 아닌 정보의 권한을 구분할 필요가 생긴다. 클래스 내부에 선언된 데이터의 부적절한 사용으로부터 보호하기 위한 코드 작성 방식을 캡슐화(encapsulation)라고 하며, 접근 제어자는 캡슐화를 달성하기 위한 도구로 사용한다.
'Java' 카테고리의 다른 글
자바 - 2차원 배열 정렬 (오름차순, 내림차순, 다중 조건) (0) | 2023.03.15 |
---|---|
자바 - 날짜와 시간 (0) | 2023.02.20 |
자바 - 객체지향퀴즈 (0) | 2023.02.20 |
자바 - 인터페이스 (0) | 2023.02.20 |
자바 - 추상 클래스 (0) | 2023.02.20 |
댓글