๐Ÿง  ์ž๋ฐ” ์ฐธ์กฐ ํƒ€์ž…๊ณผ ์ฐธ์กฐ ๋ณ€์ˆ˜ _ Chap 05-1

๐Ÿท๏ธ Tags: Java, ์ฐธ์กฐํƒ€์ž…, ๊ธฐ๋ณธํƒ€์ž…, String, null, Week5


โœจ ํ•™์Šต ํ‚ค์›Œ๋“œ

  • ๊ธฐ๋ณธ ํƒ€์ž… vs ์ฐธ์กฐ ํƒ€์ž… ์ฐจ์ด ์ดํ•ดํ•˜๊ธฐ
  • ์ฐธ์กฐ ํƒ€์ž… ๋ณ€์ˆ˜์— null ํ• ๋‹น ๊ฐ€๋Šฅ์„ฑ ์ดํ•ดํ•˜๊ธฐ
  • NullPointerException ๋ฐœ์ƒ ์›๋ฆฌ ํŒŒ์•…
  • String ๊ฐ์ฒด์˜ ํŠน์ง•๊ณผ ๋น„๊ต ์—ฐ์‚ฐ ๊ฒฐ๊ณผ ๋ถ„์„

๐Ÿ“Œ ๊ธฐ๋ณธ ํƒ€์ž…๊ณผ ์ฐธ์กฐ ํƒ€์ž…

ํ•ญ๋ชฉ ๊ธฐ๋ณธ ํƒ€์ž… ์ฐธ์กฐ ํƒ€์ž…
์ €์žฅ ๋‚ด์šฉ ์‹ค์ œ ๊ฐ’ (๋ฆฌํ„ฐ๋Ÿด) ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ (๊ฐ์ฒด์˜ ์œ„์น˜)
์˜ˆ์‹œ ํƒ€์ž… int, double, boolean ๋“ฑ ๋ฐฐ์—ด, String, ํด๋ž˜์Šค, ์ธํ„ฐํŽ˜์ด์Šค ๋“ฑ
์ดˆ๊ธฐ๊ฐ’ ์ˆซ์ž๋Š” 0, boolean์€ false ๋“ฑ null (์ฃผ์†Œ ์—†์Œ)

๐Ÿง  ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ ์˜์—ญ ๊ฐœ์š”

  • ๐Ÿ›๏ธ ๋ฉ”์†Œ๋“œ ์˜์—ญ: ํด๋ž˜์Šค, static ๋ณ€์ˆ˜, ๋ฉ”์†Œ๋“œ ์ •๋ณด ์ €์žฅ
  • ๐ŸงŠ ํž™(Heap) ์˜์—ญ: new๋กœ ์ƒ์„ฑ๋œ ๊ฐ์ฒด, ๋ฐฐ์—ด์ด ์ €์žฅ๋จ
  • ๐Ÿงฎ JVM ์Šคํƒ ์˜์—ญ: ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ ์‹œ๋งˆ๋‹ค ํ”„๋ ˆ์ž„ ์ƒ์„ฑ

๐Ÿ“Œ ์Šคํƒ ์˜์—ญ ํŠน์ง•:

  • ๊ธฐ๋ณธ ํƒ€์ž… ๋ณ€์ˆ˜ โ†’ ์Šคํƒ์— ๊ฐ’ ์ž์ฒด ์ €์žฅ
  • ์ฐธ์กฐ ํƒ€์ž… ๋ณ€์ˆ˜ โ†’ ํž™์˜ ์ฃผ์†Œ๊ฐ’ ์ €์žฅ
  • ๋ธ”๋ก์ด ๋๋‚˜๋ฉด ์ž๋™์œผ๋กœ ์Šคํƒ์—์„œ ์ œ๊ฑฐ๋จ

๐Ÿ“Œ null ๊ฐ’ ์ด๋ž€?

๐Ÿ”Ž ํŠน์ง•:

  • ์ฐธ์กฐ ํƒ€์ž… ๋ณ€์ˆ˜๋Š” null์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Œ
  • null์ธ์ง€ ์—ฌ๋ถ€๋Š” ๋น„๊ต ์—ฐ์‚ฐ์ž(==, !=)๋กœ ํ™•์ธ ๊ฐ€๋Šฅ
  • null ์ƒํƒœ์—์„œ ๊ฐ์ฒด์˜ ํ•„๋“œ๋‚˜ ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ์˜ˆ์™ธ ๋ฐœ์ƒ โ†’ NullPointerException

๐Ÿ’ป ์˜ˆ์ œ

String str1 = null;
String str2 = "hello";

System.out.println(str1 == null);     // true
System.out.println(str2 != null);     // true
System.out.println(str1 == str2);     // false

๐Ÿ“Œ ๋ฌธ์ž์—ด (String) ํƒ€์ž…์ด๋ž€?

  • ๋ฌธ์ž์—ด์„ ์ €์žฅํ•˜๊ณ  ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋ฉฐ, ๊ธฐ๋ณธ ํƒ€์ž…์ฒ˜๋Ÿผ ๋‹ค๋ค„์งˆ ์ˆ˜ ์žˆ์ง€๋งŒ ์‚ฌ์‹ค์€ ๊ฐ์ฒด์ž„
  • ๋ฌธ์ž์—ด ์„ ์–ธ ์‹œ, ์Œ๋”ฐ์˜ดํ‘œ๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•จ

โœจ ๋ฌธ์ž์—ด ์„ ์–ธ ๋ฐฉ๋ฒ•

์„ ์–ธ ๋ฐฉ์‹ ์„ค๋ช…
String str = โ€œhelloโ€; ๋ฌธ์ž์—ด ๋ฆฌํ„ฐ๋Ÿด. ์ƒ์ˆ˜ํ’€(String Pool)์— ์ €์žฅ๋จ
String str = new String(โ€œhelloโ€); new ์—ฐ์‚ฐ์ž๋กœ ๊ฐ์ฒด ์ƒ์„ฑ. ํž™ ๋ฉ”๋ชจ๋ฆฌ์— ์ƒˆ๋กœ์šด ๊ฐ์ฒด ์ƒ์„ฑ๋จ

โœจ ๋ฌธ์ž์—ด ๋น„๊ต ๋ฐฉ์‹

๋น„๊ต ๋ฐฉ์‹ ์˜๋ฏธ ์‚ฌ์šฉ ๋ฉ”์†Œ๋“œ/์—ฐ์‚ฐ์ž
์ฃผ์†Œ(์ฐธ์กฐ) ๋น„๊ต ๋‘ ๋ณ€์ˆ˜์˜ ๊ฐ์ฒด ์ฃผ์†Œ๊ฐ€ ๊ฐ™์€๊ฐ€? == ๋˜๋Š” !=
๋‚ด์šฉ ๋น„๊ต ๋ฌธ์ž์—ด ์•ˆ์˜ ๊ธ€์ž๊ฐ€ ๊ฐ™์€๊ฐ€? equals() ๋ฉ”์†Œ๋“œ

โš ๏ธ ์ฃผ์˜ํ•  ์ 

  • == ์—ฐ์‚ฐ์ž๋Š” โ€œ๊ฐ™์€ ๊ฐ์ฒด(์ฃผ์†Œ)์ธ๊ฐ€?โ€๋งŒ ๋น„๊ต ๊ฐ€๋Šฅํ•จ
  • ๋ฌธ์ž์—ด ๊ฐ’์ด ๊ฐ™์•„๋„ new String()์œผ๋กœ ๋งŒ๋“  ๊ฐ์ฒด๋Š” ์ฃผ์†Œ๊ฐ€ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ==์€ false๊ฐ€ ๋‚˜์˜ด
  • ๋ฌธ์ž์—ด ๋‚ด์šฉ ๋น„๊ต๋Š” ๋ฐ˜๋“œ์‹œ equals() ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉ

๐Ÿ’ฌ ๋ฌธ์ž์—ด ์˜ˆ์‹œ

String a = "hello";
String b = "hello";
String c = new String("hello");

System.out.println(a == b);         // true - ๊ฐ™์€ ๋ฆฌํ„ฐ๋Ÿด โ†’ ๊ฐ™์€ ์ฃผ์†Œ
System.out.println(a == c);         // false - new๋กœ ์ƒ์„ฑ๋œ ๋ณ„๋„ ๊ฐ์ฒด
System.out.println(a.equals(c));    // true - ๋ฌธ์ž์—ด ๋‚ด์šฉ์€ ๊ฐ™์Œ