CS/Java

[CS/JAVA] final / finally / finalize 의 차이 / 직렬화(Serialize)

dbfl9911 2025. 2. 11. 17:04
반응형


 

 

• final / finally / finalize 의 차이를 설명해주세요. 

 

- final은 클래스, 메소드, 변수, 인자를 선언할 때 사용할 수 있으며, 한 번만 할당하고 싶을 때 사용합니다.

  • final 변수는 한 번 초기화되면, 그 이후에 변경할 수 없습니다. 
  • final 메소드는 다른 클래스가 이 클래스를 상속할 때, 메소드 오버라이딩을 금지합니다. 
  • final 클래스는 다른 클래스에서 이 클래스를 상속할 수 없습니다. 

 

- finally는 try-catch와 함께 사용되며, try-catch가 종료될 때 finally block이 항상 수행되기 때문에 마무리 해줘야 하는 작업이 존재하는 경우에 해당하는 코드를 작성해주는 코드 블록입니다. 

 

- finalize는 Object 클래스에 정의되어 있는 메소드이며, GC에 의해 호출되는 메소드로 절대 호출해서는 안되는 메소드입니다. GC가 발생하는 시점이 불분명하기 때문에 해당 메소드가 실행된다는 보장이 없고, finalize() 메소드가 오버라이딩되어있으면, GC가 이루어질 때 바로 Garbage Collectiong 되지 않습니다. 

GC가 지연되면서 OOME(Out Of Memory Exception)이 발생할 수 있기 때문에 finalize() 메소드를 오버라이딩하여 구현하는 것을 권장하지 않고 있습니다. 

 

 


 

 

• 직렬화(Serialize)에 대해 설명해주세요. 

  • 시스템 내부에서 사용되는 객체 또는 데이터를 외부 시스템에서도 사용할 수 있도록 바이트(byte) 형태로 데이터 변환하는 기술이며, 반대로 직렬화된 바이트 형태의 데이터를 다시 객체로 변환하는 과정을 '역직렬화' 라고 합니다. 
  • (간단히) JVM의 메모리에 상주(힙 or 스택)되어 있는 객체 데이터를 바이트 형태로 변환하는 기술입니다. 

 

 


 

* 위 글은 아래 문서를 참고해 작성했습니다. 

https://dev-coco.tistory.com/153

 

신입 개발자 기술면접 질문 정리 - 자바

💡 Java의 특징을 설명해주세요.Java는 객체지향 프로그래밍 언어입니다. 기본 자료형을 제외한 모든 요소들이 객체로 표현되고, 객체 지향 개념의 특징인 캡슐화, 상속, 다형성이 잘 적용된 언어

dev-coco.tistory.com

 

반응형