final 파라미터, final변수, final..static?

오영선·2023년 11월 7일
0

final

final 키워드는 변수(variable), 메서드(method), 또는 클래스(class)에 사용될 수 있습니다. 이 final 키워드는 어떤 곳에 사용되냐에 따라 다른 의미를 가집니다. 하지만 final 키워드를 붙이면 무언가를 제한한다는 의미를 가지는 것은 공통적이 성격입니다.

[Java] final 키워드에 대해서 알아보자

final + 변수

  • 이 변수는 수정될 수 없다.
  • 그러므로 초기화가 필요하다. final name = “홍길동”
  • 생성자, static을 통한 초기화까지 허용된다.
  • 초기화 되지 않은 변수는 사용시 컴파일 에러가 발생한다.

이 변수는 수정될 수 없다? 정말로? 🤨

int, String, boolean….등의 기본형(원시) 변수는 값이 변경되지 않는다!

Object, List, Collection참조형 변수는 가리키는 객체(주소)는 변경하지 못하지만, 그 객체 내부의 값은 변경할 수 있다!

→ 즉, 실컷 리스트를 만들어 final로 선언했더니 외부에서 누군가가 리스트 멤버나 해당 멤버의 속성값을 변경해버릴 수 있다는 말이다.

  • final로 선언시 저장되는 위치는 stack이다. 그러나 참조형 변수의 참조하는 객체 위치는 Heap에 담기게 된다. 즉, final의 영향권을 벗어남으로 수정이 가능한 것이다.

final + 메서드

상속 받은 클래스에서 해당 메서드를 수정해서 사용하지 못하도록 할 수 있는것이 메서드에 final을 붙일 수 있다. 즉 @Override 함수에서의 변경을 제한한다.

final + 클래스

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

상속을 통해서 다형성의 이점을 얻고자 상속받아 해당 클래스를 재정의 할 수 있는데, final을 통해 재정의를 막는 방법이다.

final + 파라미터

드디어 오늘 공부하고자 했던 파트 🏃‍♀️🏃‍♀️

  • 사용 예시 :

왜 파라미터로 객체를 받을때 final로 받아야 할까?

  • 외부에서 받은 파라미터를 내부에서 수정못하게 한다.
  • 그러나, 객체에 final을 주더라도 원시타입이 아닌 레퍼런스 타입은 스스로 불변 객체를 만들지 않는 이상 수정될 여지가 있다.

장점

파라미터로 받아오는 인자에 대한 값 재할당을 금지하는 이점이 있다.

매개변수를 final로 선언함으로써 인자로 들어온 값에 대한 데이터의 정합성을 유지 할 수 있다.

단점

파라미터가 많아질수록 가독성을 해칠 수도 있다는 단점을 생각해볼 수도 있다.

함수 파라미터의 final 키워드

레퍼런스 타입, 즉 참조형 변수 스스로 불변 객체를 어떻게 만들 수 있을까?

공부한것 - 일급 컬렉션 : 3주차 끝나고 업로드예정

추가 - final + static

static 은 고정됨을 의미하고, final은 수정 불가능을 의미하니

final + static 은 ‘상수’ 즉, 한번 설정되어 고정되지 않는 값을 의미한다.

0개의 댓글