제어자
클래스, 변수 또는 메서드의 선언부에 함께 사용되어 부가적인 의미를 부여.
static
'클래스의' 또는 '공통적인'의 의미를 가지고 있다.
static | 멤버변수 | - 모든 인스턴스에 공통적으로 사용되는 클래스 변수가 됨 - 클래스 변수는 인스턴스를 생성하지 않고도 사용 가능 - 클래스가 메모리에 로드될때 생성 |
메서드 | - 인스턴스를 생성하지 않고도 호출이 가능 - static 메서드 내에서는 인스턴스 멤버들을 직접 사용할 수 없음 |
final
'마지막의' 또는 '변경될 수 없는'의 의미
final | 클래스 | 변경될 수 없는, 확장할 수 없는 클래스 fianl로 지정된 클래스는 다른 클래스의 조상이 될수 없음 |
메서드 | 변경될 수 없는 메서드 final로 지정된 메서드는 오버라이딩을 통해 재정의될 수 없음 |
|
멤버변수 | fianl로 지정된 변수는 값을 변경할 수 없는 상수가 됨 | |
지역변수 |
abstract
'미완성'의 의미
메서드의 선언부만 작성하고 실제 수행내용은 구현하지 않은 추상 메서드를 선언하는데 사용됨
abstract | 클래스 | 클래스 내에 추상 메서드가 선언되어 있음을 의미 |
메서드 | 선언부만 작성하고 구현부는 작성하지 않은 추상 메서드임을 알림 |
* 추상 클래스는 미완성 메서드가 존재하므로 인스턴스를 생성할 수 없다.
클래스 자체는 쓸모가 없지만, 다른 클래스가 이 클래스를 상속받아서 일부의 원하는 메서드만 오버라이딩 해도 된다는 장점이 있다.
* 추상 클래스(abstract class)
완성되지 않은 메서드(추상 메서드)를 포함하고 있는 클래스.
추상 클래스에서 메서드의 선언부만 작성하고 구현부는 미완성으로 남겨 둠으로써 그 이후에 상속 받는 자손 클래스의 용도에 따라 메서드를 다르게 구현하기 위한 것.
접근 제어자
private | 같은 클래스 내에서만 접근 가능 |
default | 같은 패키지 내에서만 접근 가능 |
protected | 같은 패키지 내에서, 그리고 다른 패키지의 자손 클래스에서 접근 가능 |
public | 접근 제한이 전혀 없음 |
사용 이유(= 캡슐화)
클래스의 내부에 선언된 데이터를 보호하기 위해.
클래스 내부의 작업을 위해 임시로 사용되는 멤버변수나 부분작업을 처리하기 위한 메서드 등의 멤버들을 클래스 내부에 감추기 위해.
1. 메서드에 static과 abstract를 함께 사용할 수 없다.
2. 클래스에 abstract와 final을 동시에 사용할 수 없다.
3. abstract메서드의 접근 제어자가 private일 수 없다.
4. 메서드에 private과 final을 같이 사용할 필요는 없다.
728x90
'Language > Java' 카테고리의 다른 글
4.7 객체 지향 프로그래밍 (인터페이스) (0) | 2021.07.12 |
---|---|
4.6 객체 지향 프로그래밍 (다형성) (0) | 2021.07.09 |
4.4 객체 지향 프로그래밍 (상속, 오버라이딩) (0) | 2021.07.09 |
4.3 객체 지향 프로그래밍 (오버로딩, 생성자) (0) | 2021.07.08 |
4.2 객체 지향 프로그래밍 (변수와 메서드) (0) | 2021.07.07 |