SyntaxHighlighter.all(); [자바] 제어자(Modifier)- 접근제어자와 기타제어자 :: 게을러지고 싶어 부지런한 개발자

제어자란?

-주로 클래스, 변수 또는 메소드에 사용되며, 부가적 의미를 부여

-크게 접근제어자와 기타제어자로 나눌 수 있음

 

접근제어자(4가지 중 하나만 선택해서 사용 가능) public, protected, default, private 

기타제어자(여러 제어자 조합하여 사용 가능)  :     static, fianl, abstractm native, transient, synchronized, volatile, strictfp

 

 

Ⅰ.접근제어자

접근 제어자를 사용하는 이유

 

 - 데이터가 유효한 값을 유지하도록, 또는 비밀번호와 같은 데이털르 외부에서 함부로 변경하지 못하도록 하기 위해 .

  이것을 데이터 감추기 또는 데이터 은닉(data hiding)이라고 하며, 객체지향개념의 캡슐화(encapsulation)에 해당

  -외부에서 접근할 필요가 없는 멤버들을 private으로 지정하여 외부에 노출시키지 않음으로써 복잡성 줄임.

 

 

 

접근범위가 넓은 쪽에서 좁은 쪽의 순으로 왼쪽부터 나열

public > protected > (default) > private  

 

제어자 

같은 클래스 

같은 패키지  

다른 패키지 자손클래스 

전체 

public 

 

 

 

 

protected

 

 

 

 

(default) 

 

 

 

 

 private

 

 

 

 

 

 

 

private 접근제어자:

private 접근 제어자를 사용하여 선언된 클래스 멤버는 외부에 공개되지 않으며, 외부에서는 직접 접근 X

즉, 자바 프로그램은 private 멤버에 직접 접근할 수 없으며, 해당 객체의 public 메소드를 통해서만 접근할 수 O

private

 

 

 

default 접근제어자:

default를 위한 접근 제어자는 따로 존재 안하며, 접근 제어자가 지정되지 않으면 자동적으로 default 접근 제어를 갖게됨

 

 

default 접근 제어를 가지는 멤버는 같은 클래스의 멤버와 같은 패키지에 속하는 멤버에서만 접근할 수 있음.

default

 

 

 

 

 

protected 접근제어자:

-같은 패키지 내에서, 그리고 다른 패키지의 자식클래스에서 접근 가능

 protected

 

 

 

public 접근제어자:

public 접근 제어자를 사용하여 선언된 클래스 멤버는 외부로 공개되며, 해당 객체를 사용하는 프로그램 어디에서나 직접 접근 가능

 default

 

 

 

 

Ⅱ.기타제어자

-static, fianl, abstractm native, transient, synchronized, volatile, strictfp

-하나의 대상에 대해 여러 제어자를 조합하여 사용하는 것이 가능

 

static - 클래스의, 공통적인

 사용될 수 있는 곳 - 클래스, 메소드, 초기화 블럭

 

<static이 붙은 멤버변수>

-모든 인스턴스에 공통적으로 사용되는 클래스변수(=static이 붙은 변수)가 됨

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

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

 

<static이 붙은 메소드>

-인스턴스를 생성하지 않고도 사용 가능

-static이 붙은 메소드 내에서는 인스턴스 멤버들을 직접 사용할 수 X

 

 

 

final - 마지막의, 변경될 수 없는

-마지막, 또는 변경될 수 없는 의미를 가지며 거의 모든 대상에 사용 가능

 

용될 수 있는 곳 - 클래스, 메소드, 멤버변수, 지역변수  

 

-final이 붙은 변수는 상수이므로 일반적으로 선언과 초기화를 동시에 하지만, 생성자를 이용하여 인스터스변수의 경우 final멤버변수의 초기화를 가능하게 함

즉, 클래스 내에 매개변수를 갖는 생성자를 선언하여 final이 붙은 멤버변수가 다른 값을 갖도록 하는 것이 가능

 

 

 

abstract - 추상의, 미완성의

-'미완성'의 의미를 가지므로 메소드의 선언부만 작성하고 실제 수행내용은 구현하지 않은 추상메소드 선언 시 사용 됨

 용될 수 있는 곳 - 클래스, 메소드

 

 

+ Recent posts