7. Access Modifier (접근 제어자)
- public
- 이 키워드는 field, method, constructor, class 앞에 붙을 수 있다.
- package에 상관없이 자유롭게 access할 수 있도록 해주는 접근 제어자
- class가 public이라고 해서 변수를 마음대로 쓸 수 있는 것이 아니다.
- 변수 역시 public이어야 한다.
- default (키워드 아님, 직접 명시하지 않음)
- field, method, constructor, class에 선언할 수 있다.
- 같은 package의 다른 class에 의해 사용될 수 있다.
- 다른 package에서는 못 쓴다.
- private
- field, method, constructor에 선언할 수 있다.
- 해당 field, method, constructor를 같은 class내에서만 access 가능하도록 선언한다.
- constructor 앞에 붙일 때는 싱글톤 패턴일 때 사용
싱글톤 패턴
public class Singleton {
private static Singleton instance;
private Singleton() {
}
public static Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
7.1 Encapsulation(캡슐화)
- class는 객체가 가지고 있는 특징(값), 기능(함수)를 하나의 단위로 묶어놓은 개념이다.
- class가 encapsultation한 결과이다.
- 이런 class 안에는 값과 기능이 들어가 있다.
- 여기서는 값이 더 중요하다.
- 외부에서 이 값을 함부로 변경하는 것은 당연히 막아야 한다.
- 그래서 class 내부에서만 값을 수정할 수 있고, 외부에서 함부로 값을 변경할 수 없도록 데이터를 보호해야 하는데 이 개념을 Information Hiding(정보 은닉)이라고 한다.
7.3 구현 방법
- Java 언어에서는 이 개념을 access modifier로 구현한다.
- private를 이용해서 field를 선언한다. (특별한 이유가 없는 한)
- method를 이용해서 해당 field를 제어하는 식으로 class를 design을 한다.
- 추가적으로 외부 class(instance)에서 private으로 설정된 값을 알아가거나 설정하기 위해 특수한 형태의 method를 이용하게 되는데 getter / setter 이라고 한다.
8. static block
- class가 로드된 후 바로 수행되는 코드 block이고 main()보다 먼저 수행된다.