본문 바로가기
Language/Java

[Java] 자바기초 - 접근 제한자

by J4J 2020. 12. 16.
300x250
반응형

안녕하세요. J4J입니다.

 

이번 포스팅은 접근 제한자에 대해 적어보는 시간을 가져보려고 합니다.

 

 

접근 제한자란?

 

자바에서 접근 제한자는 말 그대로 자바 내에 존재하는 클래스, 메서드, 변수 들에 대한 접근을 제한하는 역할을 수행합니다.

 

예를 들어 A클래스에 a라는 변수가 있고 B클래스에 b라는 변수가 있는데 a라는 변수를 A클래스에서만 접근할 수 있고 B클래스에서는 접근하지 못하게, 즉 사용하지 못하도록 해줍니다.

 

 

사용 이유

 

굳이 변수 등의 앞에 키워드를 추가하며 접근 제한자를 사용하는 이유는 바로 정보은닉의 목적 때문입니다.

 

코드를 작성하다보면 상대방에게 공개해도 되는 데이터 값과 공개하면 안 되는 데이터 값들이 명확하게 구분이 됩니다.

 

접근 제한자는 이처럼 구분이 필요한 데이터에 보안성을 높여주는 역할을 수행합니다.

 

 

접근 제한자 종류

 

접근 제한자는 private, default, protected, public 총 4가지가 있습니다.

 

그리고 각각 접근할 수 있는 범위는 아래 표와 같이 정해져 있습니다.

 

구분 클래스 내부 동일 패키지 자식 클래스 다른 패키지
private O X X X
default O O X X
protected O O O X
public O O O O

 

 

private

 

private가 선언된 변수 및 메서드 등에는 선언된 클래스 내부에서만 사용할 수 있습니다.

 

다른 말로는 클래스 내부를 제외하면 절대 사용할 수 없다는 의미입니다.

 

다음 코드를 확인해 봅시다.

private 예시 1

 

private 예시 2

 

 

Private1 클래스를 보시면 intVal과 output은 private로 접근 제한자가 설정되어 있습니다.

 

longVal 같은 경우는 접근 제한자가 아무것도 작성되어 있지 않은데 이런 경우가 default일 때입니다.

 

그리고 Private1에서는 intVal, longVal, output을 모두 사용을 해도 에러가 표출되지 않습니다.

 

하지만 Private2를 보시면 Private1 객체를 생성하여 해당 변수 및 메서드를 사용하고자 하는데 intVal과 output은 에러가 나오고 있습니다.

 

선언된 클래스 내부에서만 사용할 수 있다는 private의 특징을 볼 수 있었습니다.

 

 

default

 

default는 private 범위 + 동일 패키지 내부에서만 사용할 수 있습니다.

 

다음 코드를 확인해 봅시다.

 

default 예시 1

 

 

728x90

 

 

default 예시 2

 

 

패키지를 달리하여 Default1과 Default2를 작성해 봤습니다.

 

Default1에서는 longVal, output의 사용에 문제가 없지만 다른 패키지에 속하는 Default2에서는 해당 변수 및 메서드들을 사용할 때 에러가 나는 것을 확인할 수 있습니다.

 

 

protected

 

protected는 default 범위 + 자식 클래스에서만 사용할 수 있습니다.

 

다음 코드를 확인해 봅시다.

 

protected 예시 1

 

protected 예시 2

 

protected 예시 3

 

 

Protected1과 Protected2, Protected3은 서로 다른 패키지이고 Protected2와 Protected3은 동일 패키지에 작성을 해봤습니다.

 

그리고 Protected2는 Protected1을 상속받았지만 Protected3은 그러지 않은 상태입니다.

 

보시다시피 Protected1에 선언된 변수와 메서드를 사용할 때 Protected1을 상속받은 Protected2에서는 문제가 없지만 상속받지 않은 Protected3은 에러가 발생되는 것을 확인할 수 있습니다.

 

 

public

 

public은 protected 범위 + 다른 패키지에서 사용할 수 있습니다.

 

다른 말로는 자바 프로젝트 내에 어디에서든 사용할 수 있다는 뜻이기도 합니다.

 

다음 코드를 확인해 봅시다.

 

public 예시 1

 

public 예시 2

 

 

위의 코드를 보시면 Public1과 Public2가 패키지가 서로 다른 상태인데 Public2에서 Public1의 변수 및 메서드들을 문제없이 사용하는 것을 볼 수 있습니다.

 

이처럼 public으로 선언되어 있는 변수, 메서드, 클래스들은 어디에서든 로드하여 사용할 수 있다는 것을 확인하실 수 있습니다.

 

 

 

 

비슷하게 작성된 코드들을 활용하여 접근 제한자에 대한 다양한 예시를 들어봤습니다.

 

어려운 것이 아니기 때문에 한 번씩만 읽어봐도 모두 이해가 될 것이라고 생각되고 아무래도 보안과 관련된 키워드이기에 중요한 요소 중에 하나라고 생각됩니다.

 

또한 접근 제한자는 디자인 패턴 등을 만드는데 활용되는데 추후 기회가 되면 포스팅을 해보도록 하겠습니다. 

 

 

 

이상으로 접근 제한자에 대해 간단하게 알아보는 시간이었습니다.

 

읽어주셔서 감사합니다.

728x90
반응형

댓글