본문 바로가기

Java

[Java] final, 불변객체 String

final 필드

final int number = 1; // final 리턴타입 필드명 [= 초기값];

final 필드의 초기값을 줄 수 있는 방법은 1. 필드 선언시 2. 생성자를 통해서 가 있다.

 

final  클래스

해당 선언이 최종 상태이고 수정될 수 없음을 뜻함 -> final이 지정되면 초기값 설정 후 더 이상 값 변경할 수 없다.
상속할 수 없는 클래스 = 부모 클래스가 될 수 없고, 자식 클래스를 만들 수 없다.

public final class 클래스명 { ... }

final 클래스의 대표적인 예는 자바 표준 API에서 제공하는 String 클래스이다.

 

final  메소드

메소드를 선언할 때 final 키워드를 붙이면 이 메소드는 최종적인 메소드이므로 재정의 할 수 없는 메소드.
즉, 부모 클래스를 상속해서 자식 클래스를 선언할 때, 부모 클래스에 선언된 final 메소드는 자식 클래스에서 재정의(Overriding)할 수 없다. 자신이 만든 메소드를 변경할 수 없게끔 하고 싶을 때 사용하며, 시스템의 코어 부분에서 변경을 원치 않는 메소드에 많이 구현되어 있다.

 

String vs StringBuffer vs StringBuilder

String  : 불변한 문자열로 변경 작업을 할 때마다 새로운 String 객체가 생성되므로 메모리 공간과 성능 문제 발생 가능성이 있다.

 

StringBuffer  : 가변 문자열로, 변경할 시 기존 객체 내부가 수정되며 문자열 작업이 빈번한 경우에 유용하며, 내부적으로 동기화되어 멀티 스레드 환경에서 유용

 

StringBuilder : StringBuffer와 마찬가지로 가변 문자열로 변경 작업 시 기존 객체 내부 수정. 하지만 내부적으로 동기화되지 않아 멀티 스레드보다 단일 스레드 환경에서 좋다.

'Java' 카테고리의 다른 글