■ Java Modifier(제어자)
- 클래스, 변수, 메소드에 부가 기능을 부여하는 키워드
1. 접근 제어자 (Access Modifiers)
- 접근할 수 있는 범위를 정하는 제어자
- private : Class 안에서만 사용 가능
- default : 같은 Package 내에서 사용 가능
- protecte : 같은 Package 또는 다른 Package에 속한 자식 클래스에서 사용 가능
- public : 전체에서 사용 가능
* Class는 private와 public만 가능
• 기본 Package
package PackageA;
public class ClassA {
public int x;
protected int y;
int z; // default (=package)
private int w;
public void methodA(){
}
protected void methodB(){}
void methodC() {} // default (=package)
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 ClassTest{
public static void main(String[] args) {
ClassA obj = new ClassA();
System.out.println(obj.x); // public
System.out.println(obj.y); // protected
System.out.println(obj.z); // default
// System.out.println(obj.w);// private
obj.methodA(); // public
obj.methodB(); // protected
obj.methodC(); // default
// obj.methodD();// private
}
}
• 다른 Package
import PackageA.ClassA;
class AA extends ClassA {
public void methodTest(){
System.out.println(x); // public
System.out.println(y); // protected, 자식이면 다른패키지여도 가능하다.
// System.out.println(z); // default
// System.out.println(w); // private
methodA(); // public
methodB(); // protected
// methodC(); // default
// methodD(); // private
}
}
public class ClassB {
public static void main(String[] args) {
ClassA obj = new ClassA();
System.out.println(obj.x); // public
// System.out.println(obj.y); // protected는 다른 패키지인 경우 자식만 된다.
// System.out.println(obj.z); // default는 다른 패키지면 안된다.
// System.out.println(obj.w); // private
obj.methodA();
// obj.methodB(); // protected는 다른 패키지인 경우 자식만 된다.
// obj.methodC(); // default는 다른 패지면 안된다.
// obj.methodD(); // private
}
}
2. 그 외 제어자 (Other Modifiers)
- 특별한 기능을 부여하는 제어자
• final 키워드
- 더 이상 바뀔 수 없음을 의미
- 클래스 : 더 이상 상속 불가
- 메소드 : 자식 클래스에서 Override 할 수 없다.
- 변수 : 변수의 값이 초기화된 이후에 변하지 않는다.
* 생성자에서 초기화가 이루어지는 것을 black final이라고 한다.
public class Foo {
final int x = 0; // final variable
final int y; // blank finial variable
public Foo(int y) {
this.y = y; // blank final variable initialization
}
}
• static 키워드
- 클래스 변수, 클래스 메소드 등을 선언하기 위해 사용
- 클래스를 로드할 때 메모리에 올라가게 된다.
• abstract 키워드
- 추상 클래스에서 사용
• synchronized 키워드
- 동시성 프로그래밍에서 사용(Multi-Thread)
'Coding > Java' 카테고리의 다른 글
Java Abstract Class & Interface (0) | 2020.09.17 |
---|---|
Java Polymorphism(다형성) (0) | 2020.09.17 |
Java Inheritance(상속) (0) | 2020.09.16 |
JavaDoc 만드는 방법 (0) | 2020.09.16 |
Java Class(클래스) (0) | 2020.09.16 |