JAVA final

김성훈·2022년 8월 23일
0

JAVA

목록 보기
4/4
post-thumbnail

JAVA final

final은 자바에서 사용하는 키워드 중 하나로 한 번만 할당할 수 있는 엔티티를 정의할 때 사용한다. final로 선언된 변수가 할당되면 항상 같은 값을 가진다.
만약 final 변수가 객체를 참조하고 있다면, 그 객체의 상태가 바뀌어도 final 변수는 매번 동일 내용을 참조한다.

즉한 번 값을 넣어두면 절대 바뀌지 않는 녀석이다.


final의 경우, 3곳에서 사용할 수 있는데 클래스, 메소드, 변수 이다.

final 클래스

public final class MyFinalClass {...}    // final 클래스 선언

public class ThisIsWrong extends MyFinalClass {...} // 상속 불가!

final 키워드를 클래스에 붙이면 상속 불가능 클래스가 된다.
이렇게 하면 보안이나 효율성 측면에서 장점이 있음.

final 메서드

public class Base
{
    public       void m1() {...}
    public final void m2() {...}    // final 메서드 선언
}

public class Derived extends Base
{
    public void m1() {...}  // Base 클래스의 m1() 상속
    public void m2() {...}  // 오버라이딩, 즉 상속받은 메서드 수정 불가!
}

만약 어떤 클래스를 상속하는데 그 안에 final 메서드가 있다면, 오버라이딩으로 수정할 수 없다.
상속 받은 클래스에서 해당 메서드를 수정해서 사용하지 못하도록 할 수 있는것이 메서드에 final을 붙이는 이유이다.

final 변수

public class Service {

  public void variableFinal() {

    final int value = 2;
    final Person person = new Person("사바라다", 29);

    System.out.println("value = " + value);
    System.out.println("person_1 = " + person);

    // value = 2; // 컴파일 에러
    person.setAge(10);
    person.setName("사바라");

    System.out.println("person_2 = " + person);
    // person = new Person("염광호", 29); // 컴파일 에러
  }
}

class Person {

  private String name;

  private int age;

  //.. get, set, toString 메서드 존재하나 길이상 생략
}
value = 2
person_1 = Person{name='사바라다', age=29}
person_2 = Person{name='사바라', age=10}

변수에 final을 붙이면 이 변수는 수정할 수 없다는 의미를 가진다.
수정될 수 없기 때문에 초기화 값은 필수적이다. 만약에 객체안의 변수라면 생성자, static 블럭을 통한 초기화까지는 허용.

수정 할 수 없다는 범위는 그 변수의 값에 한정되기 때문에 다른 객체를 참조하거나 할 때 참조하는 객체의 내부의 값은 변경할 수 있다.


생각
final은 좀 더 안전한 코드를 만들 수 있게 해주는 키워드 같다.


참조

https://sabarada.tistory.com/148
http://dailusia.blog.fc2.com/blog-entry-311.html

profile
"한 명이 걷는 천 걸음 보다 천 명이 함께 걷는 한 걸음이 성공의 시작이고 완성이다"

0개의 댓글