- 자바의 정석 (기본편)을 참고했습니다.
- 복습을 위한 게시글입니다.
- 소스에 오타가 있을 수 있습니다. ^^:;
제어자의 특징
제어자는 크게 접근 제어자와 그 외의 제어자로 나눌 수 있다.
제어자는 클래스, 변수, 메서드의 선언부에 사용되며 부가적인 의미를 부여한다.
하나의 대상에 대해 여러 제어자를 조합할 수 있으나 접근 제어자는 하나만 선택해서 사용할 수 있다.
1. static 제어자
static 제어자는 멤버변수, 메서드, 초기화 블럭에 사용할 수 있다.
멤버변수와 메서드에 static 제어자가 붙었다면 전역 변수, 전역 메서드로 클래스 내부 어디서든 사용할 수 있다.
전역 변수는 인스턴스를 생성하지 않고도 사용할 수 있고 클래스가 메모리에 로드될 때 생성된다.
전역 메서드 또한 인스턴스를 생성하지 않고도 호출할 수 있다.
다만 전역 메서드 내에서 인스턴스 멤버들을 직접 사용할 순 없다.
인스턴스 멤버를 사용하지 않는다면 가능한 static을 붙여서 사용하자.
- 인스턴스 생성이 필요없기 때문에 편리하고 속도도 더 빠르기 때문
2. final 제어자
final 제어자는 멤버변수, 메서드, 클래스에 사용할 수 있다.
멤버변수에 final 제어자가 붙었다면 변수는 상수가 되고 메서드는 오버라이딩을 할 수 없게 되며 클래스에 사용되면
자손 클래스를 정의하지 못하게 된다.
3. abstract 제어자
abstract 제어자는 메서드와 클래스에 사용할 수 있다.
해당 제어자가 붙는 메서드는 추상 메서드, 클래스는 추상 클래스가 된다.
접근 제어자의 제어 범위
접근 제어자는 멤버 또는 클래스 앞에 적혀 접근 범위를 조정할 수 있다.
제어자 | 같은 클래스 | 같은 패키지 | 자손 클래스 | 전제 |
public | 허용 | 허용 | 허용 | 허용 |
protected | 허용 | 허용 | 허용 | |
(default) | 허용 | 허용 | ||
private | 허용 |
1. pulic 접근 제어자
접근 제한이 없다.
접근 제어자 중 가장 접근 범위가 넓다.
2. protected 접근 제어자
같은 패키지, 패키지에 상관없이 상속 관계에 있는 자손 클래스까지 접근이 허용된다.
3. default 접근 제어자
접근 제어자가 아무것도 적혀있지 않았을 때 자동으로 default 접근 제어자의 허용 범위를 따른다.
같은 패키지 내에서의 접근만이 허용된다.
4. private 접근 제어자
같은 클래스 내에서의 접근만이 허용된다.
접근 제어자 중 가장 접근 범위가 좁다.
캡슐화에 대해
외부로부터의 접근을 제한하여 클래스 내부에 선언된 데이터를 보호하기 위해 접근 제어자를 사용하고, 외부에는
불필요한, 내부적으로만 사용되는 부분을 감추기 위해 접근 제어자를 적절히 사용해야 하는데, 이 특징들은 모두
캡슐화에 해당한다고 할 수 있다.
이런 경우 Getter, Setter 을 사용해서 간접적으로 멤버변수의 값을 다룰 수 있도록 하는 것이 바람직하다.
Getter, Setter 예제 코드
public class Time {
// 멤버변수 앞에 private를 붙여 같은 클래스가 아니면 접근하지 못하게 막는다.
// Setter에 의해 값이 저장될 수 있다.
private int hour;
private int minute;
private int second;
// 시간을 구하는 Getter, Setter
public int getHour() {
return hour;
}
public void setHour() {
// hour 확인 (0보다 크고 24보다 작은 값)
if(hour < 0 || hour > 24) {
return;
}
// hour 값이 0 ~ 24 사이라면 인스턴스 변수에 저장
this.hour = hour;
}
// 분을 구하는 Getter, Setter
public int getMinute() {
return minute;
}
public void setMinute() {
// minute 확인 (0보다 크고 59보다 작은 값)
if(minute < 0 || minute > 59) {
return;
}
// minute 값이 0 ~ 59 사이라면 인스턴스 변수에 저장
this.minute = minute;
}
// 초를 구하는 Getter, Setter
public int getSecond() {
return second;
}
public void setSecond() {
// second 확인 (0보다 크고 59보다 작은 값)
if(second < 0 || second > 59) {
return;
}
// second 값이 0 ~ 59 사이라면 인스턴스 변수에 저장
this.second = second;
}
}
'JAVA' 카테고리의 다른 글
[JAVA 복습] 추상 클래스(abstract class) (0) | 2021.09.02 |
---|---|
[JAVA 복습] 다형성(Ploymorphism) (0) | 2021.09.02 |
[JAVA 복습] 참조변수 super와 조상의 생성자 super() (0) | 2021.09.02 |
[JAVA 복습] 상속에 대해 (0) | 2021.09.02 |
[JAVA 복습] 생성자 this() 와 객체 자신을 가리키는 참조변수 this (0) | 2021.08.31 |