λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
πŸ’Ž/Java

[Java] finalize λ©”μ†Œλ“œ

by dar0m! 2020. 9. 8.

λ°œλ‹¨

c++을 주둜 μΌλ‹€λ³΄λ‹ˆ μƒμ„±μž, μ†Œλ©Έμžμ— λŒ€ν•œ κ°œλ…μ΄ μžˆμ—ˆλŠ”λ° μ΄λ²ˆμ— 학ꡐ 과제λ₯Ό ν•˜κ²Œ λ˜λ©΄μ„œ Swing μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μž‘μ„±ν•˜λ‹€κ°€ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ 꺼질 λ•Œ λ‹€λ₯Έ 객체도 μ’…λ£Œν•˜κ³  μ‹Άμ–΄μ„œ Java μ†Œλ©Έμžλ₯Ό μ•Œμ•„λ³΄μ•˜λ‹€.

Javaμ—λŠ” μ†Œλ©Έμž λ©”μ†Œλ“œλŠ” λ”°λ‘œ μ—†κ³ , μœ μ‚¬ν•˜κ²Œ μž‘λ™ν•˜λŠ” finalizeκ°€ μžˆλ‹€κ³  ν•œλ‹€. ν•˜μ§€λ§Œ, μžλ°”λŠ” 가비지 컬렉터(GC)κ°€ νž™ μ˜μ—­μ„ κ΄€λ¦¬ν•˜κ³  있기 λ•Œλ¬Έμ—

  • finalize λ©”μ†Œλ“œλ₯Ό 쓰더라도 μ–Έμ œ λ™μž‘ν• μ§€ λͺ¨λ₯΄κ³ (싀행을 보μž₯ν•˜μ§€ μ•ŠμŒ)
  • μ‚¬μš©μžκ°€ 직접 μž‘μ„±ν•˜λŠ” 것도 μœ„ν—˜ν•˜λ‹€λŠ” 의견이 μžˆμ—ˆλ‹€.

무엇보닀도 Java9λΆ€ν„°λŠ” Object.finalizeκ°€ μ‚¬λΌμ§„λ‹€λŠ” 글을 보고 λ‚˜μ„œλŠ” 더 이상 μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” λ©”μ†Œλ“œμž„μ„ μ•Œκ²Œ λ˜μ—ˆκ³ , μ°Ύμ•„λ΄€λ˜ 질문의 닡변도 λŒ€λΆ€λΆ„ finalize()λ₯Ό ν†΅ν•œ 방법이 μ•„λ‹Œ λ‹€λ₯Έ 방법을 톡해 문제λ₯Ό ν•΄κ²°ν•΄ 보라고 μ‘°μ–Έν–ˆλ‹€.

κ·Έλž˜μ„œ 본래 ν•΄κ²°ν•˜κ³ μž ν–ˆλ˜ 'μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ 꺼질 λ•Œ λ‹€λ₯Έ 객체λ₯Ό μ’…λ£Œν•˜κ³  μ‹Άλ‹€.'의 해결책은 Swing μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ x(close)λ²„νŠΌμ„ λˆ„λ₯Ό λ•Œ 이벀트λ₯Ό μΆ”κ°€ν•˜λŠ” κ²ƒμ΄μ—ˆλ‹€.

 

ν•΄κ²°

본래 μž‘μ„±ν–ˆλ˜ 이벀트

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

μ‚¬μš©μžκ°€ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ x(close)λ²„νŠΌμ„ λˆ„λ₯΄λ©΄ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 창만 꺼지지 μ‹€μ œλ‘œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ μ’…λ£Œλ˜λŠ” 것이 μ•„λ‹ˆμ–΄μ„œ μœ„μ˜ μ½”λ“œλ₯Ό μΆ”κ°€ν•˜μ—¬ xλ²„νŠΌμ„ λˆ„λ₯Ό λ•Œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ’…λ£Œν•˜λ„λ‘ ν•˜λŠ” μ½”λ“œμ΄λ‹€.

μ—¬κΈ°μ„œ λ‚˜λŠ” emfλΌλŠ” 객체도 μ’…λ£Œν•˜κ³  μ‹ΆκΈ° λ•Œλ¬Έμ— μ•„λž˜μ™€ 같이 μ½”λ“œλ₯Ό λ³€κ²½ν–ˆλ‹€.

이벀트 λ¦¬μŠ€λ„ˆ μΆ”κ°€

frame.addWindowListener(new WindowAdapter() {
    @Override
    public void windowClosing(WindowEvent e) {
    	System.out.println("emf μ’…λ£Œ");
    	emf.close();
    	System.exit(0);
    }
});
  • "emf μ’…λ£Œ"κ°€ 맀번 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ μ’…λ£Œλ  λ•Œλ§ˆλ‹€ 잘 λ™μž‘ν•˜λŠ”μ§€ ν™•μΈν–ˆκ³ 
  • emf 객체λ₯Ό μ’…λ£Œμ‹œν‚€κ³ 
  • μœ„μ—μ„œ μž‘μ„±ν–ˆλ˜ EXIT_ON_CLOSE 역할을 ν•˜λŠ” System.exit(0); 을 μž‘μ„±ν–ˆλ‹€.

 

μ°Έκ³ 

 

Java Finalize ν•¨μˆ˜ - 기술 λΈ”λ‘œκ·Έ

Finalize()에 κ΄€ν•œ κ³ μ°° ClassλŠ” Constructor(μƒμ„±μž)와 Destructor(μ†Œλ©Έμž)에 라고 μΉ­ν•˜λŠ” νŠΉμˆ˜ν•œ μƒν™©μ—μ„œ ν˜ΈμΆœλ˜λŠ” ν•¨μˆ˜κ°€ μžˆμŠ΅λ‹ˆλ‹€. 이름과 λ™μΌν•˜κ²Œ ConstructorλŠ” Classλ₯Ό 생성할 λ•Œ μžλ™μœΌλ‘œ ν˜ΈμΆœλ˜λŠ” 함

hodongman.github.io

 

μžλ°” μ†Œλ©Έμž finalize

μžλ°”μ—μ„œ λ©”λͺ¨λ¦¬ ν• λ‹Ήλœ 객체λ₯Ό ν•΄μ œν•˜λ €λ©΄?

madplay.github.io

 

λŒ“κΈ€