제어자(modifier)


제어자(modifier) 클래스 혹은 멤버(변수, 메서드) 선언부에 사용되어 부가적인 의미를 더해주는 역할을 수행합니다.

 

접근 제어자의 경우 네 가지 중 하나만 사용 가능했다면, 제어자는 여러 개를 사용할 수 있습니다.

 

ex) public static final int a = 20;

 

이번 글에서는 static, final, abstract 세 가지만 우선 다뤄보겠습니다.

 

(native, synchronized와 같은 다른 제어자들에 대해서는 나중에 다룹니다!)

 

그 전에 클래스 앞에 public이 붙는 것을 보신 적이 있으실겁니다. 이에 대해 간단히 알아보겠습니다.

 

한 소스 파일에는 클래스 앞에 public은 한 개만 붙을 수 있습니다. 즉 한 소스 파일에 public class~~는 한 개만 선언될 수 있습니다.

 

그 이유는 우리가 한 소스 파일에 여러 개의 클래스가 있을 때 하나의 대표 클래스를 지정해주게 되면 코드의 가독성에 상당한 도움이

 

되기 때문입니다. 또 이 public을 통해 소스 파일이 어떤 이름으로 저장될지 예상할 수 있다는 장점이 있습니다.


제어자 static, final, abstract


우리가 앞서 static 변수와 메서드에 대해서 다루었고 이번 글에서 다룰 내용도 동일하므로 생략하도록 하겠습니다.

 

따라서 메모리에 올라가면서 공통으로 사용될 수 있는 부가적인 의미를 가지는 변수 혹은 메서드라고 요약하겠습니다!

 


final의 경우는 그 단어 뜻(마지막의, 최후의)에서 알 수 있듯이 변경되지 않는 최종적인이라는 부가적인 의미를 가지게 됩니다.

 

클래스 앞에 붙게 되는 경우에는 더 이상 상속할 수 없음을 의미합니다. 예를 들어 final class A ~ 가 있다면 이 클래스 A는 더이상 상속

 

할 수 없습니다.

 

메서드 앞에 붙게 되는 경우에는 더 이상 오버라이딩(재정의)할 수 없음을 의미합니다. 예를 들어 final void B ~ 가 있다면 이 메서드 B는

 

더 이상 오버라이딩 즉 재정의될 수 없습니다.

 

멤버 혹은 지역 변수 앞에 붙게 되는 경우에는 더 이상 값을 변경할 수 없음을 의미합니다. 예를 들어 final int C ~ 가 있다면 이 변수 C는

 

더 이상 값이 변경되지 않는 상수가 됩니다.


abstract의 경우는 나중에 추상화에서 다뤄질 개념이지만 간략하게만 살펴보고 넘어가겠습니다!

 

 

 

클래스 앞에 붙게 되는 경우에는 해당 클래스 내에 추상(abstract) 메서드가 선언되어 있음을 의미합니다. 예를 들어

 

abstract class A ~~가 있다면 A라는 클래스는 추상 클래스라는 얘기이고, 추상 클래스라는 얘기는 "해당 클래스에 추상 메서드가

 

존재한다"고 생각하시면 되겠습니다.

 

메서드 앞에 붙게 되는 경우에는 구현부가 존재하지 않고 선언부만 있는 메서드임을 의미합니다. 예를 들어

 

abstract void B(); 처럼 선언되어 있다면 구현부 { } 가 존재하지 않으므로 메서드 B는 추상메서드임을 알 수 있습니다.

 

따라서 추상 클래스는 미완성 된 설계도라는 얘기가 될 수 있고, 미완성 설계도를 통해서는 제품을 생성할 수 없기 때문에

 

추상 클래스로는 인스턴스 생성이 불가능합니다!

 

 

 

 

'java > 객체지향' 카테고리의 다른 글

18. 다형성(polymorphism)  (0) 2023.01.20
17. 캡슐화(encapsulation)  (0) 2023.01.19
16. 접근 제어자(access modifier)  (0) 2023.01.18
15. import문, static import문  (0) 2023.01.18
14. 패키지(package)와 클래스패스(classpath)  (2) 2023.01.17

+ Recent posts