728x90
반응형
제어자(modifier)
제어자는 클래스와 클래스 멤버의 선언 시 사용하여 부가적인 의미를 부여하는 키워드를 의미한다. 자바에서는 접근 제어자와 기타제어자로 구분한다. 접근 제어자는 두 개 이상 함께 사용하는 것이 불가하지만, 기타 제어자는 경우에 따라 여러개를 함께 사용 가능하다.
접근제어자 사용 이유
클래스 내부에 선언된 데이터를 보호하기 위함이다. 유효한 데이터 값을 유지하기 위해 외부에서 함부로 변경하지 못하도록 접근이 제어하는 것이다. 이를 정보 은닉(data hiding)
이라고 하며 객체지향에선 캡슐화(encapsulation)
라고 한다.
정보 은닉이란 사용자가 알 필요가 없는 정보는 숨겨야 한다는 개념으로, 정보 은식을 통해 사용자는 최소한의 정보로 손쉽게 프로그램을 사용할 수 있도록 하기 위함이다. 따라서 접근 제어자를 통해 클래스 외부의 접근의 정도를 설정함으로써 정보 은닉을 구체화할 수 있다.
접근 제어자 종류
private -> public 아래로 내려갈수록 접근이 용이해진다.
- private
- default
- protected
- public
1. private
변수나 메소드의 접근제어자가 private으로 설정돼 있다면 같은 클래스에서만 접근
이 가능하다.
참고 예시🔖
public class Game {
private String player;
private String getPayer() {
return this.player;
}
}
2. default
접근제어자를 별도로 설정하지 않으면 default 접근제어자가 돼서 `같은 패키지 내에서만 접근`이 가능하다.
참고 예시🔖
package car;
public calss SmallCar() {
String name = "morning";
}
package car;
public class BigCar() {
String name = "tucson";
public static void main(String[] args) {
SmallCar sc = new SmallCar();
System.out.println(sc.name);
}
}
3. protected
protected가 붙은 변수나 메소드는 같은 패키지 내
의 클래스 또는 외부에서 해당 클래스를 상속 받은 자식 클래스
에 서 접근이 가능하다.
참고 예시🔖
package house;
public class Parent {
protected String lastName = "Choi";
}
package house;
import house.Parent;
public class Child extends Parent {
public static void main(String[] args) {
Child cd = new Child();
System.out.println(cd.lastName); // "Choi 출력됨"
}
}
4. public
public이 붙은 변수나 메소드는 모든 클래스에서 접근
이 가능하다.
참고 예시🔖
- private으로 설정된 name은 해당 클래스 내에서만 접근이 가능하지만 public으로 설정된 info는 어디에서나 접근이 가능하다.
public class Color {
private String name = "blue";
public String info = "this is info of blue color";
}
접근 제어자의 접근 범위
접근 제어자 | 같은 클래스의 멤버 | 같은 패키지의 멤버 | 자식 클래스의 멤버 | 그 외의 영역 |
---|---|---|---|---|
public | ○ | ○ | ○ | ○ |
protected | ○ | ○ | ○ | X |
default | ○ | ○ | X | X |
private | ○ | X | X | X |
제어자의 조합
대상 | 사용 가능한 제어자 |
---|---|
클래스 | public, default, final, abstract |
메서드 | private, default, protected, public, final, abstract, static |
멤버변수 | private, default, protected, public, final, static |
지역변수 | final |
참고 사이트 👓
반응형
'Programming Language > Java' 카테고리의 다른 글
Commit convention 지키기 (feat. Angular.js) (0) | 2021.11.24 |
---|---|
[Java] Enum 클래스의 개념과 사용 (0) | 2021.11.23 |