2010. 7. 7. 16:31

자바(Java) 의 접근 제어



자바는 모든 것을 클래스로 만들어 객체화시키는데 이를 `캡슐화`라고 한다. 그러면 여러 개의 만들어진 클래스가 각기 상호 독립적으로 존재한다.

이렇게 클래스를 만들어 놓고 외부에서 필드(변수)에 마음대로 접근하여 변경할 수도 있지만 이건 좋은 방법이 아니다. 명료한 프로그램을 만드는데 방해가 될 뿐더러 효율이 떨어지기도 마찬가지다. 비정상적인 접근이나 정보자료의 원치 않는 변경이 생길 수도 있다.

이런 관계로 자바에서는 객체의 메소드와 변수에 대해 외부의 접근을 제한하는 기능이 있다. 객체는 폐쇄가 기본이다. 그러므로, 접근할 때 제한이 가해지면 직접 들어가서 볼 수는 없고, 일단 `물어보아야` 한다.

접근을 제어하는 키워드로는 private, protected, public, default(기본)가 있다. public은 누구나 마음대로 접근이 가능하다는 것이므로 굳이 긴 설명이 필요없다.

`private` 로 선언되는 클래스는 외부에서 절대로 접근할 수 없다. 오로지 해당 클래스 내부의 메소드 만으로 접근 가능하다. 상속된 하위클래스도 접근이 안 된다. 제일 강력한 접근 제어로 `정보 은닉`을 위한 장치이다.

`protected`는 같은 패키지나 상속된 하위클래스까지 접근을 허용한다. 상속이 된 경우에는 패키지가 달라도 상관없다.

접근제어에 아무런 명시를 하지 않으면 기본(default) 접근제어가 실행되는데 이때에는 상속 여부를 떠나 오직 같은 패키지에서만 접근이 가능하다. 상속되었더라도 패키지가 다르면 접근할 수 없다. friendly라고도 한다.