[JAVA] λ©”λͺ¨λ¦¬ μ‚¬μš© μ˜μ—­
πŸ“† Today I Learned(κ°œλ°œμ–Έμ–΄ν•™μŠ΅)/JAVA

[JAVA] λ©”λͺ¨λ¦¬ μ‚¬μš© μ˜μ—­

T1) java λͺ…λ Ήμ–΄λ‘œ JVM이 κ΅¬λ™λœλ‹€λ©΄ JVM은 μš΄μ˜μ²΄μ œμ—μ„œ 할당받은 λ©”λͺ¨λ¦¬ μ˜μ—­(Runtime Data Area)을 μ–΄λ–»κ²Œ κ΅¬λΆ„ν•΄μ„œ μ‚¬μš©ν• κΉŒ?

 

λ©”λͺ¨λ¦¬ μ˜μ—­(Runtime Data Area)

  • λ©”μ†Œλ“œ μ˜μ—­(Method) : 
    • λ°”μ΄νŠΈμ½”λ“œ νŒŒμΌμ„ 읽은 λ‚΄μš©μ΄ μ €μž₯λ˜λŠ” μ˜μ—­μ΄λ‹€.
    • ν΄λž˜μŠ€λ³„λ‘œ μƒμˆ˜, 정적 ν•„λ“œ, λ©”μ†Œλ“œ μ½”λ“œ, μƒμ„±μž μ½”λ“œ 등이 μ €μž₯λœλ‹€.
  • νž™ μ˜μ—­(Heap) :
    • 객체가 μƒμ„±λ˜λŠ” μ˜μ—­μ΄λ‹€.
    • 객체의 λ²ˆμ§€(μ£Όμ†Œ)λŠ” λ©”μ†Œλ“œ μ˜μ—­κ³Ό μŠ€νƒ μ˜μ—­μ˜ μƒμˆ˜μ™€ λ³€μˆ˜μ—μ„œ μ°Έμ‘°ν•  수 μžˆλ‹€.
  • μŠ€νƒ μ˜μ—­(Stack) :
    • λ©”μ†Œλ“œλ₯Ό ν˜ΈμΆœν•  λ•Œλ§ˆλ‹€ μƒμ„±λ˜λŠ” ν”„λ ˆμž„(Frame)이 μ €μž₯λ˜λŠ” μ˜μ—­μ΄λ‹€.
    • λ©”μ†Œλ“œ 호좜이 λλ‚˜λ©΄ ν”„λ ˆμž„μ€ μžλ™ μ œκ±°λœλ‹€.
    • ν”„λ ˆμž„ λ‚΄λΆ€μ—λŠ” 둜컬 λ³€μˆ˜ μŠ€νƒμ΄ μžˆλ‹€. ν”„λ ˆμž„ λ‚΄λΆ€μ—μ„œ κΈ°λ³Έ νƒ€μž… λ³€μˆ˜μ™€ μ°Έμ‘° νƒ€μž… λ³€μˆ˜κ°€ μƒμ„±λ˜κ³  μ œκ±°λœλ‹€.

 

κ²°λ‘  :

==, != μ—°μ‚°μžλ‘œ 객체λ₯Ό 비ꡐ할 λ•Œ μ°Έμ‘°νƒ€μž…μ˜ λ³€μˆ˜μΈ κ²½μš°μ—λŠ” 같은 객체λ₯Ό μ°Έμ‘°ν•˜λŠ” 지 ν™•μΈν•˜λŠ” 것이닀. κ·Έλ ‡κΈ°λ•Œλ¬Έμ— 같은 κΈ€μžμ—¬λ„ μ°Έμ‘°ν•˜λŠ” λ³€μˆ˜κ°€ λ‹€λ₯Ό 경우 같지 μ•Šμ€ κ²ƒμ΄λΌλŠ” 결둠이 λ‚˜μ˜¨λ‹€.

public class StringVarTest {
	public static void main(String[] args) {
		String str1 = "λ¬Έμžμ—΄ μ°Έμ‘° λ³€μˆ˜";
		String str2 = "λ¬Έμžμ—΄ μ°Έμ‘° λ³€μˆ˜";
		String str3 = new String("λ¬Έμžμ—΄ μ°Έμ‘° λ³€μˆ˜");
		
		System.out.println(str1);
		System.out.println(str2);
		System.out.println(str3);
		System.out.println(str1 == str2);
		System.out.println(str1 == str3);
		
	}
}

 

좜λ ₯κ²°κ³Ό :

 

*μΆ”κ°€ :

  • μ°Έμ‘° νƒ€μž… 아직 λ²ˆμ§€λ₯Ό μ €μž₯ν•˜κ³  μžˆμ§€ μ•Šλ‹€λŠ” 뜻으둜 null(널) 값을 κ°€μ§ˆ 수 있고, μ΄ˆκΈ°κ°’μœΌλ‘œ μ‚¬μš©ν•  수 μžˆλ‹€. μ΄ˆκΈ°κ°’μ΄ null인 경우 μ°Έμ‘°ν•˜κ³  μžˆλŠ” λ²ˆμ§€κ°€ μ—†λ‹€λŠ” 뜻이기 λ•Œλ¬Έμ— μŠ€νƒμ˜μ—­μ— μƒμ„±λœλ‹€.
  • λ˜ν•œ λ³€μˆ˜κ°€ null인 μƒνƒœμ—μ„œ 객체의 λ°μ΄ν„°λ‚˜ λ©”μ†Œλ“œλ₯Ό μ‚¬μš©ν•˜λ € ν•  λ•Œ μ˜ˆμ™Έκ°€ λ°œμƒν•˜λŠ”λ° 이λ₯Ό NullPointerException이라 ν•œλ‹€. 
  • μ–΄λ–€ λ³€μˆ˜μ—μ„œλ„ 객체λ₯Ό μ°Έμ‘°ν•˜μ§€ μ•ŠμœΌλ©΄ ν•΄λ‹Ή κ°μ²΄λŠ” ν”„λ‘œκ·Έλž¨μ—μ„œ μ‚¬μš©ν•  수 μ—†λŠ” 객체가 되고 νž™ λ©”λͺ¨λ¦¬μ— μ‘΄μž¬ν•˜μ§€λ§Œ μœ„μΉ˜ 정보가 μ—†κΈ° λ•Œλ¬Έμ— μ‚¬μš©ν•  수 μ—†κ²Œλœλ‹€. κ·Έλ ‡κ²Œ 되면 μžλ°”μ—μ„œλŠ” ν•΄λ‹Ή 객체λ₯Ό μ“°λ ˆκΈ°λ‘œ μ·¨κΈ‰ν•˜κ³  μ“°λ ˆκΈ° μˆ˜μ§‘κΈ°(Garbage Collector)λ₯Ό μ‹€ν–‰μ‹œμΌœ μžλ™μœΌλ‘œ μ œκ±°ν•œλ‹€.

 

 

 

좜처 및 μ°Έκ³  : 이것이 μžλ°”λ‹€(ꡐ윑 ν˜„μž₯μ—μ„œ κ°€μž₯ 많이 μ“°μ΄λŠ” JAVA ν”„λ‘œκ·Έλž˜λ°μ˜ κΈ°λ³Έμ„œ)
https://search.shopping.naver.com/book/catalog/34238594620?cat_id=50010920&frm=PBOKMOD&query=%EC%9D%B4%EA%B2%83%EC%9D%B4%EC%9E%90%EB%B0%94%EB%8B%A4&NaPm=ct%3Dlocm18y8%7Cci%3D0e64b25f86693278b2d96906cbe4b981fe74c6d5%7Ctr%3Dboknx%7Csn%3D95694%7Chk%3D95e00da716b01b77d749d200eae34c788eb63950