새소식

반응형
Java/Spring

final 키워드

  • -
반응형

final 키워드

final의 의미는 최종적이라는 뜻을 가지고 있습니다. final 키워드를 사용했을 때 초기화가 되면 최종적인 값이 되어 프로그램 도중에 수정을 할 수 없습니다.

final 키워드는 변수, 메서드, 클래스에 사용될 수 있습니다. 또한 변수, 메서드, 클래스 중 어디에 사용하냐에 따라 

다른 의미를 가집니다.

 

final 필드

// final 필드 [= 초기값];
final int number = 1;

final 필드 타입은 위와 같이 선언하며 final 필드의 초기값을 줄 수 있는 방법은 2가지 있습니다.

첫번째는 위 코드와 같이 선언과 동시에 초기값을 선언하는 방법과 두번째는 생성자를 통해서 초기값을 주는 방법이

있습니다. 보통 단순한 값이라면 final 필드 선언과 동시에 초기값을 주는게 간단합니다.

하지만 객체 생성시에 외부 데이터로 초기화를 시켜야 한다면 생성자를 통해서 초기값을 주는게 좋습니다.

final 필드를 선언하고 초기화를 하지 않는다면 컴파일 에러가 발생합니다.

 

final 객체

//@Getter, @Setter 어노테이션은 자동으로 get, set 메서드를 생성해준다(Lombok 라이브러리 참고)
@Getter
@Setter
public class ObjectTest {
    String name;
    String number;
}

public class OboExample {
    public static void main(String[] args){
        final ObjectTest ot = new ObjectTest();
        //객체를 한번 생성했다면 final 키워드로 인해 new 키워드를 통한 재생성 불가능
        // ot = new ObjectTest();
       
        // 객체의 내부 변수는 변경 가능하다.
        ot.setName("obo");
    }
}

 

final 클래스

//final 클래스
@Getter
@Setter
final class ObjectTest{
    String name = "obo";
}

//final 클래스는 상속이 불가능하다.
class ObjectExample extends ObjectTest {
}

final 키워드를 클래스에 사용하게 되면 해당 클래스는 최종 상태의 클래스가 되어 더이상 상속이 불가능하다.

final 클래스여도 필드는 Setter 함수를 통해 변경 가능하다.

 

final 메서드

//final 키워드가 붙은 클래스 안의 메서드
public class ObjectTest {
    String name = "obo";
    String number;

    public final void print(){
        System.out.println("내 이름은 : "+name+" 입니다.");
    }
}

public class ObjectExample extends ObjectTest{
    String name = "oboobo";
    // final 키워드로 인해 메서드 오버라이드 불가능하다.
    public void print(){
    }
}

final 키워드를 메서드에 사용하게 되면 상속받은 클래스에서 부모의 final 메서드를 재정의할 수 없습니다.

 

반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.