innn

제어자(public, protected, (default), private), static, final, abstract 본문

JAVA/자바의 정석 기초편_남궁성(2020)

제어자(public, protected, (default), private), static, final, abstract

33삼 2022. 7. 10. 18:21

제어자 modifier

- 클래스와 클래스의 멤버(멤버변수, 메소드)에 부가적인 의미 부여

마치 명사를 꾸며주는 형용사와 같은 역할(형용사 + 명사)

 

접근 제어자      public, protected, (default), private
그           외       static, final, abstract, native, transient, synchronized, volatile, strictfp

 

 

static 

대상은 두 가지 : 1. 멤버변수 2. 메소드 

멤버변수 iv 앞에 붙으면(ex. static int width) cv클래스 변수가 된다

 

스태틱 메소드에는 iv(인스턴스 멤버들, iv,im) 사용 불가능이다 왜? 인스턴스멤버는 객체 생성을 해야 사용가능하니까.

스태틱이 붙으면 객체 생성없이 사용가능해진다.  그래서 클래스 변수가됨.

 

 

final - 마지막의, 변경될 수 없는

대상은 네가지 : 클래스 메소드 멤버변수 지역변수 

1. 클래스

변경될 수 없는 클래스, 확장될 수 없는 클래스가 된다.

그래서 final로 지정된 클래스는 다른 클래스의 조상이 될 수 없다.

 

2. 메소드

변경될 수 없는 메소드. final로 지정된 메소드는 오버라이딩을 통해 재정의 될 수 없다.

 

3. 멤버변수

4. 지역변수

변수 앞에 final이 붙으면, 값을 변경할 수 없는 상수가 된다.

 

어떤 대상에 붙냐에 따라 좀 다름.

 

클래스  앞에 붙으면 상속 불가능한 클래스가 됨.

메소드 앞에 붙으면 변경, 오버라이딩할 수 없는 메소드가 됨

변수 앞에 붙으면 상수가 됨.

 

abstract - 추상의, 미완성의

대상은 두가지 : 클래스 메소드

 

 

 

추상클래스는 바로 객체 생성불가능함

왜냐? 미완성 설계도 상태이기 때문. 그래서 제품(인스턴스=객체) 생산 불가.

추상클래스는 상속을 받아서 완전한 클래스를 만든 후에 객체 생성 가능.

(미완성 설계도)                     (완성된 설계도)

 

protected 접근 제한자.

protected 접근 제한자는 상속과 관련있다. 

일단, protected는 public과 default 접근 제한의 중간쯤 해당한다. 같은 패키지에서는 default와 같이 접근 제한이 없지만, 다른 패키지에서는 자식 클래스만 접근을 허용한다.

 

----------------------------------------------- pakage1 -------------------------------------------------------------------------------------------

public class A {
          protected 멤버
}

class B { 

}

 

----------------------------------------------- pakage2 -------------------------------------------------------------------------------------------

class C {
// 다른 패키지이므로. 클래스 A의 protected 멤버가 올 수 없음
}

class D extends A {
// 다른 패키지임에도. 클래스 A의 protected 멤버가 올 수 있음. 왜냐? 상속 받았으니까.
}

 

protected는 필드와 생성자, 

'JAVA > 자바의 정석 기초편_남궁성(2020)' 카테고리의 다른 글

다형성  (0) 2022.07.17
import문  (0) 2022.07.10
패키지(pakage)  (0) 2022.07.10
참조변수 super, 생성자 super()  (0) 2022.07.10
오버라이딩Overriding (오버로딩이랑 완전 다른 거임)  (0) 2022.07.06