본문 바로가기

Foundation/- Java

제어자(modifier)

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

protacted 

default 

private 

위 표는 접근 가능한 범위를 나타낸 것이다.

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