๐Ÿ“˜ Chapter 05: ์ฐธ์กฐ ํƒ€์ž…๊ณผ ๋ฐฐ์—ด


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

โœ… ๊ธฐ๋ณธ ํƒ€์ž…๊ณผ ์ฐธ์กฐ ํƒ€์ž…

  • ๊ธฐ๋ณธ ํƒ€์ž…: ์‹ค์ œ ๊ฐ’์„ ๋ณ€์ˆ˜ ์•ˆ์— ์ €์žฅ

  • ์ฐธ์กฐ ํƒ€์ž…: ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ(๋ฒˆ์ง€)๋ฅผ ๋ณ€์ˆ˜ ์•ˆ์— ์ €์žฅ


โœ… ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ ์˜์—ญ

| ์˜์—ญ | ์„ค๋ช… | |โ€”โ€”|โ€”โ€”|

๋ฉ”์†Œ๋“œ ์˜์—ญ ํด๋ž˜์Šค์˜ ๋ฉ”์†Œ๋“œ ์ฝ”๋“œ, static ๋ณ€์ˆ˜ ์ €์žฅ
ํž™(Heap) ์˜์—ญ ๊ฐ์ฒด์™€ ๋ฐฐ์—ด์ด ์ƒ์„ฑ๋˜๋Š” ๊ณต๊ฐ„
JVM ์Šคํƒ ์˜์—ญ ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ ์‹œ ํ”„๋ ˆ์ž„ ์ถ”๊ฐ€/์ œ๊ฑฐ, ์ง€์—ญ ๋ณ€์ˆ˜ ์ €์žฅ


์Šคํƒ์— ์ €์žฅ๋˜๋Š” ๊ฐ’์˜ ์ฐจ์ด

  • ๊ธฐ๋ณธ ํƒ€์ž… ๋ณ€์ˆ˜: ๋ฆฌํ„ฐ๋Ÿด ๊ฐ’์ด ๊ทธ๋Œ€๋กœ ์ €์žฅ

  • ์ฐธ์กฐ ํƒ€์ž… ๋ณ€์ˆ˜: ๊ฐ์ฒด์˜ ์ฃผ์†Œ๊ฐ€ ์ €์žฅ๋จ


โœ… ๋ฌธ์ž์—ด ๋น„๊ต

  • ==, != : ์ฐธ์กฐ ์ฃผ์†Œ ๋น„๊ต

  • .equals() : ๋‚ด๋ถ€ ๋ฌธ์ž์—ด ๋‚ด์šฉ ๋น„๊ต

String str1 = "hello";
String str2 = new String("hello");
System.out.println(str1 == str2);       // false
System.out.println(str1.equals(str2));  // true


โœ… ์ฐธ์กฐ ํƒ€์ž…์˜ ์ดˆ๊ธฐ๊ฐ’

  • ์ฐธ์กฐ ํƒ€์ž… ๋ณ€์ˆ˜๋Š” null๋กœ ์ดˆ๊ธฐํ™” ๊ฐ€๋Šฅ
String name = null;


๐Ÿ”น 05-2 ๋ฐฐ์—ด (Array)

โœ… ๋ฐฐ์—ด์ด๋ž€?

  • ๊ฐ™์€ ํƒ€์ž…์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์—ฐ์†๋œ ๊ณต๊ฐ„์— ๋‚˜์—ดํ•œ ๊ตฌ์กฐ

  • ๊ฐ ์š”์†Œ๋Š” ์ธ๋ฑ์Šค(0๋ถ€ํ„ฐ ์‹œ์ž‘)๋กœ ๊ตฌ๋ถ„

  • ์ƒ์„ฑ๋œ ๋ฐฐ์—ด์˜ ๊ธธ์ด๋Š” ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€๋Šฅ

  • ๋ฐฐ์—ด ์›์†Œ๋ฅผ ์ถœ๋ ฅํ•  ๋• ๋ฐ˜๋ณต๋ฌธ ์‚ฌ์šฉ


๐Ÿ“Œ ์ž๋ฐ”ยทC์˜ ๋ฐฐ์—ด vs ํŒŒ์ด์ฌ์˜ ๋ฆฌ์ŠคํŠธ ๋น„๊ต

ํŠน์ง• Java/C ๋ฐฐ์—ด Python ๋ฆฌ์ŠคํŠธ

|โ€”โ€”|โ€”โ€”โ€”โ€”-|โ€”โ€”โ€”โ€”โ€”-|

ํƒ€์ž… ๊ณ ์ • โœ… ์˜ˆ โŒ ์•„๋‹ˆ์˜ค
ํฌ๊ธฐ ๋ณ€๊ฒฝ โŒ ๋ถˆ๊ฐ€ โœ… ๊ฐ€๋Šฅ
์ž๋ฃŒํ˜• ํ˜ผํ•ฉ โŒ ๋ถˆ๊ฐ€ โœ… ๊ฐ€๋Šฅ


โœ… ๋ฐฐ์—ด ์„ ์–ธ ๋ฐฉ๋ฒ•

// ๋ฐฉ๋ฒ• 1
int[] numbers;

// ๋ฐฉ๋ฒ• 2
int numbers[];


โœ… ๋ฐฐ์—ด ์ƒ์„ฑ ๋ฐฉ๋ฒ•

  • ๊ฐ’ ๋ชฉ๋ก ์ด์šฉ
String[] names = {"์‹ ์šฉ๊ถŒ", "ํ™๊ธธ๋™", "๊น€์ž๋ฐ”"};

์˜ˆ์‹œ1

  • new ์—ฐ์‚ฐ์ž ์ด์šฉ
int[] scores = new int[5]; // 0์œผ๋กœ ์ดˆ๊ธฐํ™”๋จ

โš ๏ธ ์ด๋ฏธ ์„ ์–ธํ•œ ๋ฐฐ์—ด ๋ณ€์ˆ˜๋Š” ๊ฐ’ ๋ชฉ๋ก๋งŒ์œผ๋กœ ์žฌ์ดˆ๊ธฐํ™”ํ•  ์ˆ˜ ์—†์œผ๋ฉฐ, new ํƒ€์ž…[]{...} ํ˜•์‹์„ ์จ์•ผ ํ•จ

int[] scores;
scores = new int[]{90, 80, 70};


๐Ÿ”ธ ๋ฐฐ์—ด์„ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›๋Š” ๋ฉ”์†Œ๋“œ ์‚ฌ์šฉ๋ฒ•


โœ… ๋ฉ”์†Œ๋“œ ์„ ์–ธ

๋งค๊ฐœ๋ณ€์ˆ˜์—๋Š” ๋ฐฐ์—ด ์„ ์–ธ ๋ฐฉ๋ฒ•๊ณผ ๋™์ผํ•˜๊ฒŒ ์ ์–ด์ฃผ๊ธฐ ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœํ•˜๋ฉด์„œ, ๋ฐฐ์—ด ๊ฐ’ ๋„ฃ์„ ๋–„ new ์—ฐ์‚ฐ์ž ์ด์šฉํ•ด์„œ ๋„ฃ์–ด์ฃผ๊ธฐ !!

image


โœ… ๋ฐฐ์—ด ๊ธธ์ด ๋ฐ ๊ฐ’ ์ ‘๊ทผ

int[] arr = new int[3];
System.out.println(arr.length); // ๋ฐฐ์—ด ๊ธธ์ด
arr[0] = 10; // ํŠน์ • ์ธ๋ฑ์Šค์— ๊ฐ’ ์ €์žฅ


โœ… ๋ฐฐ์—ด vs ๋ฌธ์ž์—ด์˜ length ์ฐจ์ด

int[] arr = {1, 2, 3};
System.out.println(arr.length); // ๋ฐฐ์—ด: ์†์„ฑ

String text = "hello";
System.out.println(text.length()); // ๋ฌธ์ž์—ด: ๋ฉ”์„œ๋“œ


โœ… ๋‹ค์ฐจ์› ๋ฐฐ์—ด

int[][] matrix = new int[2][3];

๐Ÿ“Š ์‹œ๊ฐ์  ๊ตฌ์กฐ

scores โ†’
         โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
scores[0] โ†’ [0][0] [0][1] [0][2]
scores[1] โ†’ [1][0] [1][1] [1][2]
         โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜


๐Ÿ“Œ ๋น„์ •๋ฐฉํ˜• ๋ฐฐ์—ด (Jagged Array)

int[][] jagged = new int[2][];
jagged[0] = new int[2];
jagged[1] = new int[3];

โœ”๏ธ ๊ฐ ํ–‰๋งˆ๋‹ค ๋‹ค๋ฅธ ์—ด ๊ธธ์ด ๊ฐ€๋Šฅ


โœ… ๋‹ค์ฐจ์› ๋ฐฐ์—ด ๊ฐ’ ๋ชฉ๋ก ์ดˆ๊ธฐํ™”

int[][] matrix = {
  {1, 2, 3},
  {4, 5, 6}
};


โœ… ๋ฐฐ์—ด ๋ณต์‚ฌ

  • ๋ฐฉ๋ฒ• 1: for๋ฌธ ์ด์šฉ
int[] arr1 = {1, 2, 3};
int[] arr2 = new int[arr1.length];
for (int i = 0; i < arr1.length; i++) {
  arr2[i] = arr1[i];
}
  • ๋ฐฉ๋ฒ• 2: System.arraycopy() ์ด์šฉ
System.arraycopy(arr1, 0, arr2, 0, arr1.length);


โœ… ํ–ฅ์ƒ๋œ for๋ฌธ (Enhanced for loop)

for (int score : scores) {
  System.out.println(score);
}


๐Ÿ”น 05-3 ์—ด๊ฑฐ ํƒ€์ž… (Enum)

โœ… ์—ด๊ฑฐ ํƒ€์ž…์ด๋ž€?

  • ์—ด๊ฑฐ ํƒ€์ž…์€ ํ•œ์ •๋œ ๊ฐ’๋งŒ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ์ž๋ฃŒํ˜•

  • ์˜ˆ: ์š”์ผ, ๊ณ„์ ˆ ๋“ฑ

public enum Week {
  MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}


๐Ÿ“Œ ์—ด๊ฑฐ ํƒ€์ž… ์‚ฌ์šฉ ์˜ˆ์‹œ

Week today = Week.FRIDAY;
System.out.println(today);


โœ… ์—ด๊ฑฐ ํƒ€์ž… ๋ณ€์ˆ˜๋Š” ์ฐธ์กฐ ํƒ€์ž…์ด๋ฏ€๋กœ null ์ €์žฅ ๊ฐ€๋Šฅ

Week birthday = null;


โœ… Calendar ํด๋ž˜์Šค์™€ ์—ด๊ฑฐ ํƒ€์ž… ์—ฐ๋™ ์˜ˆ์‹œ

import java.util.Calendar;

Week today = null;
Calendar cal = Calendar.getInstance();
int week = cal.get(Calendar.DAY_OF_WEEK);

switch (week) {
  case 1: today = Week.SUNDAY; break;
  case 2: today = Week.MONDAY; break;
  case 3: today = Week.TUESDAY; break;
  case 4: today = Week.WEDNESDAY; break;
  case 5: today = Week.THURSDAY; break;
  case 6: today = Week.FRIDAY; break;
  case 7: today = Week.SATURDAY; break;
}
System.out.println("์˜ค๋Š˜ ์š”์ผ: " + today);


5๊ฐ• ์—ฐ์Šต ๋ฌธ์ œ

05_2 4๋ฒˆ

image

  1. ์ดˆ๊ธฐ๊ฐ’ ์„ค์ • ์ฃผ์˜ int max = 0; ์œผ๋กœ ์„ค์ •ํ•˜๋ฉด, ๐Ÿ‘‰ ๋ฐฐ์—ด์— ์Œ์ˆ˜๋งŒ ์žˆ๋Š” ๊ฒฝ์šฐ ์˜ฌ๋ฐ”๋ฅธ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜ค์ง€ ์•Š์Œ! ๐Ÿ”ง ํ•ด๊ฒฐ: int max = Integer.MIN_VALUE;๋กœ ์„ค์ •ํ•˜๋Š” ๊ฒŒ ์•ˆ์ „ํ•จ.

  2. ๋ฐ˜๋ณต๋ฌธ ๋ฒ”์œ„ i < array.length ๐Ÿ‘‰ ๋ฐฐ์—ด ์ธ๋ฑ์Šค ์ดˆ๊ณผํ•˜์ง€ ์•Š๋„๋ก ํ•ญ์ƒ .length ํ™œ์šฉ!

  3. continue๋Š” ์ƒ๋žต ๊ฐ€๋Šฅ if ์กฐ๊ฑด์ด false์ผ ๋•Œ ์•„๋ฌด๊ฒƒ๋„ ์•ˆ ํ•˜๋ฉด continue ์—†์–ด๋„ ๋จ. ์ฝ”๋“œ ๊ฐ„๊ฒฐํ™” ๊ฐ€๋Šฅ!

05_2 5๋ฒˆ ๋ฌธ์ œ

image