티스토리 뷰
제어자 (modifier)
제어자 (modifier)는 클래스, 변수, 메서드의 선언부에 함께 사용되어 부가적인 의미를 부여
제어자의 종류는 접근 제어자와 그 외 제어자로 나눌 수 있다.
클래스나 멤버변수와 메서드에 주로 사용되며, 하나의 대상에 대해서 여러 제어자를 조합하여 사용하는 것이 가능
단, 접근 제어자는 4가지 중 하나만 선택해서 사용할 수 있다.
접근 제어자는 멤버 또는 클래스에 사용되어 해당 멤버 또는 클래스를 외부에서 접근하지 못하도록 제한하는 역활을 한다.
접근 제어자 public, protected, default, private (4가지 중 1개만 사용 가능)
그 외 제어자 static, fianl, abstract, native, transient, synchronized, volatile, stricftp
static
'공통적인' 의미를 가지고 있다.
멤버 변수, 메서드, 초기화 블럭에 사용될 수 있다.
인스턴스를 생성하지 않고도 사용 가능하다.
static 메서드는 몸통이 있는 메서드에만 사용할 수 있다.
(인스턴스 메서드와 static메서드의 차이는 메서드 내에서 인스턴스 멤버를 사용하는가의 여부에 있다.)
※ static 초기화 블럭은 클래스가 메모리에 로드될 때 단 한번만 수행되며, 주로 클래스변수(static 변수)를 초기화하는데 주로 사용된다.
static 사용될 수 있는 곳 - 멤버 변수, 메서드, 초기화 블럭
제어자 | 대상 | 의미 |
static | 멤버변수 | 모든 인스턴스에 공통적으로 사용되는 클래스 변수가 된다 |
클래스 변수는 인스턴스를 생성하지 않고도 사용 가능하다 | ||
클래스가 메모리에 로드될 때 생성된다 | ||
메서드 | 인스턴스를 생성하지 않고도 호출 가능한 static 메서드가 된다 | |
static 메서드 내에서는 인스턴스 멤버들을 직접 사용할 수 없다 |
class StaticTest {
static int width = 200; // 클래스 변수(static 변수)
static int height = 100; // 클래스 변수(static 변수)
static { // 클래스 초기화 블럭
}
static int max(int a, int b) { // 클래스 메서드 (static 메서드)
return a > b ? a : b;
}
}
fianl
'마지막의', '변경될 수 없는' 의미를 가지며, 거의 모든 대상에 사용할 수 있다.
변수에 사용되면 값을 변경할 수 없는 상수가 된다.
메서드에 사용되면 오버 라이딩을 사용할 수 없다.
클래스에 사용되면 자손 클래스를 정의할 수 없다.
※대표적인 fianl 클래스로 String과 Math가 있다.
fianl 사용될 수 있는 곳 - 클래스, 멤버 변수, 메서드, 지역변수
제어자 | 대상 | 의미 |
fianl | 클래스 | 변경될 수 없는 클래스, 확장될 수 없는 클래스가된다. fianl로 지정된 클래스는 다른 클래스의 조상이 될 수 없다. |
메서드 | 변경될 수 없는 메서드, fianl로 지정된 메서드는 오버라이딩이 불가하다 | |
멤버변수 | 변수 앞에 fianl이 붙으면, 값을 변경할 수 없는 상수가 된다 | |
지역변수 |
fianl class FianlTest { // 조상이 될 수 없는 클래스
fianl int MAX_SIZE = 100; // 값을 변경할 수 없는 멤버변수(상수)
fianl void getMaxSize() { // 오버라이딩할 수 없는 메서드 (내용 변경 불가)
fianl int LV = MAX_SIZE; // 값을 변경할 수 없는 지역변수(상수)
return MAX_SIZE;
}
}
abstract
'추상의', '미완성'의 의미를 가지고 있다.
실제 수행내용은 구현하지 않은 추상 메서드를 선언하는데 사용된다.추상 클래스는 완성되지 않은 메서드가 존재하는 '미완성'이므로 인스턴스를 생성할 수 없다.abstract 클래스는 상속을 통해 완성해야한다.
abstract 사용될 수 있는 곳 - 클래스, 메서드
제어자 | 대상 | 의미 |
abstract | 클래스 | 클래스 내에 추상 메서드가 선언되어 있음을 의미한다 |
메서드 | 선언부만 작성하고 구현부는 작성하지 않은 추상 메서드임을 알린다 |
abstract class AbstractTest { // 추상 클래스 (추상 메서드를 포함한 클래스)
abstract void move(); // 추상메서드 (구현부 {} <-가 없는 메서드)
}
접근 제어자 (access modifier)
접근 제어자는 멤버 또는 클래스에 사용되어 해당 멤버 또는 클래스를 외부에서 접근하지 못하도록 제한하는 역활을 한다.
접근 제어자는 4가지 중 하나만 선택해서 사용할 수 있다.
접근 제어자를 사용하는 이유
- 외부로부터 데이터를 보호하기 위해서
- 외부에 불필요한, 내부적으로만 사용되는., 부분을 감추기 위해서
접근 범위가 넓은 쪽에서 좁으쪽의 순으로 나열하면 아래와 같다.
public > protected > (default) > private
제어자 | 같은 클래스 | 같은 패키지 | 자손 클래스 | 전체 |
public (접근제한 x) | O | O | O | O |
protected | O | O | O | |
(default) | O | O | ||
private | O |
대상 | 사용 가능한 접근 제어자 |
클래스 | public, (default) |
메서드 | public, protected, (default), private |
멤버변수 | |
지역변수 | 없음 |
생성자의 접근제어자
생성자의 접근 제어자를 private으로 지정하면, 외부에서 접근이 불가하기 때문에 인스턴스를 생성할 수 없다.
그래도 클래스 내부에서는 인스턴스 생성할 수 있다.
제어자(modifier)의 조합 (정리)
대상 | 사용 가능한 접근 제어자 |
클래스 | public, protected, (default), private |
메서드 | 모든 접근 제어자, fianl, abstract, static |
멤버변수 | 모든 접근 제어자, fianl, static |
지역변수 | fianl |
- 메서드에 static과 abstract를 함께 사용할 수 없다.
- 클래스에 abstract와 fianl을 같이 사용할 수 없다
- abstract 메서드의 접근제어자가 private일 수 없다
- 메서드에 private과 fianl을 같이 사용할 필요가 없다.
'study > Java' 카테고리의 다른 글
인터페이스 (interface) (0) | 2022.12.26 |
---|---|
추상 클래스 & 메서드 (0) | 2022.12.22 |
오버라이딩 (overriding) (0) | 2022.12.17 |
상속 (inheritance) (0) | 2022.11.16 |
생성자 (constructor) (0) | 2022.11.10 |
- Total
- Today
- Yesterday
- Java
- 환경 변수 설정
- 웹페이지
- 면접을 위한 CS 전공 지식 노트
- 배열
- 톰캣
- Spring
- 디자인 패턴
- django
- musma
- 커맨드 객체
- 회원 로그인
- django-environ
- path variable
- 혼자 공부하는 파이썬
- git 공부
- error: failed to push some refs to 'https://github.com/
- authenticate()
- git
- 한글 형태소 분석기
- API
- 회원가입
- git공부
- python3
- Python
- Django tutorial
- 검색 결과 내 페이지네이션
- Magazine K
- django.contrib.auth
- 암호화
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |