πŸ€ Java/μžλ°”μ™„μ „μ •λ³΅

[Java] μžλ°” μ™„μ „ 정볡_ 5μž₯ μ°Έμ‘°μžλ£Œν˜• (λ¬Έμžμ—΄)

._.sori 2024. 10. 31. 16:43

 


πŸ“š μ±… μ†Œκ°œν•˜κΈ°

λ‚΄κ°€ μ‚¬μš©ν•œ μžλ°”μ™„μ „μ •λ³΅ μ±… 링크!
γ„΄ κΉ€λ™ν˜• μ§€μŒ, μ΄μ§€μŠ€νΌλΈ”λ¦¬μ‹±

 

: 좜처 예슀24 ν™ˆνŽ˜μ΄μ§€

 

 

이 책을 κ³ λ₯΄κ²Œ 된 μ΄μœ λŠ” 친ꡬ의 μΆ”μ²œμ΄μ—ˆλ‹€. ꡉμž₯히 κΌΌκΌΌν•˜κ²Œ μ ν˜€μžˆμ–΄ μ΄ν•΄ν•˜κΈ° μ‰½λ‹€λŠ” 이유둜 μΉœκ΅¬λŠ” 이 책을 κ³¨λžλ‹€κ³  ν–ˆλ‹€. λ‚˜λ„ κ·Έλž˜μ„œ κ·Έλƒ₯ 따라샀닀. μ‹€μ œλ‘œ 책을 μ‚΄νŽ΄λ³΄λ‹ˆ ꡉμž₯히 κΌΌκΌΌν•˜κ²Œ μ •λ¦¬λ˜μ–΄μžˆλ‹€. λ‹€λ₯Έ 책은 λ³Έ 적이 μ—†μ–΄ 비ꡐ가 λΆˆκ°€ν•˜μ§€λ§Œ, λ‚΄ μƒκ°μœΌλ‘  처음 μžλ°”λ₯Ό κ³΅λΆ€ν•œλ‹€λ©΄ 이 책을 κ°€μ§€κ³  μΆ©λΆ„νžˆ λ”°λΌκ°ˆ 수 μžˆμ„ λ“― ν•˜λ‹€. λͺ¨λ‘λ“€ ν™”μ΄νŒ…!!

 

 

🐰

 


 

 

βœ”οΈ  객체 μƒμ„±μ‹œ μ£Όμ†Œκ°’_ 189p

 

β€’ 객체 μ•ˆμ˜ 값을 λ³€κ²½ν•˜λ©΄ μƒˆλ‘œμš΄ 객체λ₯Ό 생성

String str1 = new String("μ•ˆλ…•");
String str2 = str1;
str1 = "μ•ˆλ…•ν•˜μ„Έμš”";
System.out.println(str1);
System.out.println(str2);

 

new μ—°μ‚°μžλ₯Ό μ‚¬μš©ν•˜μ—¬ 객체λ₯Ό μƒμ„±ν–ˆλ‹€. new μ—°μ‚°μžλŠ” μΈμŠ€ν„΄μŠ€(λ©”λͺ¨λ¦¬ μœ„μ— μ˜¬λΌκ°„ 객체)λ₯Ό μƒμ„±ν•˜λŠ”λ°, λ©”λͺ¨λ¦¬ μ˜μ—­ 쀑 νž™ μ˜μ—­μ— 데이터λ₯Ό μ €μž₯ν•  곡간을 ν• λ‹Ήλ°›λŠ”λ‹€. κ·Έ κ³΅κ°„μ˜ 참쑰값을(μ—¬κΈ°μ„  str1κ³Ό str2κ°€ λœλ‹€) κ°μ²΄μ—κ²Œ λ°˜ν™˜ν•˜μ—¬ μ£Όκ³  μ΄μ–΄μ„œ μƒμ„±μžλ₯Ό ν˜ΈμΆœν•œλ‹€.

μˆœμ„œκ°€ μ€‘μš”ν•˜λ‹€. str1에 "μ•ˆλ…•"이 λ“€μ–΄κ°€λŠ” 것이 μ²«λ²ˆμ§Έκ°€ λœλ‹€. κ·Έ ν›„ λ‘λ²ˆμ§Έκ°€ str1이 str2에 λ“€μ–΄κ°€λŠ” κ²ƒμœΌλ‘œ, str2λŠ” "μ•ˆλ…•"을 κ°€μ§€κ²Œ λœλ‹€. μ„Έλ²ˆμ§Έμ— str1이 "μ•ˆλ…•"μ—μ„œ "μ•ˆλ…•ν•˜μ„Έμš”"둜 변경이 λœλ‹€. 

좜λ ₯이 될 땐 이 μˆœμ„œμ— 맞좰 좜λ ₯이 λœλ‹€. str1은 λ§ˆμ§€λ§‰ μ½”λ“œ "μ•ˆλ…•ν•˜μ„Έμš”"둜 λ³€κ²½λœ λ°”κ°€ μžˆμœΌλ‹ˆ "μ•ˆλ…•ν•˜μ„Έμš”"둜 좜λ ₯이 될 것이닀. str2λŠ” "μ•ˆλ…•"이 μœ μž…λœ ν›„ λ³€κ²½λœ 것이 μ—†μœΌλ‹ˆ μ—¬μ „νžˆ "μ•ˆλ…•"을 가리킀고 μžˆμ„ 것이닀. 

λ©”λͺ¨λ¦¬λŠ” [ λ©”μ„œλ“œ(클래슀) μ˜μ—­ - μŠ€νƒ μ˜μ—­  - νž™ μ˜μ—­ ]으둜 λ˜μ–΄μžˆλ‹€. μ΄λ•Œ String은 λ©”μ„œλ“œ μ˜μ—­μ— μ˜¬λΌκ°€κ³  str1κ³Ό str2의 λ‚΄μš©μ΄ νž™μ˜μ—­μ˜ λͺ‡ λ²ˆμ§€μ— μžˆμ„ 건지에 λŒ€ν•œ 정보λ₯Ό μŠ€νƒ μ˜μ—­μ— λ³΄κ΄€ν•œλ‹€. μ²˜μŒμ— μŠ€νƒ μ˜μ—­μ—μ„œ 100λ²ˆμ§€μ— str1의 λ‚΄μš©μ΄ μžˆλ‹€κ³  가리킬 경우 νž™ μ˜μ—­ 100λ²ˆμ§€μ— κ°€λ©΄ "μ•ˆλ…•"이 μžˆμ„ 것이닀. κ·Έ ν›„ str1을 κ·ΈλŒ€λ‘œ str2에 μ €μž₯ν–ˆμœΌλ‹ˆ str2도 λ˜‘κ°™μ΄ 100λ²ˆμ§€μ— "μ•ˆλ…•"을 가리킀고 μžˆμ„ 것이닀. μ—¬κΈ°μ„œ str1이 "μ•ˆλ…•ν•˜μ„Έμš”"둜 λ°”λ€Œλ©΄ str1은 λ‹€λ₯Έ λ²ˆμ§€μ— "μ•ˆλ…•ν•˜μ„Έμš”"κ°€ 있게 될 것이닀. 그리고 str2λŠ” μ—¬μ „νžˆ λ˜‘κ°™μ΄ 100λ²ˆμ§€λ₯Ό 가리킀고 μžˆμ„ 것이닀.

 

 

 

 

 

β€’ λ°°μ—΄κ³Ό 차이점

int[] array1 = new int[] {3, 4, 5};
int[] array2 = array1;
array1[0] = 6; array1[1] = 7; array[2] = 8;

System.out.println(Arrays.toString(array1));
System.out.println(Arrays.toString(array2));

 

배열에 3κ³Ό 4, 5λ₯Ό array1에 λ„£μ—ˆκ³ , array2λŠ” array1κ³Ό λ™μΌν•œ 데이터λ₯Ό κ°€μ§„λ‹€. μ΄λ•Œ array1에 λŒ€ν•œ 데이터λ₯Ό 6κ³Ό 7, 8둜 μˆ˜μ •ν•΄λ³΄κ² λ‹€. λΆ„λͺ… μœ„μ—μ„œ λ¬Έμžμ—΄μ„ μˆ˜μ •ν–ˆμ„λ• 두 객체의 값이 같이 μˆ˜μ •λ˜μ§€ μ•Šμ•˜λ‹€. ν•˜μ§€λ§Œ 배열은 λ‹€λ₯΄λ‹€. 배열은 λ²ˆμ§€μ— μƒˆλ‘œμš΄ 값이 μž…λ ₯되면 λ‹€λ₯Έ λ²ˆμ§€μ— 데이터λ₯Ό μƒˆλ‘­κ²Œ λ§Œλ“œλŠ” 것이 μ•„λ‹Œ, 본래의 μœ„μΉ˜μ— 있던 데이터λ₯Ό μˆ˜μ •ν•˜μ—¬ 값을 λ„£κ²Œλœλ‹€.

그렇기에 κ²°κ³ΌλŠ” array1κ³Ό array2 λͺ¨λ‘ 6,7,8을 좜λ ₯ν•˜κ²Œ λœλ‹€.

 

 

 

 

 

β€’ λ¦¬ν„°λŸ΄λ‘œ μž…λ ₯ν•œ λ°μ΄ν„°μ˜ 차이

String str1 = new String("μ•ˆλ…•");
String str2 = "μ•ˆλ…•";
String str3 = "μ•ˆλ…•";
String str4 = new String("μ•ˆλ…•");

System.out.println(str1 == str4);
System.out.println(str2 == str3);
str2와 str3은 λ¦¬ν„°λŸ΄μ„ λ°”λ‘œ μž…λ ₯ν•œ 데이터가 되며, κ·Έ λ°μ΄ν„°λŠ” μ„œλ‘œ 같은 값을 κ°€μ§„λ‹€. λ§Œμ•½ μ΄λ ‡κ²Œ λ¬Έμžμ—΄ λ¦¬ν„°λŸ΄ λ°©μ‹μœΌλ‘œ String 객체λ₯Ό 생성할 경우, JVM은 λ¨Όμ € String Poolμ—μ„œ ν•΄λ‹Ή λ¬Έμžμ—΄μ΄ μžˆλŠ”μ§€ ν™•μΈν•œλ‹€. κ·Έλ ‡κ²Œ 같은 λ¬Έμžμ—΄μ΄ μžˆλ‹€λŠ” 것이 ν™•μΈλ˜λ©΄ κΈ°μ‘΄ λ¬Έμžμ—΄ 객체의 μ°Έμ‘°λ₯Ό λ°˜ν™˜ν•˜κ²Œ 되고 λ™μΌν•œ λ©”λͺ¨λ¦¬ μ£Όμ†Œλ₯Ό κ³΅μœ ν•˜κ²Œ λœλ‹€.

new μ—°μ‚°μžλ‘œ 객체λ₯Ό 생성할 경우 String Pool이 μž‘λ™ν•˜μ§€ μ•ŠλŠ”λ‹€. newλŠ” 맀번 μƒˆλ‘œμš΄ λ©”λͺ¨λ¦¬ 곡간에 객체λ₯Ό μƒμ„±ν•˜κ³ , λ™μΌν•œ 값이라도 λ©”λͺ¨λ¦¬ μ£Όμ†ŒλŠ” λ‹¬λΌμ§€κ²Œ λœλ‹€.

결둠적으둜 str1κ³Ό str4λŠ” μ„œλ‘œ λ‹€λ₯Έ μ£Όμ†Œκ°’μ„ κ°€μ§„λ‹€. 그리고 str2와 str3은 μ„œλ‘œ 같은 μ£Όμ†Œκ°’μ„ κ°€μ§„λ‹€. 

 

 

Q. newκ°€ μ •ν™•νžˆ 무엇인가?

A. new μ—°μ‚°μžλŠ” 객체λ₯Ό μƒμ„±ν•˜λŠ” 방법 쀑, μƒˆλ‘œμš΄ λ©”λͺ¨λ¦¬ 곡간에 객체λ₯Ό μƒμ„±ν•˜λŠ” 방법이닀. μ™ΈλΆ€μ—μ„œ 값을 λ³€κ²½ν•  λ•Œ λ‹€λ₯Έ 객체와 λΆ„λ¦¬λ˜μ–΄ 값이 λ³€κ²½ν•˜κΈΈ 원할 경우 new μ—°μ‚°μžλ₯Ό μ‚¬μš©ν•˜μ—¬ 객체λ₯Ό μ •μ˜ν•˜λ©΄ λœλ‹€.

 

 

 

 


 

 

 

 

βœ”οΈ  + μ—°μ‚°_ 195p

 

β€’ λ¬Έμžμ—΄ + λ¬Έμžμ—΄ μ—°μ‚°

String str1 = "μ•ˆλ…•" + "ν•˜μ„Έμš”" + "!";
System.out.println(str1);
κ°μ²΄λŠ” λͺ‡ 개 λ§Œλ“€μ–΄μ§ˆκΉŒ? μ²˜μŒμ— "μ•ˆλ…•"κ³Ό "ν•˜μ„Έμš”" 그리고 "!"κΉŒμ§€ 3개의 객체가 생성될 것이닀. κ·Έ ν›„ + μ—°μ‚°μžλ‘œ 연결이 될 것이닀. "μ•ˆλ…•" + "ν•˜μ„Έμš”"둜 "μ•ˆλ…•ν•˜μ„Έμš”"κ°€ λ§Œλ“€μ–΄μ Έ 총 4개의 객체가 되고 "!"κ°€ μ—°κ²°λ˜λ©° "μ•ˆλ…•ν•˜μ„Έμš”!"κ°€ μ™„μ„±λ˜μ–΄ 총 5개의 객체가 λ§Œλ“€μ–΄μ§ˆ 것이닀.

 

 

 

β€’ μžλ£Œν˜•μ— λ”°λ₯Έ + μ—°μ‚°

System.out.println(1 + 2 + "μ•ˆλ…•");
System.out.println("μ•ˆλ…•" + 1 + 2);
첫번째 μ½”λ“œλΆ€ν„° μ‚΄νŽ΄λ³΄λ©΄ μ—°μ†ν•΄μ„œ λ‚˜μ˜€λŠ” 1κ³Ό 2둜 μžλ£Œν˜•μ΄ 숫자 μžλ£Œν˜•μœΌλ‘œ λ™μΌν•˜λ‹€. μ΄λ ‡κ²Œ λ™μΌν•œ μžλ£Œν˜•μ΄ 연달아 λ‚˜μ˜¬ 경우 λ”ν•˜κΈ° μ—°μ‚°μœΌλ‘œ μž‘μš©ν•˜μ—¬ 3 + "μ•ˆλ…•" ν˜•νƒœλ‘œ μ΄λ€„μ§€κ²Œ λœλ‹€. ν•˜μ§€λ§Œ λ‘λ²ˆμ§Έ μ½”λ“œμ²˜λŸΌ "μ•ˆλ…•"κ³Ό 1이 +μ—°μ‚°μžλ‘œ 연결될 경우 λ‹€λ₯Έ μžλ£Œν˜•μœΌλ‘œ μ•ˆλ…•1이 되고 κ·Έ 후에 λ‚˜μ˜€λŠ” 2 λ˜ν•œ μ•ˆλ…•1둜 1이 μžˆμ–΄λ„ 숫자 μžλ£Œν˜•μœΌλ‘œ μΈμ‹ν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— μ•ˆλ…•12κ°€ μ΅œμ’…μ μΈ 값이 될 것이닀.