* 제어자(modifier) 란?

 - 클래스, 변수, 매서드의 선어부에 사용되어 부가적인 의미를 부여

 - 제어자는 크게 접근 제어자와 그 외의 제어자로 나뉜다.

 - 하나의 대상에 여러 개의 제어자를 조합하여 사용가능 하나 접근제어자는 단 하나만 사용할 수 있다.

 

* 접근 제어자 - public,protected, default, private

* 그 외 -  static, final, abstract, nativem transient, synchronized, volatile, strictfp 

 

 -> static - 클래스의, 공통적인

static이 사용될 수 있는 곳 - 맴버변수, 매서드, 초기화블럭

 

 

제어자 

 대상

의미 

 static 

 멤버변수 

  - 모든 인스턴에 공통적으로 사용되는 클래스 변수가 된다.

  - 클래스변수는 인스턴스를  생성하지 않고도 사용가능

  - 클래스가 메모리에 로드될 때 생성

 메서드

  - 인스턴스를 생성하지 않고도 호출이 가능한  static 메서드가 된다.

  - static매서드 내에서는 인스턴스  맴버들을 직접 사용할 수 없다.

   (왜? 클래스가 실행될때 생성 되기 때문에 인스턴스 멤버들은 초기화가 되어어야  생성되기 때문에 )

 

class StaticTest {

             static int width = 200;    //멤버변수에 stactic 제어자를 붙여 공통의 값을 정의한다.

             static int height =120;;  //멤버변수에 stactic 제어자를 붙여 공통의 값을 정의한다.

 

             static { // 클래스의 초기화 블럭

                        // static변수의 복잡한 초기화 수행

                      }

 

            static int max(int a, inb b) { //메서드에 static를 사용할 수 있다.

return a > b ? a: b; // 삼항 연산자

             }

  }

  

-> final - 마지막의, 변경될 수 없는 (상수)

final이 사용될 수 있는 곳 - 클래스, 매서드, 맴버변수, 지역변수 

 

- final이 붙은 변수는 상수 이므로 보통 선언과 초기화를 동시에 하지만 인스턴스변수의 경우 생성자에 초기화

  할수 있다.

 

 

 제어자

 대상

 의미

 final 

 클래스

 변경될 수 없는 클래스, 확장될 수 없는 클래스

 다른 클래스의 조상이 될 수 없다.(상속 X) 

 메서드 

 변경될 수 없는 메서드, final로 지정된 메서드는 오버라이딩을 통해 재정의   불가 (상속이 X 때문)

 멤버변수

 변수 앞에 final이 붙으면, 값을 변경할 수 없는 상수가 된다

 지역변수

 [참고] 대표적인 final. 클래스로 String과 Math가 있다.

 

 

-> abstract - 추상의, 미완성의

 

abstract가 사용될 수 있는 곳 - 클래스, 메서드

  

제어자

대상

의미

 abstract

클래스

클래스 내에 추상메서드가 선언되어 있음을 의미

매서드

선언부만 작성하고 구현부는 작성하지 않는 추상메서드임을 알린다.

 [참고] 추상메서드가 없는 클래스도 abstract를 붙여서 추상클래스로 선언 가능 하지만 그렇게 해야할 이유는 없다.

 

*접근 제어자 (access modifier)

 - 맴버 또는 클래스에 사용되어, 외부로부터 접근을 제한한다.

 - 외부로부터 데이터를 보호하기 위해서 사용(캡슐화)

 - 외부에는 불필요한, 내부적으로 사용되는, 부분을 감추기 위해(캡슐화)

 

* 접근 제어자가 사용될 수 있는 곳 - 클래스, 맴버변수, 메서드, 생성자

 

private    - 같은 클래스 내에서만 접근 가능

default    - 같은 패키지 내에서만 접근 가능

protected - 같은 패지지 내에서, 다른 패키지 자손클래스 접근이 가능

public     - 접근 제한이 전혀 없다.

 

제어자 

같은 클래스 

같은 패키지 

자손클래스 

전 체

 public

 

 

 

 

 protected

 

 

 

 

 default

 

 

 

 

 private

 

 

 

 

 

-> 생성자의 접근 제어자

 - 일반적으로 생성자의 접근 제어자는 클래스의 접근 제어자와 일치

 - 생성자에 접근 제어자 사용으로 인스턴스 생성을 제한할 수 있다.

 

-> 제어자의 조합

 

대상 

 사용가능한 제어자

 클래스

 public, (default),final, abstract

 메서드

 모든 접근 제어자, final, abstract, static

 멤버변수

 모든 접근 제어자, final, static

 지역변수

 final

 

1. 메서드에 static과 abstract를 함께 사용할 수 없다.

 - static메서드는 몸통(구현부)이 있는 메서드에서 사용가능 하기 때문

2. 클래스에 abstract와 final을 동시에 사용 할 수 없다.

 - 클래스에 final을 붙이면 클래스 확장 할수 없다는 의미고, abstract 상속을 통해서 완성 되어야 한다는 의미

    이므로 서로 모순 된다.

3. abstract 메서드의 접급제어자가 private일 수 없다.

 - abstract 메서드는 상속에 의한 자손클래스에 구현해 주어야 하기 때문

 

4. 메서드에 private과 final을 같이 사용할 필요는 없다.

 - 접근 제어자가 private인 메서드는 오버라이딩될 수 없기 때문  둘중에 하나만 사용해도 충분하다.

 

* 다형성(polymorphism)

- 여러가지 형태를 가질 수 있는 능력

- 하나의 참조변수로 여러 타입의  객체를 참조할 수 있는것

  즉 조상타입의 참조변수로 자손타입의 객체를 다룰 수 있는 것이 다형성이다.

 

 

'JAVA' 카테고리의 다른 글

예외처리(Exception handling)  (0) 2015.10.19
자바의 객체지향개념 2-3  (0) 2015.10.18
자바의 객체지향개념 2-1  (0) 2015.10.05
자바의 객체지향개념 1-3  (0) 2015.10.05
자바의 객체지향개념 1-2  (0) 2015.10.05
Posted by 달콤한부자
,