Java/Java 기본

접근 지정자

검정비니 2018. 6. 28. 20:48
728x90
반응형

접근 지정자



객체 지향 언어에는 기본적으로 접근 지정자의 개념이 있다. 객체를 캡슐화하기 때문에객체에 다른 객체가 접근하는 것을 허용할 것인지 말지를 지정할 필요가 있기 때문이다.


자바에서는 다음 4가지 접근 지정 방식을 정의하고 있다


- public

- protected

- private

- 접근 지정자 생략 = default



1. 클래스 접근 지정자


클래스 접근 지정이란, 다른 클래스에서 이 클래스 이름을 사용할 수 있는지에 대한 허용 여부를 지정하는 것을 말한다. 클래스 접근 지정자는 클래스의 선언 부분에 표시되며, public, private, 그리고 접근 지정자 생략 이렇게 총 3가지가 있을 수 있다.


- public

public 접근 지정자로 선언된 클래스는 어떤 다른 클래스에서도 사용할 수 있다. 다시 말해, 같은 패키지에 있는 클래스들 뿐만이 아니라 다른 패키지에 있는 클래스에서도 얼마든지 해당 클래스를 사용할 수 있다는 얘기가 된다.


- 접근 지정자 생략 (default)

접근 지정자를 생략하고 클래스를 선언한 경우, default 접근 지정자로 선언되었다고 한다. 이 경우, 같은 패키지 내에 있는 클래스들만이 해당 클래스로의 접근이 허용된다. 아직 패키지에 대해서 자세히 다루지 않았기 때문에, 우선은 같은 디렉토리 안에 있는 클래스들만이 해당 클래스로의 접근이 허용된다 정도로 이해하도록 하자.


- private

클래스의 접근 지정 방식이 private으로 선언될 경우, 다른 클래스들에서 해당 클래스에 접근을 할 수가 없게 된다. 그 어느 클래스도 접근을 못하기 때문에 거의 사용되지 않는 방식이다. 그렇지만, 굳이 이 private 방식을 언급한 이유는 이 방식이 사용되기도 하기 때문이다. 그렇다면 과연 언제 사용이 되어질까? 바로 내부 클래스를 선언할 때이다. 내부 클래스는 하나의 클래스 내부에 클래스를 선언하는 방식이다. 이렇게 내부에 클래스를 선언하고, 접근 지정자를 private으로 해 놓는다면, 해당 외부 클래스는 그 내부 클래스의 객체를 만들 수 있다. 다시 말해, 그 클래스에 접근할 수가 있다는 것이다. 필자는 개인적으로 javax.swing 패키지를 이용해서 그래픽을 다룰 때 가끔씩 이 private 내부 클래스 방식을 사용하곤 한다.



2. 멤버 접근 지정자


이제 클래스 멤버에 대한 접근 지정에 대해 알아보도록 하자. 클래스의 메멉인 필드와 메소드의 접근 지정자는 클래스 접근 지정자와 달리 총 4가지가 있다.



출처: <https://blog.naver.com/gnsehfvlr/220019294772>



- public

public 멤버는 패키지의 내부, 외부 등 모든 클래스에서 접근이 가능하다.


- private

private 접근 지정자는 비공개를 의미하는 것으로, private 멤버는 같은 클래스 내부 멤버에 의해서만 접근이 가능하다. 어떤 다른 클래스에서도 접근할 수 없다.


- protected

protected 접근 지정자는 보호된 공개를 의미하는 것으로, 두 가지 경우의 클래스에게만 접근 권한이 주어진다.

1. protected 멤버는 같은 패키지 내의 모든 클래스에서 접근이 가능하다.

2. 다른 패키지의 클래스라도 이 클래스를 상속받은 자식 클래스의 경우, 접근 권한이 주어진다.


- default (또는 package private)

접근 지정자의 선언이 생략된 경우, 멤버가 default 접근 지정자로 선언되었다고 한다. 이 방식이 package private이라고도 불리는 이유는, 동일한 패키지 내에 있는 모든 클래스는 default 멤버를 자유롭게 접근할 수 있기 때문이다.



3. getter와 setter


객체 속성값을 직접 수정하지 않고, 속성값을 지정할 때에는 set 메소드(setter)를, 가져올 때에는 get 메소드(getter)를 사용한다. 일부 속성값을 읽기 전용으로 사용하기 위해서 이러한 getter와 setter를 사용하는 것이다. 필드를 private 접근 지정자로 선언을 하고 getter와 setter를 이용해서 값에 접근하게 하는 방식은 전세계 프로그래머들 사이에서 암묵적으로 약속된 패턴이다.


이 getter와 setter는 접근을 허용하려는 멤버의 이름을 이용해서 메소드의 이름을 짓는다. 만약 필드의 이름이 sample이라면, setSample과 getSample이 getter와 setter의 이름이 되는 것이다. eclipse나 intelliJ등의 IDE(통합 개발 환경)에서 자동으로 getter와 setter를 만들어주는 기능이 있으니 참고하길 바란다.

반응형

'Java > Java 기본' 카테고리의 다른 글

final  (0) 2018.06.29
static 멤버  (0) 2018.06.29
가비지와 가비지 컬렉션  (0) 2018.06.26
객체의 소멸  (0) 2018.06.25
this(), 다른 생성자 호출  (0) 2018.06.25