제어자(modifier)
- 클래스와 클래스의 멤버(멤버변수, 메서드)에 부가적인 의미 부여
- 크게 접근 제어자와 그 외 제어자로 나눔
1) 접근 제어자: public, protected, (default), private
2) 그 외: static, final, abstract, native, transient, synchronized, volatile, strictfp
- 하나의 대상에 여러 제어자를 같이 사용 가능(접근 제어자는 하나만 가능), 순서는 상관없지만 보통 접근 제어자를 가장 앞에 씀
public class Test {
public static final int WIDTH = 200; // 제어자 3개 사용, public, static, final
public static void main(String[] args) {
System.out.println("WIDTH="+WIDTH);
}
}
많이 사용하는 제어자 static, final, abstract
제어자 | 대상 | 의미 |
static | 멤버변수 | - 모든 인스턴스에 공통적으로 사용되는 클래스 변수가 됨 - 클래스 변수는 인스턴스를 생성하지 않고도 사용 가능 - 클래스가 메모리에 로드될 때 생성된다 |
메서드 | - 인스턴스를 생성하지 않고도 호출이 가능한 static 메서드가 됨 - static메서드 내에서는 인스턴스 멤버들(iv, im)을 직접 사용할 수 없음 |
|
final | 클래스 | - 변경될 수 없는 클래스, 확장될 수 없는 클래스가 됨 - 그래서 final로 지정된 클래스는 다른 클래스의 조상이 될 수 없음 |
메서드 | - 변경될 수 없는 메서드, Final로 지정된 메서드는 오버라이딩을 통해 재정의 될 수 없음 | |
멤버변수 | - 변수 앞에 final이 붙으면 값을 변경할 수 없는 상수 | |
지역변수 | ||
abstract | 클래스 | - 클래스 내에 추상 메서드가 선언되어 있음을 의미 |
메서드 | - 선언부만 작성하고 구현부는 작성하지 않은 추상 메서드임을 알린다 |
1) static - 클래스의, 공통적인
public class StaticTest {
static int width = 200; // 클래스 변수(static 변수)
static int height = 120; // 클래스 변수(static 변수)
static { // 클래스 초기화 블럭
// static 변수의 복잡한 초기화 수행
}
static int max(int a, int b) { // 클래스 메서드(static 메서드)
return a > b ? a: b;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}
2) final 마지막의, 변경될 수 없는
final class FinalTest { // 조상이 될 수 없는 클래스(= 확장될 수 없는 클래스) <- 상속 계층도에서 가장 마지막 클래스 ex. String(), Math()
final int MAX_SIZE = 10;
final int getMaxSize() { // 값을 변경할 수 없는 멤버 변수(상수), 오버라이딩할 수 없는 메서드(변경 불가)
final int LV = MAX_SIZE; // 값을 변경할 수 없는 지역변수(상수)
return MAX_SIZE;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}
3) abstract - 추상의, 미완성의
abstract class AbstrackTest { // 추상클래스(추상 메서드를 포함한 클래스=미완성 클래스)
abstract void move(); // 추상 메서드(구현부가 없는 메서드=미완성 메서드)
}
// Error, 추상클래스는 인스턴스 생성 불가,추상클래스를 상속받아서 완전한 클래스(완성된 설계도=구상 클래스=구체 클래스)를 만든 후에 객체 생성 가능
AbstractTest a = new AbstractTest();
접근제어자(access modifier)
private : 같은 클래스 내에서만 접근 가능
(default): 같은 클래스/같은 패키지 내에서만 접근 가능
protected: 같은 클래스/같은 패키지/다른 패키지+자손 클래스 내에서만 접근 가능
public: 접근 제한 없음
제어자 | 같은 클래스 | 같은 패키지 | 자손 클래스 | 전체 |
public | O | O | O | O |
protected | O | O | O | |
(default) | O | O | ||
private | O |
접근 제어자를 사용하는 이유
1. 외부로부터 데이터를 보호하기 위해서 👉🏻 캡슐화
2. 외부에는 불필요한, 내부적으로만 사용되는, 부분을 감추기 위해서
'Java' 카테고리의 다른 글
Java 참조변수의 형변환과 instanceof (0) | 2022.12.27 |
---|---|
Java 다형성(polymorphism) (0) | 2022.12.26 |
Java import문 (0) | 2022.12.26 |
Java 패키지(package) (0) | 2022.12.26 |
Java 참조변수 super 와 조상의 생성자 super() (0) | 2022.12.26 |