제어자는 클래스나 속성, 메서드의 선언부에 사용해서 부가적인 기능을 제어한다.
제어자는 크게 접근 제어자와 일반 제어자로 나눈다.
📍 제어자는 여러 개 사용이 가능하지만, 접근 제어자는 1개만 사용 가능하다.
📍 여러 개의 제어자를 사용할 때는 접근 제어자를 먼저 지정하고 일반 제어자를 뒤에 지정한다.
📍 보통 객체의 속성은 외부에서 접근하지 못하도록 private으로 선언해 막고, 대신 메서드를 public으로 선언해서 속성(데이터)에 간접적으로 접근할 수 있도록 한다. 그래서 객체 간 상호 작용은 오직 메서드를 통해서만 가능하다.
[더 알아보기]
Oracle, MySQL, MariaDB등 여러가지 RDBMS를 사용한다고 가정했을 때, 자바 프로그램은 DBMS가 어떤 종류인지에 관계없이 구현한 코드를 사용할 수 있어야 한다.
즉, RDBMS와 의존성을 낮추기 위해서 중간 관리 객체가 필요하다.
싱글턴 패턴 : 하나의 클래스에서 오직 하나의 객체만 생성하도록 하는 기법
클래스 외부의 누구도 객체를 생성하지 못하게 한다.
싱글턴은 필요할 때 생성되어(lazy) 필요 시점까지 메모리의 요구를 줄인다.
생성자를 private로 지정해서 new로 생성할 수 없게 하고, public static 메서드를 사용해서만 객체에 접근할 수 있게 한다.
싱글턴은 오직 단일 자원(resource)만 가지고 있고, 단일 자원의 속성에 접근하는 것을 공유할 필요가 있을 때 유용하다.
데이터베이스 연결이나 네트워크 연결을 할 때 공용 자원에 접근할 때 사용하면 효율적이다.
static, final, abstract, native, transient, synchronized, volatile
변경할 수 없는
클래스 : 클래스를 변경할 수 없고, 확장이 불가능하다. 그래서 다른 클래스의 상위 클래스가 될 수 없다.
메서드 : 메서드를 변경할 수 없고 재정의 할 수 없다. 그래서 읽기 전용 메서드가 된다.
속성(멤버 변수)과 지역 변수 : 상수
final로 멤버 변수 선언만 하고 초기화하지 않은 다음, 생성자에서 한 번 초기화하는 것도 가능하다.
public class MyFrame extends Frame {
public final int FRAME_WIDTH;
public final int FRAME_HEIGHT;
public MyFrame(int w, int h){
FRAME_WIDTH = w;
FRAME_HEIGHT = h;
this.setSize(FRAME_WIDTH, FRAME_HEIGHT);
}
}