본문 바로가기

자바/기초를 자바

JAVA 제어자

제어자

1. 패키지
클래스와 인터페이스의 집합
파일을 효율적으로 관리
클래스 간 이름 충돌 문제 해결
모든 클래스는 하나 이상의 패키지에 포함되어야 한다. 기본적으로는 이름 없는 패키지(unnamed package)에 포함된다. 따라서 기본적으로 모든 클래스와 인터페이스는 같은 패키지에 포함된다.

제어자
클래스와 클래스 멤버 선언시 사용하여 부가적인 의미를 부여하는 키워드
접근 제어자와 기타 제어자로 구분
접근제어자는 한버에 하나만 사용가능
기타 제어자는 경우에 따라 여러개 사용 가능

2. 접근 제어자
객체 지향에서의 정보 은닉: 사용자가 알 필요 없는 정보는 숨겨야 한다.
이를 위해 접근 제어자 사용
2.1 private
외부 공개 X, 외부에서 직접 접근 불가
자바 프로그램은 private 멤버에 직접 접근할 수 없으며, 해당 객체의 public 메소드 통해서만 접근 가능
클래스 내 세부적 동작을 구현하는 데 사용

2.2 public
외부 공개
해당 객체를 사용하는 프로그램 어디서나 직접 접근 가능
private 멤버와 프로그램 사이의 인터페이스 역할 수행


2.3 default
클래스 및 클래스 멤버의 접근 제어 기본값
접근 제어자 미지정시 자동으로 default로 지정됨
같은 클래스, 같은 패키지에 속하는 멤버에서만 접근 가능


2.4 protected
부모클래스와 관련된 접근 제어자

protected 멤버는 부모 클래스에 대해서는 public 멤버처럼 취급되며, 외부에서는 private 멤버처럼 취급됨

클래스의 protected 멤버에 접근할 수 있는 영역

이 멤버를 선언한 클래스의 멤버

이 멤버를 선언한 클래스가 속한 패키지의 멤버

이 멤버를 선언한 클래스를 상속받은 자식 클래스의 멤버

>> 즉 같은 패키지에 속하는 클래스와 다른 패키지에 속하는 자식 클래스에서만 접근 가능

접근제어자 같은 클래스의 멤버 같은 패키지의 멤버 자식 클래스의 멤버 그외
public O O O O
protected O O O X
default O O X X
private O X X X


3. 기타 제어자

3.1 final 제어자

필드, 지역 변수에 사용시 값을 변경할 수 없는 상수(constant)가 됨

클래스에 사용시 해당 클래스는 다른 클래스가 상속받을 수 없음

메소드에 사용시 해당 메소드는 오버라이딩 불가능

 

3.2 static 제어자

'공통적인'이라는 의미

변수에 사용시 해당 변수를 클래스 변수로 만들어줌

메소드에 사용시 해당 메소드를 클래스 메소드로 만들어줌

 

static 제어자를 갖는 멤버들의 특징

프로그램 시작시 최초 단 한번만 생성되고 초기화됨

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

해당 클래스의 모든 인스턴스가 공유됨

 

3.3 abstract 제어자

'추상적인'이라는 의미

추상메소드: 선언부만 있고 구현부가 없는 메소드

추상클래스: 하나 이상의 추상 메소드를 포함

 

사용가능한 제어자 조합

대상 함께 사용가능한 제어자
클래스 public, (default), final, abstract
메소드 모든 접근 제어자, final, static, abstract
필드 모든 접근 제어자, final, static
지역변수 final
초기화 블록 static

 

함께 사용할 수 없는 제어자들

클래스에 final과 abstract

: final 제어자를 갖는 클래스는 다른 클래스가 상속받을 수 없음

abstract 제어자를 갖는 클래스는 다른 클래스가 상속해서 오버라이딩 해야만 사용 가능

 

메소드에 static과 abstract

abstract 제어자를 갖는 메소드는 선언부만 있고 구현부가 없는 메소드

static 제어자를 갖는 메소드는 인스턴스를 생성하지 않고도 바로 사용가능해야 함

 

메소드에 private와 abstract

static 제어자를 갖는 메소드는 다른 클래스가 상속해서 오버라이딩 해야만 사용가능

private 제어자를 갖는 메소드는 자식 클래스가 접근 불가능

 

메소드에 private와 final

모두 해당 메소드가 오버라이딩을 통한 재정의를 할 수 없다는 의미를 가지므로 동시에 사용할 필요가 없다,

 

출처

 

코딩교육 티씨피스쿨

4차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파이썬 등

tcpschool.com

 

'자바 > 기초를 자바' 카테고리의 다른 글

알고리즘이란?  (0) 2022.12.01
get()과 set()  (0) 2022.05.05
[JAVA] BufferedReader, BufferedWriter 란 무엇인가  (0) 2022.05.03
String 예제  (0) 2022.05.02