Java final

게시판 만들기 프로젝트를 진행하며 자세히 알지 못하는 부분에 대한 공부 중 Java final에 대한 공부 내용

  1. 프로젝트 관리
  2. final
    1. 사용될 수 있는 곳

프로젝트 관리

프로젝트 관리 문서

final

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

사용될 수 있는 곳

  • Class
    public final class FinalClass{}
    

클래스에도 사용할 수 있지만 final이 적용된 클래스는 상속을 하지 못합니다.

  • Method
    public class FinalMethodClass{
      public final void nonOverrideMethod(){}
    }
    public class children extends FinalMethodClass {
      public void nonOverrideMethod(){} // 오버라이드 불가능
    }
    

    메소드는 오버라이드를 하지 못한다고 하네요.

  • Variable
public class FinalVariableClass{
    private fianl int finalVariable;
}

final 변수는 한 번 값을 할당하면 수정할 수 없다고 하네요. 그러니 초기화 값은 필수적 입니다. 하지만 객체안의 변수라면 생성자와 static을 통한 초기화 까지는 허용합니다.

그렇다고 무조건적으로 수정이 불가능 한것은 아닙니다. 수정할 수 없는 범위는 그 변수의 값에 한정됩니다. 다른 객체를 참조하거나 참조 할때에는 객체의 내부 값을 변경할 수 있습니다.

class TestClass{
   private String a;
   private int b;
   
   //get,set,생성자 Method
}

// main
final TestClass test = new TestClass("test",0); // O
test.setA("testzz");
test.setB(5);
System.print.out(""+test.getA); // testzz 출력
test = new TestClass("test2",1); // 컴파일 에러

변수 타입에는 기본형과 참조형이 있습니다. 기본형은 메모리 공간에 주소와 값이 같이 할당 되어있는것이고 참조형은 객체의 주소를 가지고있는 것입니다.

final 은 기본형에 사용하면 변수 자체에 수정이 불가능하게 막히지만 참조형에 수정이 불가능하게 걸린다면 객체를 가르켜 수정하지 못하게 막히지만 객체안의 변수들에게 적용되는 것이기 아니기 때문에 객체 내부의 변수는 수정이 가능합니다.