본문 바로가기
back-end/JAVA

28) 제어자 static, final, abstract

by 모두의 향연 2021. 6. 7.
728x90
반응형

28) 제어자 static, final, abstract

 

1. 제어자(modifier)

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

영여로 따지면 형용사와 같은 역할입니다. 형용사는 명사 앞에 붙어서 꾸며주는 역할을 하죠.

 

접근제어자: public. protected, (default), private : 4개 중 1개만 사용가능

그        외: static, final, abstract, native, transient, synchronized, volatile, strictfp

 

-하나의 대상에 여러 제어자를 같이 사용 가능(접근 제어자는 하나만)

제어자의 사용

접근제어자는 하나만 사용 가능하고, 제일 왼쪽에 쓴다. 꼭 그래야 하는 건 아닌데, 주로 그렇게 씁니다.

final보다 static을 왼쪽에 쓰는 경향이 있고요.

 

 

2. static: 클래스의, 공통적인

제어자 대상 의미
static 멤버변수 -모든 인스턴스에 공통적으로 사용되는 클래스 변수가 된다.
-클래스 변수는 인스턴스를 생성하지 않고도 사용 가능하다.
-클래스가 메모리에 로드될 때 생성된다.
메서드 -인스턴스를 생성하지 않고도 호출이 가능한 static메서드가 된다.
-static메서드 내에서는 인스턴멤버들을 직접 사용할 수 없다.

staitc 사용예시

이전에 했던 것들이라 잘 모르시면 아래 사이트를 확인하세요.

https://feastforall.tistory.com/26

 

15)객체지향-static메서드와 인스턴스 메서드(클래스 메서드)/static method and instance method(class method)

15) 객체지향-static메서드와 인스턴스 메서드(클래스 메서드) 15-1) 인스턴스 메서드란? -인스턴스 생성 후, '참조변수.메서드이름()'으로 호출 -인스턴스 멤버(iv, im)와 관련된 작업을 하는 메서드 -

feastforall.tistory.com

 

 

3. final: 마지막의, 변경될 수 없는

제어자 대상 의미
final 클래스 변경될 수 없는 클래스, 확장될 수 없는 클래스가 된다.
그래서 final로 지정된 클래스는 다른 클래스의 조상이 될 수 없다.
메서드 변경될 수 없는 메서드. final로 지정된 메서드는 오버라이딩을 통해 재정의 될 수 없다.
멤버변수 변수 앞에 final이 붙으면, 값을 변경할 수 없는 상수가 된다.
지역변수

final 사용예시

final을 붙인 클래스는 상속계층도에서 마지막이 된다. 확장할 수 없기 때문에 조상클래스가 될 수가 없다.

대표적인 fianl을 붙인 클래스는 String과 Math가 있다.

String의 경우 보안 문제 때문에 final을 붙인다. 문자열 같은 경우 패스워드로 저장되기 때문에 상속이 가능하면 자손에서 조상으로 접근이 가능하기 때문에 final로 지정해 놨다.

Math의 경우 다 static메서드 집합이니까 굳이 Math클래스를 상속받아 쓰지 않는다. 그래서 final로 지정했다.

final이 변수 앞에 붙으면 상수가 된다.

또한, final을 붙인 메서드는 오버라이딩을 할 수 없는 메서드가 된다. 오버라이딩의 경우 조상메서드에 덮어쓰는 것이기 때문에 변경할 수 있기 때문이다.

 

 

4. abstract: 추상의, 미완성의

제어자 대상 의미
abstract 클래스 클래스 내에 추상 메서드가 선언되어 있음을 의미한다.
메서드 선언부만 작성하고 구현부는 작성하지 않은 추상 메서드임을 알린다.

abstract 사용예시

추상클래스는 추상메서드를 가지고 있으면 추상클래스가 된다.

추상메서드는 구현부가 없는 메서드를 의미한다(선언부만 존재)

즉 미완성 메서드가 되는 것이고 추상메서드가 미완성 메서드이기 때문에 추상클래스도 미완성 클래스가 된다.

멤버의 개수가 적다고 해서 추상클래스가 되는 게 아니고 단지 추상메서드를 가지고 있어서 추상클래스가 되는 것이다.

미완성 클래스니까 미완성 설계도가 된다. 설계도가 완성이 안되면 제품을 생성 불가하다. abstract클래스에 객체를 만들 수 없음을 의미한다. 

즉, AbstractTest a = new AbstractTest(); //에러. 추상클래스의 인스턴스 생성 불가

그럼 언제 객체 생성 가능할까요? 추상클래스를 상속받아 완전한 클래스를 만든 후에 객체 생성이 가능합니다.

 

다음편엔 접근제어자에 대해서 배워보겠습니다.

 

 

 

*유튜브 남궁성 선생님의 `자바의 정석`을 참고하여 만들었습니다*
*자세히 보고 싶은 분들은 유튜브 가서 보시면 됩니다*

728x90
반응형