Programming Language/Java

[Java] 객체지향언어(3) | 제어자(modifier), 접근 제어자(access modifier)

성니 2021. 1. 31. 19:12

http://www.kyobobook.co.kr/product/detailViewKor.laf?ejkGb=KOR&mallGb=KOR&barcode=9788994492032&orderClick=LEa&Kc=

 

Java의 정석 - 교보문고

자바의 기초부터 객제지향개념을 넘어 실전활용까지 수록한『Java의 정석』. 저자의 오랜 실무경험과 강의한 내용으로 구성되어 자바를 처음 배우는 초보자들의 궁금한 점을 빠짐없이 담고 있

www.kyobobook.co.kr

2021/01/24 - [Programming Language/Java] - [Java] 객체지향언어(1) | 클래스와 객체, 인스턴스, 객체 배열

 

[Java] 객체지향언어(1) | 클래스와 객체, 인스턴스, 객체 배열

http://www.kyobobook.co.kr/product/detailViewKor.laf?ejkGb=KOR&mallGb=KOR&barcode=9788994492032&orderClick=LEa&Kc= Java의 정석 - 교보문고 자바의 기초부터 객제지향개념을 넘어 실전활용까지 수록한『Jav..

i-am-seongni.tistory.com

2021/01/25 - [Programming Language/Java] - [Java] 객체지향언어(2) | 변수와 메서드, 생성자

 

[Java] 객체지향언어(2) | 변수와 메서드, 생성자

http://www.kyobobook.co.kr/product/detailViewKor.laf?ejkGb=KOR&mallGb=KOR&barcode=9788994492032&orderClick=LEa&Kc= Java의 정석 - 교보문고 자바의 기초부터 객제지향개념을 넘어 실전활용까지 수록한『Jav..

i-am-seongni.tistory.com


[제어자(modifier)]

* 제어자란?

클래스, 변수 또는 메서드의 선언부에 함께 사용되어 부가적인 의미를 부여한다.

제어자는 클래스, 멤버변수, 메서드에 주로 사용되는데, 하나의 대상에 대해 제어자를 여러 개 조합해서 사용하는 게 가능하다.

단, 접근 제어자한 번에 한 가지만 사용할 수 있다.

 

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

- 그 외 : static, final, abstract, native, transient, synchronized, volatile, strictfp

 

 

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

멤버변수, 메서드, 초기화블럭에 사용

인스턴스 변수는 각각 다른 값을 유지하지만, 클래스 변수(static 멤버변수)는 인스턴스에 관계없이 값을 가진다.

하나의 변수를 모든 인스턴스가 공유하기 때문이다.

static이 붙은 멤버변수와 메서드, 초기화 블럭은 클래스에 연결된 것이기 때문에 인스턴스를 생성하지 않아도 사용할 수 있다.

인스턴스 멤버를 사용하지 않는 메서드는 static을 붙이는 것이 더 효율적이다.

인스턴스를 생성하지 않고도 호출이 가능해서, 더 편리하고 속도도 빠르다.

 

 

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

클래스, 메서드, 멤버변수, 지역변수에 사용

final 제어자는 변수에 사용되면 상수가 되고, 메서드에 사용되면 오버라이딩을 할 수 없고, 클래스에 사용되면 자손 클래스를 정의할 수 없다.

final이 붙은 변수는 상수여서, 일반적으로 선언과 초기화를 동시에 할 수 있다.

인스턴스 변수의 경우 생성자에서 초기화 되도록 할 수 있는데, 그 예시는 아래의 코드를 참고하자.

class Card {
    final int NUMBER;	// 상수지만 선언과 함께 초기화 하지 않고
    final String KIND;	// 생성자에서 단 한번만 초기화 할 수 있다.
    
    Card (String kind, int num) {
    	KIND = kind;	// 매개변수로 넘겨받은 값으로
        NUMBER = num;	// KIND와 NUMBER를 초기화한다.
}

 

 

- abstract : 추상의, 미완성의

클래스, 메서드에 사용

메서드의 선언부만 작성하고 실제 수행 내용은 구현하지 않은 추상 메서드를 선언할 수 있다.

클래스에 사용되면 클래스 내에 추상 메서드가 존재함을 쉽게 알 수 있다.

아직 완성되지 않은 메서드가 존재하는 '미완성 설계도'이므로 인스턴스를 생성할 수 없다.

abstract class AbstractTest {	// 추상 클래스(추상 메서드를 포함한 클래스)
	abstract void down();	// 추상 메서드(구현부가 없는 메서드)
}

 

 

 

[접근 제어자(access modifier)]

* 접근 제어자(access modifier)

멤버, 클래스에 사용

해당하는 멤버 또는 클래스를 외부에서 접근하지 못하도록 제한한다.

클래스나 멤버변수, 메서드, 생성자에 접근 제어자가 지정되어 있지 않다면, 접근 제어자가 default임을 뜻한다.

 

- private : 같은 클래스 내에서만 접근이 가능하다.

- default : 같은 패키지 내에서만 접근이 가능하다.

- protected : 같은 패키지 내에서 / 다른 패키지의 자손클래스에서 접근이 가능하다.

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

 

 

 

- 제어자(modifier)의 조합

대상 사용 가능한 제어자
클래스 public, (default), final, abstract
메서드 모든 접근 제어자, final, abstract, static
멤버변수 모든 접근 제어자, final, static
지역변수 final

 

- 제어자를 조합할 때 주의할 점

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

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

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

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

728x90