데옹의 블로그

[Spring Boot] Java에서 final과 static 본문

SpringBoot

[Spring Boot] Java에서 final과 static

성띠용 2023. 7. 3. 00:54

뭐든 확실하게 짚고 넘어가는 것이 좋다고...

그래서 오늘은 final과 static에 대해서 그냥 알아보고 가는 글을 쓰고 가려고 합니다.

 

왜 궁금했냐면, java 공부하는데 값을 변하게 하지 않기 위해선 static을 쓴다는데 밑엔 또 final이 똑같은 의미로 쓰여져 있더라고요. 그래서 궁금했어요^^

 

final

  • 변수에 적용되면 변수의 값을 한 번 할당하면 변경할 수 없습니다. 즉 변수를 상수로 만드는데 여기서 상수는 수학에서의 상수가 아닌 [항상 상]을 써서 변하지 않는 수라고 합니다.
  • 메소드에 적용되면 메소드가 하위 클래스에서 오버라이딩 될 수 없습니다. 즉, 메소드에서의 구현이 모든 하위 클래스에서 변경될 수 없습니다.
  • 클래스에 적용되면 클래스가 하위 클래스로 확장될 수 없습니다. 즉, 다른 클래스가 해당 클래스를 상속받는 것을 방지합니다.
  • 선언과 동시에 값을 주면 절대로 값을 변경할 수 없습니다. 근데 그냥 값을 주지 않고 생성한 뒤, 객체를 생성할 때 값을 주는 방법은 가능합니다.

static

  • 변수에 적용되면 해당 변수가 클래스의 모든 인스턴스에서 공유됩니다. 변수가 개별 객체가 아닌 클래스 자체에 속하게 됩니다. (인스턴스간에 공유되어야 하는 데이터에 사용됨)
  • 메소드에 적용되면 해당 메소드가 클래스 자체에 속하고, 특정 인스턴스와는 관계가 없음을 나태냅니다.
  • 클래스의 인스턴스를 생성하지 않아도 클래스 자체에서 직접 호출할 수 있습니다.

요약하자면 final은 상수를 선언하거나 변수/메소드/클래스의 수정을 방지합니다.

static은 모든 인스턴스 간에 공유되거나 외부 클래스의 인스턴스 없이도 접근할 수 있는 클래스 수준의 멤버를 정의합니다!

 

근데 두 개를 다 쓴다..? 바로 알아봅시다.

static final

정적이고 최종이면.. 결국 상수를 선언할 때 사용됩니다.

final 만으로 충분히 상수가 되지 않냐.. 왜 상수가 된다고 해놓고 이런 게 튀어나오냐... 바로 위에서 말한

"그냥 값을 주지 않고 생성한 뒤, 객체를 생성할 때 값을 주는 방법은 가능합니다."

라는 부분 때문입니다. 선언할 때 값을 주면 상수지만, 객체를 생성할 때 값을 주는 것은 상수라고 하기엔 좀 애매하죠.

이게 진짜 최종병기 활입니다.