반응형
제어자 (Modifier)
자바에서 제어자는 클래스, 필드, 메서드, 생성자 등에 외부로부터의 접근을 제어하는 것을 의미한다. 자바의 제어자는 접근 제어자와 기타 제어자로 구분할 수 있다.
접근 제어자 : public, protected, default, private
기타 제어자 : static, final, abstract, native, transient, synchronized 등
접근 제어자(Access Modifier)
접근 제어자는 클래스 외부로의 불필요한 데이터 노출을 방지하고, 외부로부터 데이터가 임의로 변경되지 않도록 막을 수 있다. 즉, 정보 은닉(data hiding)과 연관이 깊다.
접근 제어자는 public, protected, default, private로 구성되어 각각의 역할을 한다.
public : 접근 제한 없음. 즉, 외부로의 노출 또는 외부에서 접근이 모두 허용
protected : 동일 패키지와 다른 패키지의 하위 클래스에서 접근 가능
default(기본값) : 동일 패키지 내에서만 접근 가능.
private : 동일 클래스에서만 접근 가능
접근 제한 범위에 순으로 나열하면, public > protected > default > private 순이다.
접근 제어자를 작성하지 않으면, 자동으로 기본값인 default가 설정된다.
같은 패키지의 경우 Private를 제외한 접근 제어자에 접근이 가능하다.
class AccessModifierEx {
public static void main(String[] args) {
TestClass test = new TestClass();
test.printTest();
System.out.println(test.testPublic);
System.out.println(test.testProtected);
System.out.println(test.testDefault);
// System.out.println(test.testPrivate);
}
}
public class TestClass {
public int testPublic = 1;
protected int testProtected = 2;
int testDefault = 3;
private testPrivate = 4;
public void printTest() {
System.out.println(testPublic);
System.out.println(testProtected);
System.out.println(testDefault);
System.out.println(testPrivate);
}
}
패키지가 다를 경우 public외에는 모두 접근이 불가능하다. 만약, 상위 클래스를 상속받아 사용하는 경우에는 public과 protected만 접근이 가능하다.
package package1;
public class TestClass {
public int testPublic = 1;
protected int testProtected = 2;
int testDefault = 3;
private testPrivate = 4;
public void printTest() {
System.out.println(testPublic);
System.out.println(testProtected);
System.out.println(testDefault);
System.out.println(testPrivate);
}
}
package package2;
import Section1.accessModifier.TestClass;
class AccessModifierEx {
public static void main(String[] args) {
TestClass test = new TestClass();
test.printTest();
System.out.println(test.testPublic);
// System.out.println(test.testProtected);
// System.out.println(test.testDefault);
// System.out.println(test.testPrivate);
}
}
class TestClass2 extends TestClass {
public void printTest() {
System.out.println(testPublic);
System.out.println(testProtected);
// System.out.println(testDefault);
// System.out.println(testPrivate);
}
}
반응형
'언어(Language) > Java' 카테고리의 다른 글
[Java] 자바 다형성(Polymorphism) 개념 정리 및 활용 (3) | 2022.09.18 |
---|---|
[Java] 자바 Getter와 Setter 개념 정리 및 활용 (0) | 2022.09.17 |
[Java] 자바 패키지(Package)와 임포트(Import) 개념 정리 및 활용 (0) | 2022.09.17 |
[Java] 자바 캡슐화(Encapsulation) 개념 정리 (2) | 2022.09.17 |
[Java] 자바 Object 클래스 개념 정리 (0) | 2022.09.16 |