제어자 (modifier)
클래스와 클래스의 멤버(멤버 변수, 메서드)에 부가적인 의미 부여
접근 제어자 : public, protected, (default), private (4개 중 하나만)
그외 : static, final, abstract, native, transient, synchronized, volatile, strictfp
- 하나의 대상에 여러 제어자 같이 사용 가능 (접근 제어자는 하나만)
- 순서는 상관없지만 접근 제어자를 제일 왼쪽에 쓰는 것이 관례적
static - 클래스의, 공통적인
제어자 | 대상 | 의미 |
static | 멤버변수 | - 모든 인스턴스에 공통적으로 사용되는 클래스 변수가 됨 - 클래스 변수는 인스턴스를 생성하지 않고도 사용 가능 - 클래스가 메모리에 로드될 때 생성됨 |
메서드 | - 인스턴스를 생성하지 않고도 호출가능한 static 메서드가 됨 - static 메서드 내에서는 인스턴스 멤버들을 직접 사용할 수 없음 |
객체 생성없이 사용가능
final - 마지막의, 변경될 수 없는
제어자 | 대상 | 의미 |
final | 클래스 | - 변경될 수 없는 클래스, 확장될 수 없는 클래스가 됨 ➔ 다른 클래스의 조상이 될 수 없음 |
메서드 | - 변경될 수 없는 메서드 ➔ 오버라이딩을 통해 재정의 될 수 없음 |
|
멤버변수 | - 변수 앞에 final이 붙으면 값을 변경할 수 없는 상수가 됨 |
|
지역변수 |
ex) string, Math ...
abstract - 추상의, 미완성의
제어자 | 대상 | 의미 |
abstract | 클래스 | - 클래스 내에 추상 메서드가 선언되어 있음을 의미 |
메서드 | - 선언부만 작성하고 구현부는 작성하지 않은 추상메서드임을 알림 |
미완성 클래스 ➔ 객체 생성 불가 ( 상속받아서 추상클래스를 완전한 클래스를 만든 후에 객체 생성 가능 )
접근 제어자 (access modifier)
제어자 | 같은 클래스 | 같은 패키지 | 자손 클래스 (다른 패키지) |
전체 |
public | O | O | O | O |
protected | O | O | O | |
(default) | O | O | ||
private | O |
public > protected > (default) > private
class 앞 - public / (default)
멤버변수 앞 - public / default / (default) / private
< 예제 >
문제 : pkg1의 MyParent 클래스의 접근제어자가 default라서 pkg2에서 Myparent 상속 에러뜸
해결 :
1. pkg1의 MyParent 클래스의 접근제어자를 public으로 변경
2. public은 1개만 가능해서 MyParentTest 접근제어자를 (default)로 변경후 클래스 이름 변경
3. MyParentTest2 에서 import문 추가
'JAVA > 자바의 정석' 카테고리의 다른 글
[자바의 정석 - 기초편] 7. (7) 다형성 ( 참조변수의 형변환 / instanceof 연산자 ) (0) | 2023.11.30 |
---|---|
[자바의 정석 - 기초편] 7. (6) 캡슐화 / 다형성 (0) | 2023.11.30 |
[자바의 정석 - 기초편] 7. (4) 패키지 / 클래스 패스 / import문 / static import문 (0) | 2023.11.30 |
[자바의 정석 - 기초편] 7. (3) 참조변수 super / 생성자 super() (0) | 2023.11.29 |
[자바의 정석 - 기초편] 7. (2) 오버라이딩 (overriding) / 오버로드 (overload) (0) | 2023.11.29 |