본문 바로가기

JAVA

[JAVA] 접근 수준 지시자(Acess-level-Modifiers) (자바 독학하기10)

반응형

이미 구현된 클래스를 사용하는 사용자가 잘못된 값을 인스턴스 변수에 저장하게 되면 컴파일 과정에서 에러가 발생하게 된다.

자바에선 이러한 접근을 허용하지 않도록 클래스를 설계하는 것을 정보 은닉이라 한다.

다음과 같이 코드를 작성하였다.

정보를 은닉하기 위해서는 인스턴스 변수앞에 private 를 붙여주면 된다.

이렇게 되면 해당 클래스 외에 다른 클래스에서 variable 이라는 인스턴스 변수를 수정하려고 하면 에러가 발생한다.

위 코드에서 set_val 은 값의 설정을 위한 메소드이고 get_val 은 값의 참조를 위한 메소드이다.

이러한 메소드는 각각 게터와 세터라 부른다.

 

게터(Getter)

- 인스턴스 변수의 값을 참조하는 용도로 정의된 메소드

- 변수의 이름이 name 일 때, 메소드의 이름은 getName으로 짓는 것이 관례

 

세터(Setter)

- 인스턴스 변수의 값을 설정하는 용도로 정의된 메소드

- 변수의 이름이 name 일 때, 메소드의 이름은 setName으로 짓는 것이 관례

 

 

private 선언과 같은 키워드를 접근 수준 지시자(Acess-level-Modifiers) 라 한다.

접근의 허용 수준을 결정할 때 선언하는 키워드이다.

 

접근 수준 지시자는 다음과 같이 네가지가 있다.

-public, protected, private, default

여기서 default 키워드는 아무런 선언도 하지 않은 상황을 의미하지만 이 또한 접근 수준 지시자의 한 종류로 구분한다.

 

접근 수준 지시자가 선언할 수 있는 대상은 '클래스의 정의' 와 '클래스의 인스턴스 변수와 메소드' 이다.

이들에 대해 다음과 같은 선언이 가능하다.

- 클래스 정의 : public, default

- 인스턴스 변수와 메소드 : public, protected, private, default

 

클래스 정의가 public 으로 선언되면 어디서든 해당 클래스의 인스턴스를 생성할 수 있다.

반면에 default 로 선언되면 (class Use_Hide 과 같이) 동일 패키지로 묶인 클래스 내에서만 인스턴스 생성이 가능하다.

클래스 정의에서 주의할 점은 하나의 소스파일에 하나의 클래스만 public 으로 선언해야 한다.

또 소스파일의 이름과 public 으로 선언된 클래스의 이름을 일치 시켜야 한다.

이 2가지 사항을 지키지 않으면 컴파일 에러가 발생한다.

이는 프로그램의 큰 틀을 분석하는 과정에서 먼저 관찰하게 되는 public 클래스를 중심으로 소스파일을 형성하기 위함이다.

 

인스턴스 변수와 메소드에서의 public 과 default 도 클래스 정의에서와 동일한 특성이 적용된다.

즉 public 선언은 어디서든 접근이 가능하며, default 선언은 동일 패키지로 묶인 클래스 내에서만 접근이 가능한 것이다.

private 는 위의 코드에서 보인바와 같이 해당 클래스 내에서만 접근이 가능하다.

protected 경우 default 선언이 허용하는 접근을 모두 허용하며, 상속 관계에 있는 다른 클래스에서 접근 가능하다.

protected 는 약간 복잡한 내용이 있다.

A 라는 클래스가 B 라는 클래스를 상속받으면 B 라는 클래스에 선언된 인스턴스 변수를 사용할 수 있다.

하지만 A 와 B 가 다른 패키지로 선언되면, B 라는 클래스에서 선언된 인스턴스 변수는 protected 선언을 해주어야만 상A 클래스에서 사용이 가능하다.

 

이들의 접근 허용 수준을 정리하면 다음과 같다.

허용 범위의 크기는

public > protected > default > private

로 생각하면 된다.

 

반응형