*이 글은 개인적인 공부/기록 목적으로 올립니다.
부족하다고 느껴질 수 있는 글이니 양해 부탁드립니다.*
참고도서
http://www.yes24.com/Product/Goods/24259565
Java의 정석 - YES24
최근 7년동안 자바 분야의 베스트 셀러 1위를 지켜온 `자바의 정석`의 최신판. 저자가 카페에서 12년간 직접 독자들에게 답변을 해오면서 초보자가 어려워하는 부분을 잘 파악하고 쓴 책. 뿐만 아
www.yes24.com
■ 제어자
제어자란 클래스나 변수, 메서드의 선언부에 사용되어 부가적인 의미를 사용된다.
제어자는 크게 접근 제어자와 그 외의 제어자로 나뉘게 되는데
접근제어자는 public, protected, default, private 총 4개가 있다.
접근 제어자를 제외한 나머지 제어자는 static, final, abstract가
주로 사용되고 나머지는 자주 사용되지 않는다.
■ 접근 제어자
접근 제어자는 멤버 또는 클래스에 사용되어, 외부로부터 접근을 제한하는 것을 말한다.
만약 비밀번호같은 중요한 데이터가 아무런 제한없이 쉽게 열리는 것은
보안에 굉장히 치명적이기 때문이다.
접근 제어자를 사용하는 주된 이유는 외부로부터 데이터를 보호하기 위해서이다.
또한, 외부에서는 불필요한 내부적으로만 사용되는 부분을 감춰서 복잡성을 줄이기 위함도 있다.
접근 제어자는 protected, default, private 총 4개가 있는데
각 접근 제어자마다 접근할 수 있는 범위가 다르다.
제어자 | 같은 클래스 | 같은 패키지 | 자식 클래스 | 전 체 |
public | 0 | 0 | 0 | 0 |
protected | 0 | 0 | 0 | |
default | 0 | 0 | ||
private | 0 |
먼저 private는 같은 클래스 이외에는 어느 누구도 접근할 수 없다.
접근 제한이 가장 높은 접근 제어자이다.
그 다음 default는 같은 패키지 내의 클래스에서만 사용할 수 있는데
멤버에 접근 제어자를 적지 않으면 말 그대로 default값이기 때문에 자동으로 선언된다.
실제로도 default를 사용되지 않는다.
protected는 자식 클래스에서만 접근이 가능하며 같은 패키지 내의 클래스에도 접근이 가능하다.
public은 말 그대로 접근 제한이 전혀 없다.
class Time {
private int hour;
private int minute;
private int second;
Time (int hour, int minute, int second) {
setHour(hour);
setMinute(minite);
setSecond(second);
}
public int getHour() {return hour;}
public void setHour(int hour) {
if (hour < 0 || hour > 23) return;
this.hour = hour;
}
-- 중간 생략--
public String toString() {
return hour + ":" + minute + ":" + second;
}
// 메인 메서드
public static void main(String[] arge) {
Time t = new Time(12, 35, 30);
// System.out.println(t.toString());
System.out.println(t);
// t.hour = 13; 에러!
// 현재 시간보다 1시간 후로 변경한다.
t.setHour(t.getHour + 1);
System.out.println(t);
}
}
// 결과 출력
12:35:30
13:35:30
■ 제어자의 조합
대 상 | 사용 가능한 제어자 |
클래스 | public, (default), final, abstract |
메서드 | 모든 접근 제어자, final, abstract, static |
멤버 변수 | 모든 접근 제어자, final, static |
지역 변수 | final |
- 메서드에 static과 abstract를 함께 사용할 수 없다.
- static메서드는 구현부가 있는 메서드에서만 사용할 수 있기 때문이다. - 클래스에 abstract와 final을 동시게 사용할 수 없다.
- 클래스에 사용되는 final은 클래스는 확장할 수 없다는 뜻이고,
abstract는 상속을 통해서 완성되어야 한다는 뜻이기 때문에 서로 모순이다. - abstract 메서드의 접근 제어자가 private일 수 없다.
- abstract 메서드는 자식 클래스에서 구현해줘야 하는데 접근 제어자가 private면,
자식 클래스에서 접근할 수 없기 때문이다. - 메서드에 private와 final을 같이 사용할 필요가 없다.
- 접근 제어자가 private인 메서드는 오버라이딩될 수 없기 때문이다.
이 둘중 하나만 사용해도 의미가 충분하기 때문이다.
'코딩공부 > 자바' 카테고리의 다른 글
자바의 정석 - 자바의 열한 번째 이야기, 객체지향(7) (0) | 2023.03.08 |
---|---|
자바의 정석 - 자바의 열 번째 이야기, 객체지향(6) (0) | 2023.03.07 |
자바의 정석(8) - 자바의 여덟 번째 이야기, 객체지향(4) (0) | 2023.02.22 |
자바의 정석(7) - 자바의 일곱 번째 이야기, 객체지향(3) (0) | 2023.02.16 |
자바의 정석(6) - 자바의 여섯 번째 이야기, 객체지향(2) (0) | 2023.02.09 |