프로그래밍언어/Java

자바(Java) - 불변 객체? Final 키워드?

멍토 2020. 8. 27.

면접에서 불변객체에 관해서 설명하라는 이야기를 듣게 되었다.

면접에서 제대로 답변을 하지 못해 공부하는 겸 정리를 하게 되었다.


불변객체

불변객체(Immutable Object)는 생성 이후 상태를 바꿀 수 없는 객체를 뜻한다.

자바에서 흔하게 볼 수 있는 불변객체는 문자열이다.

파이썬에서 흔하게 볼 수 있는 불변객체는 튜플이다.

Final

자바에서 불변으로 만들기 위한 키워드이다.

Final Class

클래스에 Final을 붙이게 되면 더이상 상속이 불가능하게 된다.

외부 사용자가 해당 클래스를 상속을 못하게 하기위해 사용한다.

OOP 관점에서 볼때도 인터페이스나 추상클래스가 아닌 이상은 상속을 이용하는 것이 아니라 컴포지션을 사용하라고 한다.

Final methods

메서드에 Final을 붙이게 되면 오버라이딩이 불가능하게 된다.

해당 메서드를 재정의 하지 못하게 할때 사용한다.

Final variable

변수 앞에 Final을 붙이게 되면 값변경이 불가능하게 된다.

그렇다면 불변객체는 왜 사용하는 것일까?

가장 큰 틀로 보자면 프로그램의 안정성이 올라가기 때문이다.

- 객체의 데이터를 참조할때 데이터를 바뀔 걱정을 하지않아도 된다. 

- 멀티스레드 환경에서 동기화 처리없이 사용할 수 있다.

- 방어복사를 할 필요성이 없다.(컬렉션의 경우는 필요함)

 

불변객체의 단점은 무엇인가?

- 간단하게 값을 바꿀 수 있음에도 새로운 객체를 생성해야 하기때문에 비용이 발생한다.

 

그렇지만 불변객체의 단점은 불변객체가 주는 이점에 비하면 별거 아니므로 사용을 권장하고 있다.

 

docs.oracle.com/javase/tutorial/essential/concurrency/immutable.html

 

Immutable Objects (The Java™ Tutorials > Essential Classes > Concurrency)

The Java Tutorials have been written for JDK 8. Examples and practices described in this page don't take advantage of improvements introduced in later releases and might use technology no longer available. See Java Language Changes for a summary of updated

docs.oracle.com

 

댓글

💲 광고입니다.