1. [객체지향언어] 수식자/제한자/한정자/변경자 (Modifier)
ㅇ `클래스` 또는 `클래스 내 메소드,프로퍼티` 앞에 붙여,
- 다른 객체에게 노출되는 정도에 대한 보호 수준을 결정하는 수식자/제한자/한정자/변경자
ㅇ 한편, 이렇게 클래스,객체 등의 단위로 묶어서 변수 및 메소드를 보호하는 것을,
- 정보은폐(Information Hiding) 또는 캡슐화(Encapsulation) 라고 함
2. [자바언어] 제한자/수식자 (Modifier) 종별
ㅇ 접근 제한자 : public, protected, private
- 클래스,메소드,필드 등에 대해 접근 범위(가시성)를 제한 지정
. public : 자신을 포함하여 모든 객체에 접근 가능
. protected : 클래스 멤버 함수 또는 현재 클래스를 상속받은 클래스에서 접근 가능
.. 같은 패키지(폴더)에 있는 클래스와 상속관계의 객체들 만 가능
. private : 같은 클래스 내 멤버 함수 또는 멤버 변수 만이 접근 가능
. default : 같은 패키지(폴더)에 있는 클래스들 만 접근 가능
ㅇ abstract 수식자 : 클래스,인터페이스,메소드가 추상적임을 알림
- 추상 메소드 : 메소드 선언 만 있고, 본체(내용 정의) 없는 함수 원형과 같은 것
- 추상 클래스 : 추상 메소드를 갖고 있어, 객체/인스턴스를 직접 생성할 수 없음
- 추상 인터페이스 : 반드시 추상 메소드를 정의하기 때문에, 굳이 지정 불필요
ㅇ native 수식자
ㅇ static 수식자
- 클래스가 인스턴스화되지 않아도 접근 가능
ㅇ final 수식자
- final 클래스 : 기존 클래스로부터 새로운 서브(확장) 클래스를 만들 수 없음
- final 메소드 : 서브 클래스에서 메소드 변경이 금지됨 (즉, 오버라이드를 금지하는 것)
- final 필드 : 그 필드의 값이 변경되는 것을 금지
ㅇ transient 수식자
- 객체의 직렬화시에 해당 필드를 직렬화 대상에서 제외
- 직렬화이란, 인스턴스화된 객체를 바이트 열로 변환하는 것을 말함
ㅇ volatile 수식자
ㅇ synchronized 수식자
※ 수식자 사용 대상 (아래 각각을 정의시에 명시하게 됨)
- 클래스 : public, default, final, abstract
- 생성자 : public, protected, default, private
- 멤버 변수 : public, protected, default, private, static, final, transient
- 멤버 메소드 : public, protected, default, private, static, abstract, final
- 지역 변수 : 접근제한자(public,protected,private)는 사용 불허