"접근제어자"의 두 판 사이의 차이
(→프로텍티드) |
|||
29번째 줄: | 29번째 줄: | ||
=== 프로텍티드 === | === 프로텍티드 === | ||
− | [[프로텍티드]](protected)는 같은 패키지에 있는 객체와 상속관계의 객체들만 허용한다. 클래스 선언자체가 불가능하며 같은 패키지에 속해있는 클래스에서 생성자와 메소드, 필드(객체)만 호출 할 수 있고, 다른 패키지에 있는 생성자, 메소드, 필드는 호출하지 못하지만 상속관계에 있는 클래스라면 예외로 호출이 가능하다.<ref name="class></ref> | + | [[프로텍티드]](protected)는 같은 패키지에 있는 객체와 상속관계의 객체들만 허용한다. 클래스 선언자체가 불가능하며 같은 패키지에 속해있는 클래스에서 생성자와 메소드, 필드(객체)만 호출 할 수 있고, 다른 패키지에 있는 생성자, 메소드, 필드는 호출하지 못하지만 상속관계에 있는 클래스라면 예외로 호출이 가능하다.<ref name="class></ref> 한마디로 상속받은 서브클래스들에게는 public으로 작용하고 아닌 서브클래스들에게는 private처럼 작동한다. 보통 |
=== 디폴트(default) === | === 디폴트(default) === |
2020년 8월 13일 (목) 09:31 판
접근제어자란 자바 클래스에서 멤버들이 노출되는 것을 막기 위해 접근을 제한해주는 것을 말한다.[1]
개요
접근제어자는 객체지향언어(Object-oriented Programming)의 3대요소 중 하나로 말 그대로 접근을 제어하기 위해 사용하는 것이다. 모두가 접근 가능한 변수나 메소드는 제약 조건 없이 쉽게 데이터가 변경이 가능하기 때문에 데이터를 안정하게 변경하기 위해 접근을 할 수 있는 대상을 지정해 줄 때 사용한다.[2]
특징
퍼블릭
퍼블릭(public)은 모든 접근을 허용한다. 외부의 모든 클래스 및 생성자, 메소드, 필드로부터 접근을 완전히 허용하고, 다른 개발자들에게 라이브러리처럼 공유하려고 할때 사용한다.[3] 아래의 예제에서 멤버변수 a와 method_public 메소드는 모든 클래스에서 사용할 수 있는 경우이다. 추가적으로 생성자는 반드시 public으로 선언해 주어야 하는데 public으로 선언해야만 클래스 외부에서 제한없이 호출할 수 있기 때문이다.
class Public1 { public int a; public void method_public() { i=100; } }
프라이빗
프라이빗(private)은 현재 객체 내에서만 접근을 허용한다. 무조건 클래스 내부에서만 사용이 가능하기 때문에 동일 패키지에서는 private을 제외한 전부 접근 가능하다.[3] 멤버변수나 메소드 앞에 private을 붙이는 이유는 이후에 변경할 가능성이 있기 때문이다. private 멤버변수나 메소드는 나중에 내용을 변경해도 다른 클래스들에게는 아무 영향이 없기 때문에 편리하다. 아래의 예제는 멤버변수 b와 method_private는 내부에서 정의된 method_private 메소드에서만 사용이 가능하다.
class Private1 { private int b; private void method_private() { d=200; } }
프로텍티드
프로텍티드(protected)는 같은 패키지에 있는 객체와 상속관계의 객체들만 허용한다. 클래스 선언자체가 불가능하며 같은 패키지에 속해있는 클래스에서 생성자와 메소드, 필드(객체)만 호출 할 수 있고, 다른 패키지에 있는 생성자, 메소드, 필드는 호출하지 못하지만 상속관계에 있는 클래스라면 예외로 호출이 가능하다.[3] 한마디로 상속받은 서브클래스들에게는 public으로 작용하고 아닌 서브클래스들에게는 private처럼 작동한다. 보통
디폴트(default)
디폴트(default)는 같은 패키지(폴더)에 있는 객체들만 접근을 허용한다. 'friendly'라고도 부르며 다른 접근제어자를 선언하지 않았다면 기본적으로 선언되는 제어자이다. 다른 패키와의 클래스 선언과 생성자/메소드/필드의 호출이 불가능해지며 동일 패키지안에서는 모든 것이 허용된다.[3]
접근 여부[4] 종류 동일 클래스 하위 클래스 동일 패키지 외부 패키지(클래스) private O X X X (default) O X O X protected O O O X public O O O O
각주
- ↑ Gyrfalcon, <JAVA 접근 제한자 (public, private, protected, defalult)>, <<개인 블로그>>, 2014-02-27
- ↑ KOU, <접근제한자, 접근제어자...>, <<개인 블로그>>, 2020-06-04
- ↑ 3.0 3.1 3.2 3.3 AraGrooveit, <자바(Java) 접근 제한자 private/ protected/ public / default>, <<개인 블로그>>, 2015-11-10
- ↑ 규밍, <[java 접근제한자 public, private, protected, default]>, <<개인 블로그>>, 2019-05-21
참고자료
- Gyrfalcon, <JAVA 접근 제한자 (public, private, protected, defalult)>, <<개인 블로그>>, 2014-02-27
- 규밍, <[java 접근제한자 public, private, protected, default]>, <<개인 블로그>>, 2019-05-21
- KOU, <접근제한자, 접근제어자...>, <<개인 블로그>>, 2020-06-04
- AraGrooveit, <자바(Java) 접근 제한자 private/ protected/ public / default>, <<개인 블로그>>, 2015-11-10
같이 보기