[Java] final

한결·2023년 7월 18일
0

Java

목록 보기
2/5

final

  • 변수(variable), 메서드(method), 또는 클래스(class)에 사용됨
  • 키워드는 어떤 곳에 사용되냐에 따라 다른 의미를 가짐
  • 무언가를 제한한다는 의미를 가지는 것은 공통적이 성격

variable

변수에 final을 붙이면 이 변수는 수정할 수 없다는 의미

  • 수정될 수 없기 떄문에 초기화 값은 필수
  • 만약 객체안의 변수라면 생성자, static 블럭을 통한 초기화까지는 허용
  • 다른 객체를 참조하거나 할 때 참조하는 객체의 내부의 값은 변경할 수 있음
  • 결과적으로 기본형 변수는 값이 변경하지 못하고 참조형 변수는 그 객체 내부의 값은 변경 가능
public class FinalTest {
    public static void main(String[] args) {
        final int value = 2;
        final Person person = new Person();
        person.setAge(20);
        person.setName("엄한결"); 

        System.out.println("value = " + value);
        System.out.println("person_1 = " + person.getName() + " age = " + person.getAge()); person_1 = 엄한결 age = 20

        // value = 2; // 컴파일 에러
        person.setAge(10);
        person.setName("최예훈");

        System.out.println("person_2 = " + person.getName() + " age = " + person.getAge()); // person_2 = 최예훈 age = 10
    }
}

  • 메서드에 있는 변수들은 stack 메모리에 저장
  • 기본형(primitive) 변수는 내부의 값을 가짐
  • 참조형 변수는 객체의 주소를 가짐
  • final 키워드를 변수에 사용하면 이 영역에만 변경할 수 없게함
    -> 기본형 변수는 값 변경 못함, 참조형 변수는 가리키는 객체를 변경 못함
    -> 참조형 변수가 가리키는 객체의 내부 값은 final 영향 밖에 있기 때문에 변경 가능함
public void Final() {

  final int value = 2;
  final int value2;

  System.out.println("value = " + value); // 가능
  // System.out.println("value2 = " + value2) // 컴파일에러

  value_2 = 3; // 초기화 후
  System.out.println("vlaue2 = " + value2); // 사용 가능
  • 변수를 final로 선언해놓고 초기화 전에 사용하면 컴파일 에러 발생

method

  • method에 fianl을 붙이면 override를 제한 하게됨
class Person {

    private String name;

    private int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    final public void speech() {
        System.out.println("나는 " + name + " 입니다.");
    }
}

  • method에 final 붙이면 override 막음

class

final 키워드를 클래스에 붙이면 상속 불가능 클래스가 됨

  • 대표적으로 Integer와 Wrapper 클래스가 있음
  • 클래스 설계시 재정의 여부를 생각해서 재정의 불가능하게 사용하고 싶으면 final로 등록하는게 추후 유지보수차원에서 좋음

결론

final키워드는 추후 유지보수를 생각해야 잘 사용하게 되는 키워드

1개의 댓글

comment-user-thumbnail
2023년 7월 18일

가치 있는 정보 공유해주셔서 감사합니다.

답글 달기