JAVA/자바의 정석

[자바의 정석 - 기초편] 7. (5) 제어자 ( static, final, abstract ) / 접근 제어자 ( private, default, protected, public )

서영22 2023. 11. 30. 04:22

 제어자 (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문 추가