제어자(Modifier)
제어자란
- 클래스, 변수, 메소드에 부가 기능을 부여하는 키워드
- 접근 제어자 (Access modifiers)
- 변수, 메소드, 생성자에 대한 접근할 수 있는 범위를 정하는 키워드이다.
- 자바 파일명과 같은 public class 클래스명이 꼭 있어야 한다.
- private – 같은 클래스에서만 사용가능, 내부 구현을 위해서만 사용한다.
- default – package라고도 한다 제어자명은 생략하여 쓴다. (제어자명에 package,default를 사용하지 않는다.)
사용범위가 같은 패키지안에서 가능.
- protected – private와 비슷하게 사용이 되나, 상속한 경우 구현 시 접근이 필요할 때 사용.
자식이면 다른 패키지여도 접근할 수가 있다, 부모의 부모는 건들 수 없다.
- public – 모든 곳에서 사용가능.
- 클래스는 public 과 default만 사용 가능하다.
- 그 외 제어자 (Other modifiers)
- 특별한 기능을 부여하는 제어자
- static, final, abstract, synchronized
접근 제어자
package com.company.s04.p05.subp01;
public class ClassA {
public int x;
protected int y;
int z;
private int w;
public void methodA(){}
protected void methodB(){}
void methodC(){}
private void methodD(){}
public void methodTest(){
System.out.println(x);
System.out.println(y);
System.out.println(z);
System.out.println(w);
methodA();
methodB();
methodC();
methodD();
}
}
class ClassATest{
public static void main(String[] args) {
ClassA obj = new ClassA();
System.out.println(obj.x);
System.out.println(obj.y);
System.out.println(obj.z);
obj.methodA();
obj.methodB();
obj.methodC();
}
}
package com.company.s04.p05.subp02;
import com.company.s04.p05.subp01.ClassA;
class ClassAA extends ClassA{
public void methodTest(){
System.out.println(x);
System.out.println(y);
methodA();
methodB();
}
}
public class ClassB {
public static void main(String[] args) {
ClassA obj = new ClassA();
System.out.println(obj.x);
obj.methodA();
}
}
public으로 open한거랑 private으로 닫아놓고 public method를 제공하는것의 차이
그 외의 제어자
- 외부에서 클래스 내부의 정보에 접근하지 못하도록 한다, private 키워드를 활용
- private 변수를 외부에서 접근하게 하려면 public 메소드 제공한다.
클래스 내부 데이터를 잘못 사용하는 오류를 방지할 수 있다.
싱글톤 패턴(Singletone)
- 객체가 단 하나만 존재할 수 있는 클래스
- private 생성자를 이용한다.
class SingletonClass {
private static SingletoneClass instance = new SingletonClass();
private SingletonClass() {}
public static SingletonClass getInstance() {
return instance;
}
}