1. 제어자란??
- 클래스, 변수, 메서드의 선언부에 사용되어 부가적인 의미를 부여한다.
- 제어자는 크게 접근 제어자와 그 외의 제어자로 나뉜다.
- 하나의 대상에 여러 개의 제어자를 조합해서 사용할 수 있으나,
접근제어자는 단 하나만 사용할 수 있다.
접근제어자 - public, pretected, default, private
그 외 - static, final, abstract, native, transient, syschronized, volatile, strictfp
1-1 그 외 제어자
자주 쓰이는 static, final, abstract에 대해 알아보자.
나머지 그 외 제어자는 자바 프로그래밍을 하면서 익혀 나가면 된다.
▶ static - 클래스의, 공통적인
static 제어자는 가장 친숙한 제어자다.
static이 사용될 수 있는 곳은 멤버변수, 메서드, 초기화 블럭이 있다.
의미는 다음과 같다.
static 멤버변수 - 모든 인스턴스에 공통적으로 사용되는 클래스변수가 된다.
- 클래스변수는 인스턴스를 생성하지 않고도 사용 가능하다.
- 클래스가 메모리에 로드될 때 생성된다.
stait 메서드 - 인스턴스를 생성하지 않고도 호출이 가능한 static 메서드가 된다.
- static메서드 내에서는 인스턴스멤버들을 직접 사용할 수 없다.
▶ final - 마지막의, 변경될 수 없는
final이 사용될 수 있는 곳 - 클라스, 메서드, 멤버변수, 지역변수
final 클래스 - 변경될 수 없는 클래스, 즉 확장될 수 없는 클래스가 된다.
그래서 final로 지정된 클래스는 다른 클래스의 조상이 될 수 없다.
final 메서드 - 변경될 수 없는 메서드, final로 지정된 메서드는 오버라이딩을
통해 재정의 될 수 없다.
final 멤버, 지역 변수 - 변수 앞에 final이 붙으면, 값을 변경할 수 없는 상수가 된다.
▶ abstract - 추상의, 미완성의
abstract가 사용될 수 있는 곳은 클래스와 메서드이다.
abstract 클래스는 클래스 내에 추상메서드가 선언되어 있음을 의미한다.
abstract 메서드는 선언부만 작성하고 구현부는 아직 작성하지 않은 추상메서드임을 알린다.
1-2 접근 제어자
- 멤버 또는 클래스에 사용되어, 외부로부터 접근을 제한한다.
제어자 |
같은 클래스 |
같은 패키지 |
자손클래스 |
전체 |
public |
o |
o |
o |
o |
protacted |
o |
o |
o |
x |
default |
o |
o |
x |
x |
private |
o |
x |
x |
x |
위 표는 접근 가능한 범위를 나타낸 것이다.
private - 같은 클래스 내에서만 접근이 가능하다.
default - 같은 패키지 내에서만 접근이 가능하다.
protacted - 같은 패키지 내 + 자손클래스에서 접근이 가능하다.
public - 접근 제한이 전혀 없다.
▶ 접근 제어자를 이용한 캡슐화
접근제어자를 사용하는 이유
- 외부로부터 데이터를 보호하기 위해
- 외부에는 불필요한, 내부적으로만 사용되는, 부분을 감추기 위해서 사용 한다.
위 예제를 보면 제어자의 사용이유를 잘 이해할 수 있을 것이다.
접근 제어자가 없다면 메인 클래스에서 t.hour=100;을 해버린다면 시간 범위에 초과된 숫자임에도 변경이 될 수 밖에없다. 하지만 private 접근 제어자를 이용해서 public메서드를 이용해야만 멤버 변수 접근이 가능하게 한다면, 범위를 지정해줄 수 있다.
▶ 제어자의 조합
(1). 메서드에 static과 abstract를 함께 사용할 수 없다.
-static 메서드는 몸통(구현부)이 있는 메서드에만 사용할 수 있기 때문이다.
(2). 클래스에 abstract와 final을 동시에 사용할 수 없다.
- 클래스에 사용되는 final은 클래스를 확장할 수 없다는 의미이고, abstract는 상속을 통하여 완성되어야 한다는 의미이므로 서로 모순되기 때문이다.
(3). abstract메서드의 접근제어자가 private일 수 없다.
- abstract메서드는 자손클래스에서 구현해주어야 하는데 접근 제어자가 private이면, 자손클래스에서 접근할 수 없기 때문이다.
(4). 메서드에 private와 final을 같이 사용할 필요는 없다.
- 접근 제어자가 private인 메서드는 오버라이딩될 수 없기 때문이다. 이 둘 중 하나만 사용해도 의미가 충분하다.
'Foundation > - Java' 카테고리의 다른 글
예외처리 (1) | 2017.08.17 |
---|---|
추상클래스, 인터페이스, 내부클래스 (0) | 2017.08.15 |
생성자 (0) | 2017.07.28 |
변수와 메서드 (0) | 2017.07.26 |
객체지향언어란(클래스, 객체) (0) | 2017.07.26 |