Java는 클래스들로 이루어져 있으며 클래스는 필드, 메서드 등 멤버들을 가지고 있다.
이렇게 클래스에서 연관 있는 멤버들을 묶어서 가지고 있는 작업을 캡슐화(Encapsulation)라고 한다.
캡슐화의 특징 중 하나는 보안과 관련된 정보 은닉이다. 클래스의 멤버들 중 외부로 노출되어도 되는 것도 있지만 외부로 노출해서는 안 되는 것들도 존재할 수도 있다.
예를 들어 사람의 정보를 가진 클래스가 존재할 경우 이름이나 나이 같은 것들은 외부에 노출되어도 괜찮지만 주민등록번호 같은 민감한 정보는 외부에 노출되면 안 된다.
따라서 클래스 내의 멤버에 접근할 경우 범위를 제한해 줄 수 있어야 한다.
이를 가능하게 해주는 친구가 바로 접근 제한자이다.
Java에서는 public, protected, default, private 총 4가지의 접근 제한자가 존재한다. 이들에 대해서 알아보도록 하자.
Public
public은 접근 범위가 가장 큰 접근 제한자로 클래스, 패키지에 상관없이 무조건 접근이 가능하다.
Protected
protected는 같은 패키지에서만 접근이 가능하며, 다른 패키지에서는 접근할 수 없다.
다만, 다른 패키지의 클래스를 상속받을 시에는 접근이 가능하다.
Default
default는 같은 패키지에서만 접근이 가능하며 다른 패키지에서는 접근할 수 없다.
default는 접근 제한자가 생략되어 있을 경우 적용된다. 이것은 약속이기 때문에 멤버나 클래스에 앞에 default 접근 제한자를 붙여서는 안 된다.
Private
private는 같은 클래스 내에서만 접근할 수 있다. 같은 패키지여도 접근이 불가능하다.
보통 private으로 해당 멤버에 직접적인 접근을 막으며, 접근하기 위해서 getter, setter 메서드를 사용한다.
그렇다면 각각의 접근 제한자는 어떠한 곳에 사용할 수 있을까?
클래스(Class)
클래스에는 기본적으로 public과 default만 사용이 가능하다.
하지만 클래스 내부에 선언하는 Inner Class인 경우 protected와 private 접근 제한자를 사용할 수 있다.
생성자(Construtor)
생성자에는 모든 접근 제한자를 사용할 수 있다.
멤버 변수(Member Variable)
멤버 변수도 마찬가지로 모든 접근 제한자를 사용할 수 있다.
멤버 메서드(Member Method)
멤버 메서드 역시 모든 접근 제한자를 사용할 수 있다.
지역 변수(Local Variable)
지역 변수에는 접근 제한자를 사용할 수 없다.
'IT 개인 공부 > Java' 카테고리의 다른 글
[Java] try-with-resources : 자원을 할당하는 방법 (0) | 2021.07.19 |
---|---|
[Java] BigInteger : 큰 수를 표현하는 방법 (0) | 2021.07.19 |
[Java] 향상된 for 문 : for-each (0) | 2021.07.16 |
[Java] 정규 표현식(Pattern, Matcher) (0) | 2021.07.16 |
[Java] 참조 유형(Strong, Soft, Weak, Phantom) (0) | 2021.07.16 |
댓글