java접근제어자의 종류와 특징

suzi_911·2020년 12월 13일
0
post-thumbnail

접근 제어자는 클래스나 멤버들을 다른 클래스에서 접근해도 되는지의 여부를 선언하는 지시어입니다.

이러한 접근제어자를 사용하는 이유가 뭘까요?

은행으로 빗대어 말하자면 은행원들은 은행에 오는 모든 손님들을 맞이하지만 은행 안에 있는 금고 같은 경우는 관계자만 사용할 수 있도록 되어있습니다. 만약 금고를 아무나 사용할 수 있다면 정말 큰일이 일어나겠죠??

이처럼 사용자가 객체에서 사용하는 변수나 메소드를 건드리면 개발자의 의도와 다른 오작동이 생길수 있습니다. 접근제어자는 객체의 로직을 보호하기 위해서 외부의 접근을 허용하거나 차단하는 보안목적으로 사용됩니다. 다른이유로는 사용자들이 객체사용에 집중할수록 돕기위함이 있습니다.

자바는 다음과 같은 네가지 접근제어자를 제공합니다.

1. public
2. protected
3. defualt(생략가능)
4. private

public은 모든 패키지, 모든 클래스에서 접근이 가능합니다.

protected는 두가지 유형의 클래스에만 접근을 허용합니다.
첫번째. 같은 패키지의 모든 클래스에 접근허용.

두번째. 다른 패키지에 있어도 자식 클래스일 경우 접근허용.

다른 패키지에 있는 클래스가 어떻게 접근을 했을까요?
test.other패키지에 있는 클래스에서 test패키지의 클래스안에 있는 필드값에 접근이 가능한 
이유는 ChildClass가 SameClass를 상속(extends) 받은 자식 클래스이기 때문입니다.

default는 동일한 패키지 내에 있는 클래스만이 접근이 가능합니다.

접근제어자를 선언하지 않은 경우 자동적으로 default가 접근제어자가 됩니다. 
SamePackage의 필드값에 SameClass가 접근이 가능한 이유는 같은 test라는 패키지에있기 때문입니다.
default는 protected보다 접근범위가 더 적으며 상속을 받은 자식 클래스라도 접근이 불가합니다.

private는 오직 해당 멤버를 선언한 클래스에서만 접근가능합니다.

private는 접근제어자들 중 접근범위가 가장 작으면 같은 패키지내에서도해당 클래스에서만 접근이 가능합니다.

이제동안 공부한 내용을 간단하게 표로 나타내자면 이렇습니다.

접근범위가 큰순으로 나열하면 아래와 같습니다.
public -> protected -> default-> private

0개의 댓글