๐Ÿ’ป Java Day 3

YDCยท2025๋…„ 6์›” 9์ผ

์šฐํ…Œ์ฝ”8๊ธฐ

๋ชฉ๋ก ๋ณด๊ธฐ
3/23
post-thumbnail

โœ… Day 2 ๋ณต์Šต

  • switch() case 1 ๊ฐ™์€ ๋ฌธ๋ฒ•์œผ๋กœ ์‚ฌ์šฉ
  • ๊ฐ„๋‹จํ•œ ์กฐ๊ฑด์˜ if else ๋ฌธ์„ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ์Œ
  • jumpable์„ ์ด์šฉํ•ด์„œ ์ตœ์ ํ™” ๊ฐ€๋Šฅ
  • ๋ณต์žกํ•œ ์กฐ๊ฑด (and, ํฌ๊ฑฐ๋‚˜ ๊ฐ™๋‹ค)์€ ๋ถˆ๊ฐ€๋Šฅ
  • double์€ ์†Œ์ˆ˜์ ๊นŒ์ง€ ํ•ด์ฃผ๋Š” int

๐Ÿ“… ์˜ค๋Š˜์˜ ํ•™์Šต ๊ณ„ํš

[์˜ค์ „]

  1. ๋ฐฐ์—ด(Array) ๊ธฐ๋ณธ ๋ฌธ๋ฒ• ํ•™์Šต
  2. for / while ๋ฐ˜๋ณต๋ฌธ์œผ๋กœ ๋ฐฐ์—ด ์ถœ๋ ฅํ•˜๊ธฐ
  3. ์ž…๋ ฅ๋ฐ›์€ ๊ฐ’์„ ๋ฐฐ์—ด์— ์ €์žฅ ์—ฐ์Šต
  4. ์œ„ ๋‚ด์šฉ์„ ์ด์šฉํ•ด ํˆฌ๋‘ ๋ฆฌ์ŠคํŠธ ํ”„๋กœ๊ทธ๋žจ ๋งŒ๋“ค๊ธฐ

[์˜คํ›„] Todo List ๊ธฐ๋Šฅ ์ถ”๊ฐ€

  1. ํ• ์ผ์ด ์ง€๊ธˆ์€ ์‹œ์Šคํ…œ ๊ตฌ๋™์„ ์ข…๋ฃŒํ•˜๋ฉด ์‚ฌ๋ผ์ง€๋Š”๋ฐ ์ด๊ฑธ ๋ฐ์ดํ„ฐ๋กœ ๋‚จ๊ฒจ์„œ ๊ธฐ์–ตํ•˜๊ฒŒ ํ•˜๊ธฐ
  2. ํ• ์ผ์„ ์™„๋ฃŒํ•˜๋ฉด ์™„๋ฃŒ! ์ฒดํฌ๋ฆฌ์ŠคํŠธ ๋งŒ๋“ค๊ธฐ
  3. ์‚ญ์ œ ๊ธฐ๋Šฅ ์ถ”๊ฐ€


๐Ÿ“˜ 1. ๋ฐฐ์—ด(Array)

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

์˜ˆ์‹œ ์ฝ”๋“œ

int[] number = new int[5]; // ํฌ๊ธฐ 5์งœ๋ฆฌ ๋ฐฐ์—ด
String[] fruits = {"apple", "banana", "peach"};
๋ฐฐ์—ด์— ๊ฐ’์„ ์ง‘์–ด๋„ฃ๊ณ  ๊บผ๋‚ด๊ธฐ

public class Main {
    public static void main(String[] args) {
        String[] todos = new String[10];
        todos[0] = "์•„์นจ ๋‹ฌ๋ฆฌ๊ธฐ";
        todos[1] = "java ๊ณต๋ถ€ํ•˜๊ธฐ";
        System.out.println(todos[0]);
        System.out.println(todos[1]);
    }
}

์ถœ๋ ฅ
์•„์นจ ๋‹ฌ๋ฆฌ๊ธฐ
๊ณต๋ถ€ํ•˜๊ธฐ

๐Ÿ”๋ฐ˜๋ณต๋ฌธ์œผ๋กœ ๋ฐฐ์—ด ์ถœ๋ ฅํ•˜๊ธฐ

public class Main {
    public static void main(String[] args) {
        String[] todos = new String[10];
        todos[0] = "์•„์นจ ๋‹ฌ๋ฆฌ๊ธฐ";
        todos[1] = "์•„์นจ ์‹์‚ฌํ•˜๊ธฐ";
        todos[2] = "java ๊ณต๋ถ€ํ•˜๊ธฐ";

        for (int i = 0; i < todos.length; i++) {
            if (todos[i] != null) {
                System.out.println((i + 1) + ". " + todos[i]);
            }
        }
    }
}

์ถœ๋ ฅ
1. ์•„์นจ ๋‹ฌ๋ฆฌ๊ธฐ
2. ์•„์นจ ์‹์‚ฌํ•˜๊ธฐ
3. java ๊ณต๋ถ€ํ•˜๊ธฐ

โœ๏ธ 3, 4. ๋ฐฐ์—ด์— ์ž…๋ ฅ๊ฐ’ ์ €์žฅํ•˜๊ธฐ + ๊ฐ„๋‹จํ•œ Todo ๋ฆฌ์ŠคํŠธ ๋งŒ๋“ค๊ธฐ

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String[] todos = new String[100];
        int count = 0;
    while (true) {
        System.out.println("๋ฉ”๋‰ด๋ฅผ ์„ ํƒํ•ด ์ฃผ์„ธ์š”");
        System.out.println("1.ํ•  ์ผ ์ถ”๊ฐ€");
        System.out.println("2.ํ˜„์žฌ ํ•  ์ผ ํ™•์ธ");
        System.out.println("3.์ข…๋ฃŒ");
        System.out.print("๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•ด ์ฃผ์„ธ์š”: ");
        int choice = sc.nextInt();
        sc.nextLine();

        switch (choice) {
            case 1:
                System.out.print("ํ• ์ผ์„ ์ž…๋ ฅํ•˜์„ธ์š” : ");
                String todo = sc.nextLine();
                todos[count] = todo;
                count++;
                System.out.println("ํ•  ์ผ์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.");
                break;

            case 2:
                System.out.println("์˜ค๋Š˜ ํ• ์ผ ๋ชฉ๋ก์ž…๋‹ˆ๋‹ค. : ");
                if (count == 0) {
                    System.out.println("๋“ฑ๋ก๋œ ํ•  ์ผ์ด ์—†์Šต๋‹ˆ๋‹ค.");
                } else {
                    for (int i = 0; i < count; i++) {
                        System.out.println((i + 1) + "." + todos[i]);
                    }
                }
                break;

            case 3:
                System.out.println("์‹œ์Šคํ…œ์„ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค : ");
                sc.close();
                return;

            default:
                System.out.println("์ž˜๋ชป๋œ ์ž…๋ ฅ์ž…๋‹ˆ๋‹ค.");
        }
    }
}

}

๐Ÿง  ๋ฆฌ๋ทฐ

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String[] todos = new String[100];
        int count = 0;
    while (true) {
        System.out.println("๋ฉ”๋‰ด๋ฅผ ์„ ํƒํ•ด ์ฃผ์„ธ์š”");
        System.out.println("1.ํ•  ์ผ ์ถ”๊ฐ€");
        System.out.println("2.ํ˜„์žฌ ํ•  ์ผ ํ™•์ธ");
        System.out.println("3.์ข…๋ฃŒ");
        System.out.print("๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•ด ์ฃผ์„ธ์š”: ");
        int choice = sc.nextInt();

        switch (choice) {
            case 1:
                System.out.print("ํ• ์ผ์„ ์ž…๋ ฅํ•˜์„ธ์š” : ");
                String todo = sc.nextLine();
                todos[count] = todo;
                count++;
                System.out.println("ํ•  ์ผ์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.");
                break;
        }
    }
}

}
์—ฌ๊ธฐ์—์„œ ํ…Œ์ŠคํŠธ ์‹คํ–‰์„ ํ–ˆ๋Š”๋ฐ,
'๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š”' ๋‹ค์Œ์— ํ•  ์ผ์„ ์ž…๋ ฅ๋„ ์•ˆ ํ–ˆ๋Š”๋ฐ while๋ฌธ์œผ๋กœ ๋Œ์•„๊ฐ€์„œ '๋ฉ”๋‰ด๋ฅผ ์„ ํƒํ•ด์ฃผ์„ธ์š”'๊ฐ€ ์ถœ๋ ฅ๋๋‹ค.
๊ทธ ์ด์œ ๋Š” nextInt() ๋•Œ๋ฌธ์ด๋ž€๋‹ค.
nextInt()๋Š” ์‚ฌ์šฉ์ž๊ฐ€ 1โŽ์„ ์ž…๋ ฅํ–ˆ์„ ๋•Œ ์ˆซ์ž 1๋งŒ ์ฝ๊ณ ,
์—”ํ„ฐ(โŽ)๋Š” ์ž…๋ ฅ ๋ฒ„ํผ์— ๋‚จ๊ธฐ๋Š”๋ฐ
๊ทธ ๋‚จ์•„์žˆ๋Š” ์—”ํ„ฐ๋ฅผ ๋ฐ”๋กœ ๋‹ค์Œ nextLine()์ด ์ฝ๊ฒŒ ๋˜๋ฉด์„œ
ํ•  ์ผ์„ ์ž…๋ ฅ๋ฐ›๋Š” ๋ถ€๋ถ„์ด ์ž๋™์œผ๋กœ ๋„˜์–ด๊ฐ€๋ฒ„๋ฆฌ๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค.

โœ… ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

โ†’ nextInt() ๋‹ค์Œ์— nextLine()์„ ๋„ฃ์–ด์„œ ๋ฒ„ํผ์— ๋‚จ์•„์žˆ๋Š” \n์„ ์ œ๊ฑฐํ•˜๋Š” ๊ฒƒ!

๐Ÿ“Œ ๋ฒ„ํผ๋ž€?

์ž„์‹œ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๊ณต๊ฐ„
โ†’ ๋ฐ์ดํ„ฐ๋ฅผ ํ•œ ๋ฒˆ์— ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š๊ณ  ์ž ๊น ๋‹ด์•„๋‘๋Š” โ€˜๋Œ€๊ธฐ์‹คโ€™ ๊ฐ™์€ ๊ณณ

๐Ÿ’ก case vs default

case๋ฅผ ์‚ฌ์šฉํ•˜๋‹ˆ๊นŒ ๋ญ”๊ฐ€ ๋” ํŽธํ•œ ๊ฑฐ ๊ฐ™๊ธฐ๋„ ํ•˜๊ณ 

case์—์„œ else ๊ฐ™์€ ๊ธฐ๋Šฅ์ด ์žˆ์—ˆ๋‹ค

๋ฐ”๋กœ default! ๋””ํดํŠธ!

case 1,2,3 ๋‚ด๊ฐ€ ์„ค์ •ํ•œ ์ผ€์ด์Šค์— ํ•ด๋‹น๋˜์ง€ ์•Š์œผ๋ฉด ์ „๋ถ€ default๋กœ ๊ฐ€๋Š” else์™€ ๋˜‘๊ฐ™์€ ๊ธฐ๋Šฅ์ด์—ˆ๋‹ค

๐Ÿ ํŒŒ์ด์ฌ๊ณผ์˜ ์ฐจ์ด

Array๋„ ํฌ๊ฒŒ ๋‹ค๋ฅธ ๊ฒƒ ๊ฐ™์ง€๋Š” ์•Š์€๋ฐ
String[100] ์ด๋ ‡๊ฒŒ ํŒŒ์ด์ฌ์—์„œ๋Š” ๊ณต๊ฐ„์„ ๋งŒ๋“ค์–ด๋‘์ง„ ์•Š์•˜๋˜ ๊ฑฐ ๊ฐ™๋‹ค
์—ฌํŠผ ์ž๋ฐ”๋Š” ๋ถˆ์นœ์ ˆ? ๊ผผ๊ผผ? ํ•˜๋‹คโ€ฆ

โ˜€๏ธ ์˜ค์ „ ๋ชฉํ‘œ ์ „๋ถ€ ์™„๋ฃŒ!

๐Ÿ“˜ ์ถ”๊ฐ€ ํ•™์Šต - CS ๊ณต๋ถ€ ์‹œ์ž‘!

์œ ํŠœ๋ฒ„ ๊ธฐ์ˆ ๋…ธํŠธwith์•Œ๋ ‰์ด๋ผ๋Š” ์‚ฌ๋žŒ์ด ์“ด
ใ€ŠAI ์‹œ๋Œ€ ๊ฐœ๋ฐœ์„ ์œ„ํ•œ ํ•„์ˆ˜ IT ์ง€์‹ ๊ธฐ์ˆ ๋…ธํŠธใ€‹๋ฅผ ๊ตฌ์ž…ํ•ด
129ํŽ˜์ด์ง€๊นŒ์ง€ ์ฝ์—ˆ๋‹ค
๋น„์ „๊ณต์ž๋„ ์•Œ๊ธฐ ์‰ฝ๊ฒŒ, ๊ฐœ๋ฐœ์„ ์‹œ์ž‘ํ•  ๋•Œ ์•Œ๋ฉด ์ข‹์„ ๊ฒƒ๋“ค์ด ์ž”๋œฉ ์ ํ˜€์žˆ์—ˆ๋‹ค
์ด๊ฑธ๋กœ ์‹œ์ž‘ํ•ด์„œ ๋งค์ผ CS ๊ณต๋ถ€์™€ ์ด๋ก ๋„ ํ•ด์•ผ๊ฒ ๋‹ค


๐Ÿ“Œ 1. ๋ฐ์ดํ„ฐ๋กœ ๋‚จ๊ธฐ๊ธฐ

> ๋‚ด๊ฐ€ ์›ํ•˜๋Š” ๊ธฐ๋Šฅ์€ ๋‚ด๊ฐ€ ํ• ์ผ์„ ๋“ฑ๋กํ•˜๋ฉด  
> ํ”„๋กœ๊ทธ๋žจ์„ ๊ป๋‹ค ์ผœ๋„ ๊ทธ ํ• ์ผ ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋˜์–ด์„œ ๋ถˆ๋Ÿฌ์™€์ง€๋Š” ๊ฒƒ  
> โ†’ JSON์„ ์‚ฌ์šฉํ•ด์„œ ๋งŒ๋“ค๊ธฐ 

๐ŸŽฏ ๋” ์•Œ์•„์•ผ ํ•  ๊ฐœ๋…๋“ค

1. ํด๋ž˜์Šค ์„ค๊ณ„ & ๊ฐ์ฒด ์ƒ์„ฑ

  • JSON๋„ ๊ฒฐ๊ตญ ๊ฐ์ฒด๋ฅผ ์ €์žฅํ•˜๋Š” ํ˜•์‹
  • Todo ํด๋ž˜์Šค ๋งŒ๋“ค๊ธฐ: task, isDone ํ•„๋“œ
  • new Todo(...)๋กœ ๋งŒ๋“ค๊ธฐ
  • ํด๋ž˜์Šค ์ •์˜, ์ƒ์„ฑ์ž, ๊ฐ์ฒด ๋ฐฐ์—ด/๋ฆฌ์ŠคํŠธ์— ๋„ฃ๊ธฐ

2. ArrayList์™€ ์ œ๋„ค๋ฆญ

  • ์—ฌ๋Ÿฌ ๊ฐœ ์ €์žฅํ•˜๋ ค๋ฉด List<Todo> ํ•„์š”
  • add(), get(), remove() ๋“ฑ ๋ฉ”์„œ๋“œ ์‚ฌ์šฉ๋ฒ•

3. Gson ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ฌ์šฉ๋ฒ•

  • Java ๊ฐ์ฒด โ†’ JSON ๋ฌธ์ž์—ด: toJson()
  • JSON ๋ฌธ์ž์—ด โ†’ Java ๊ฐ์ฒด: fromJson()

4. ํŒŒ์ผ ์ž…์ถœ๋ ฅ (I/O)

  • JSON ๋ฌธ์ž์—ด์„ ํŒŒ์ผ์— ์ €์žฅํ•˜๊ณ  ๋ถˆ๋Ÿฌ์˜ค๊ธฐ
  • FileWriter, FileReader, try-with-resources, try-catch

๐Ÿงฑ ํด๋ž˜์Šค ์„ค๊ณ„ & ๊ฐ์ฒด ์ƒ์„ฑ

public class Todo {
    String task; // ํ• ์ผ
    boolean isDone; // ํ–ˆ๋ƒ ์•ˆ ํ–ˆ๋ƒ
}

๐Ÿ“˜ 1. ํด๋ž˜์Šค ์„ค๊ณ„ & ๊ฐ์ฒด ์ƒ์„ฑ

ํด๋ž˜์Šค๋ž€?
๐Ÿ‘‰ ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๋ฅผ ๋งŒ๋“œ๋Š” ์„ค๊ณ„๋„

์˜ˆ:

ํ• ์ผ:

์™„๋ฃŒ ์—ฌ๋ถ€:
์ด๋Ÿฐ ๊ตฌ์กฐ๋ฅผ ๋งŒ๋“ค๊ณ  ์‹ถ์„ ๋•Œ ์ž๋ฐ”์—์„  ์ด๋ ‡๊ฒŒ ํ‘œํ˜„ํ•จ:

public class Todo {
    String task; // ํ• ์ผ
    boolean isDone; // ํ–ˆ๋ƒ ์•ˆ ํ–ˆ๋ƒ
}

์ด๋ ‡๊ฒŒ ์„ค๊ณ„๋„๋ฅผ ๋งŒ๋“ค์—ˆ์œผ๋ฉด ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•จ:

Todo t = new Todo();

์ด๋Ÿฌ๋ฉด ์ƒˆ๋กญ๊ฒŒ ๋งŒ๋“ค์–ด์กŒ์ง€๋งŒ ์•ˆ์— ๋ฐ์ดํ„ฐ๊ฐ€ ์—†์–ด์„œ ๋„ฃ์–ด์ค˜์•ผ ํ•จ:

t.task = "๋ฐฅ ๋จน๊ธฐ";
t.isDone = true;

์ƒ์„ฑ์ž๋ผ๋Š” ๊ฑธ ์“ฐ๋ฉด ๋” ๊ฐ„๋‹จํžˆ ์“ธ ์ˆ˜ ์žˆ์Œ:


Todo t = new Todo("๋ฐฅ ๋จน๊ธฐ", true);

๐Ÿ“Œ ์ƒ์„ฑ์ž๋Š” ์ด๋ ‡๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์–ด:

public class Todo {
    String task; // ํ• ์ผ
    boolean isDone; // ํ–ˆ๋ƒ ์•ˆ ํ–ˆ๋ƒ
public Todo(String task, boolean isDone) {
    this.task = task;
    this.isDone = isDone;
}

}
โ˜ ์—ฌ๊ธฐ์„œ this๋Š” ์ด ํด๋ž˜์Šค ์•ˆ์— ์žˆ๋Š” task ๋ณ€์ˆ˜๋ฅผ ๋งํ•ด.
๋‚ด๊ฐ€ task๋ผ๊ณ  ์“ด ๊ฑธ ํด๋ž˜์Šค์˜ task๋กœ ์ดํ•ดํ•œ๋‹ค๋Š” ๋œป!

๐Ÿ“˜ 2. ArrayList์™€ ์ œ๋„ค๋ฆญ

ArrayList๋ž€?

๐Ÿ‘‰ ๋ฐฐ์—ด์˜ ์—…๊ทธ๋ ˆ์ด๋“œ ๋ฒ„์ „์ด์ž ์ž๋™์œผ๋กœ ๊ธธ์ด๋ฅผ ๋Š˜๋ ค์ฃผ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ

import java.util.ArrayList;

ArrayList<Todo> todos = new ArrayList<>();
์˜ˆ์‹œ ์ฝ”๋“œ:

import java.util.ArrayList;

public class Main {
    public static void main(String[] args) {
        ArrayList<Todo> todos = new ArrayList<>();

        // ํ•  ์ผ ์ถ”๊ฐ€
        todos.add(new Todo("Java ๊ณต๋ถ€ํ•˜๊ธฐ", false));
        todos.add(new Todo("์šด๋™ํ•˜๊ธฐ", true));
        todos.add(new Todo("๋ณต์Šตํ•˜๊ธฐ", false));

        // ์ถœ๋ ฅ
        for (int i = 0; i < todos.size(); i++) {
            System.out.println((i + 1) + ". " + todos.get(i));
        }
    }
}

๐Ÿ’ก ์—ฌ๊ธฐ์„œ <> ์•ˆ์— ๋“ค์–ด๊ฐ€๋Š” ํƒ€์ž…์„ ์ œ๋„ค๋ฆญ(Generic)์ด๋ผ๊ณ  ํ•ด.

์›๋ž˜๋Š” ํƒ€์ž…์„ ์ง์ ‘ ์จ์„œ(int, String, boolean) ๊ณ ์ •ํ–ˆ์ง€๋งŒ

์ œ๋„ค๋ฆญ์€ ๊บฝ์‡  < > ์•ˆ์— ๋“ค์–ด๊ฐ€๋Š” ํƒ€์ž…์„ ๋‚˜์ค‘์— ์ •ํ•ด์„œ ์œ ์—ฐํ•˜๊ฒŒ ์“ธ ์ˆ˜ ์žˆ์Œ!

์ด๋ ‡๊ฒŒ ํ–ˆ์œผ๋‹ˆ๊นŒ Todo ํด๋ž˜์Šค์— String๊ณผ boolean์ด ์—†์œผ๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋œธ โ—

๐Ÿ“Œ ๋ฉ”์„œ๋“œ ์ •๋ฆฌ:

.add() : ArrayList์— ์ƒˆ๋กœ์šด ๊ฑธ ์ถ”๊ฐ€ํ•  ๋•Œ ์‚ฌ์šฉ

.get(index) : ๋ฆฌ์ŠคํŠธ์—์„œ ๋ช‡ ๋ฒˆ์งธ ์š”์†Œ๋ฅผ ๋ถˆ๋Ÿฌ์˜ฌ ๋•Œ ์‚ฌ์šฉ

get(999) ์ด๋Ÿฐ ์‹์œผ๋กœ ์—†๋Š” ์ธ๋ฑ์Šค๋ฅผ ๋ถ€๋ฅด๋ฉด IndexOutOfBoundsException ์—๋Ÿฌ ๋ฐœ์ƒ!
โ†’ ๋ฐ˜๋“œ์‹œ .size()๋กœ ํฌ๊ธฐ๋ฅผ ํ™•์ธํ•˜๊ณ  ์ ‘๊ทผํ•ด์•ผ ํ•จ

.remove(index) : ๋ฆฌ์ŠคํŠธ์—์„œ ํ•ด๋‹น ์ธ๋ฑ์Šค๋ฅผ ์ œ๊ฑฐํ•  ๋•Œ ์‚ฌ์šฉ

๐Ÿ” 3. ํด๋ž˜์Šค์™€ ArrayList๋ฅผ ์‚ฌ์šฉํ•œ ๋ฆฌํŒฉํ† ๋ง

import java.util.ArrayList;
import java.util.Scanner;

public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
ArrayList todos = new ArrayList<>();

    while (true) {
        System.out.println("\n๋ฉ”๋‰ด๋ฅผ ์„ ํƒํ•ด ์ฃผ์„ธ์š”");
        System.out.println("1. ํ•  ์ผ ์ถ”๊ฐ€");
        System.out.println("2. ํ˜„์žฌ ํ•  ์ผ ํ™•์ธ");
        System.out.println("3. ํ•  ์ผ ์™„๋ฃŒ ์ฒ˜๋ฆฌ");
        System.out.println("4. ํ•  ์ผ ์‚ญ์ œ");
        System.out.println("5. ์ข…๋ฃŒ");
        System.out.print("๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•ด ์ฃผ์„ธ์š”: ");

        int choice = sc.nextInt();
        sc.nextLine();

        switch (choice) {
            case 1:
                System.out.print("ํ• ์ผ์„ ์ž…๋ ฅํ•˜์„ธ์š” : ");
                String task = sc.nextLine();
                todos.add(new Todo(task, false));
                System.out.println("ํ•  ์ผ์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.");
                break;

            case 2:
                System.out.println("์˜ค๋Š˜ ํ• ์ผ ๋ชฉ๋ก์ž…๋‹ˆ๋‹ค.");
                if (todos.isEmpty()) {
                    System.out.println("์˜ค๋Š˜ ํ•  ์ผ์ด ์—†์Šต๋‹ˆ๋‹ค.");
                } else {
                    for (int i = 0; i < todos.size(); i++) {
                        System.out.println((i + 1) + ". " + todos.get(i));
                    }
                }
                break;

            case 3:
                System.out.println("์™„๋ฃŒํ•  ๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š”.");
                int choice2 = sc.nextInt();
                sc.nextLine();
                if (choice2 > 0 && choice2 <= todos.size()) {
                    todos.get(choice2 - 1).isDone = true;
                    System.out.println("์™„๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.");
                } else {
                    System.out.println("์ž˜๋ชป๋œ ๋ฒˆํ˜ธ์ž…๋‹ˆ๋‹ค.");
                }
                break;

            case 4:
                System.out.println("์‚ญ์ œํ•  ๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š”.");
                int choice3 = sc.nextInt();
                sc.nextLine();
                if (choice3 > 0 && choice3 <= todos.size()) {
                    todos.remove(choice3 - 1);
                    System.out.println("์‚ญ์ œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.");
                } else {
                    System.out.println("์ž˜๋ชป๋œ ๋ฒˆํ˜ธ์ž…๋‹ˆ๋‹ค.");
                }
                break;

            case 5:
                System.out.println("์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค.");
                return;

            default:
                System.out.println("์ž˜๋ชป๋œ ์ž…๋ ฅ์ž…๋‹ˆ๋‹ค.");
        }
    }
}                                             
                                                                          

์ด๋ ‡๊ฒŒ ๋ฆฌํŽ™ํ† ๋ง ํ–ˆ๋‹ค

๋ฐ์ดํ„ฐ ์ €์žฅ์ด ๋ฐฐ์—ด์—์„œ ArrayList๋กœ ๋ฐ”๋€Œ์—ˆ๊ณ 

๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋„ String์—์„œ Todo ํด๋ž˜์Šค๋กœ ๋ฐ”๋€Œ์—ˆ๋‹ค

main์—์„œ ์ „๋ถ€ํ•˜๊ณ  ์žˆ๋˜ ์ฝ”๋“œ๊ตฌ์กฐ๋„ ๋ฉ”์„œ๋“œ๋ฅผ ๋ถ„๋ฆฌํ–ˆ๋‹ค

์ถœ๋ ฅ๋„ ์ง์ ‘ ์ถœ๋ ฅ์—์„œ toString()์„ ์˜ค๋ฒ„๋ผ์ด๋”ฉํ•ด์„œ ๋ณด๊ธฐ์ข‹๊ณ  ๊น”๋”ํ•˜๊ฒŒ ํ–ˆ๋‹ค!

์ด๋ฒˆ ๋ฆฌํŒฉํ† ๋ง์€ ๋‹จ์ˆœํ•œ ์ •๋ฆฌ๊ฐ€ ์•„๋‹ˆ๋ผ
โ€œ์ ˆ์ฐจ์  ์ฝ”๋“œโ€์—์„œ โ€œ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐโ€์œผ๋กœ์˜ ๋„์•ฝ์ด์—ˆ๋‹ค๊ณ  ํ•œ๋‹ค! Gpt ์™ˆ ํ•˜ํ•˜ ๐Ÿ˜†

๐Ÿ” 4. Gson ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ฌ์šฉ๋ฒ•

์„ค์น˜ํ•˜๊ณ  ์ ์šฉํ•˜๋‹ค๊ฐ€ ๋นก์ณ์„œ ๋…ธํŠธ๋ถ ๋ถ€์Šฌ๋ป”โ€ฆ. ๊ฒฐ๊ตญ ๋‚ ๋ฆฌ๊ณ  ํ”„๋กœ์ ํŠธ ๋‹ค์‹œ ๋งŒ๋“ค์—ˆ๋‹คโ€ฆใ…œ
Gson์ด๋ž€? ์ž๋ฐ” ๊ฐ์ฒด๋ฅผ Json ๋ฌธ์ž์—ด๋กœ ๋ฐ”๊ฟ”์ฃผ๋Š” ๊ตฌ๊ธ€์—์„œ ๋งŒ๋“  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
๋‚ด๊ฐ€ ๋งŒ๋“  Todo ๊ฐ์ฒด๋ฅผ ๊ทธ๋ƒฅ ์ €์žฅํ•˜๋ฉด ์ €์žฅ์ด ์•ˆ๋˜์ง€๋งŒ Json์œผ๋กœ ํ•˜๋ฉด ์ €์žฅ์ด ๋œ๋‹ค!!
๊ฐ์ฒด๋ฅผ Json์œผ๋กœ ๋ฐ”๊พธ๊ธฐ toJson, Json์„ ๊ฐ์ฒด๋กœ ๋ฐ”๊พธ๊ธฐ fromJson

Gson gson = new Gson();
String json = gson.toJson(todos); // โ†’ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜
System.out.println(json);

์ด๋Ÿฌ๋ฉด Json์œผ๋กœ ๋ฐ”๋€Œ๊ณ 

Type type = new TypeToken<ArrayList<Todo>>(){}.getType();
ArrayList<Todo> loaded = gson.fromJson(json, type);

์ด๋Ÿฌ๋ฉด ๋ฌธ์ž์—ด์ด ๋‹ค์‹œ ๊ฐ์ฒด๋กœ ๋ฐ”๋€Œ๋Š”๋ฐ
๊ฐ‘์ž๊ธฐ type์ด ํŠ€์–ด๋‚˜์™”๋‹คโ€ฆ??

Java๋Š” ์ œ๋„ค๋ฆญ ํƒ€์ž…์„ ๋Ÿฐํƒ€์ž„์— ์žƒ์–ด๋ฒ„๋ ค.
๊ทธ๋ž˜์„œ ArrayList์ฒ˜๋Ÿผ ๋ณต์žกํ•œ ํƒ€์ž…์€
์ง์ ‘ ํƒ€์ž… ์ •๋ณด๋ฅผ ์•Œ๋ ค์ค˜์•ผ ํ•ด์„œ TypeToken์„ ์จ์•ผํ•œ๋‹ค๊ณ  ํ•œ๋‹ค.

๐Ÿ” 5. ํŒŒ์ผ์˜ ์ž…์ถœ๋ ฅ

ํŒŒ์ผ๋กœ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ƒˆ๋กœ์šด ํŒŒ์ผ์„ ๋งŒ๋“ค์–ด์•ผํ•˜๋Š”๋ฐ
์•Œ์•„ ๋‘์–ด์•ผ ํ•  ๋ฌธ๋ฒ•์ด ์žˆ๋‹ค

โœ… 1. try-with-resources ๋ฌธ๋ฒ•

FileWriter๋ฅผ ์ž๋™์œผ๋กœ ๋‹ซ์•„์ฃผ๋Š” ๊ธฐ๋Šฅ

try (FileWriter writer = new FileWriter(filename)) {
    writer.write(json);
}
catch (IOException e) {
    System.out.println("โŒ ์ €์žฅ ์‹คํŒจ: " + e.getMessage());
}

try์•ˆ์— ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์žก์•„์ฃผ๋Š” ์ฝ”๋“œ

import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import com.google.gson.Gson;

public class TodoManager {
    public static void saveTodosToFile(ArrayList<Todo> todos, String filename) {
        Gson gson = new Gson();
        String json = gson.toJson(todos);

        try (FileWriter writer = new FileWriter(filename)) {
            writer.write(json);
            System.out.println("โœ… ์ €์žฅ ์™„๋ฃŒ: " + filename);
        } catch (IOException e) {
            System.out.println("โŒ ์ €์žฅ ์‹คํŒจ: " + e.getMessage());
        }
    }
}

์ด๋ ‡๊ฒŒ ์ƒˆ๋กœ์šด ์ž๋ฐ” ํŒŒ์ผ์„ ๋งŒ๋“ค๊ณ 
๋ฉ”์ธ ํŒŒ์ผ์— ์•„๋ž˜ ์ฝ”๋“œ ์ถ”๊ฐ€

case 5:
    TodoManager.saveTodosToFile(todos,"todos.json");
    System.out.println("์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค.");
    return;

์ข…๋ฃŒํ•˜๋ฉด todos.json์— ์ €์žฅํ•˜๋Š” ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋จ

์ €์žฅ๋œ JSON ์˜ˆ์‹œ

json

[{"task":"์ €๋…์‹์‚ฌ","isDone":false},{"task":"์ผ๋ณธ์–ด๊ณต๋ถ€","isDone":false},{"task":"์œก์•„","isDone":false},{"task":"๊ฒŒ์ž„","isDone":false},{"task":"๋…์„œ","isDone":false}]

์ด์ œ ์ € JSON์„ ๋‹ค์‹œ ์ฝ๋Š” ์ฝ”๋“œ๋งŒ ์ถ”๊ฐ€ํ•˜๋ฉด ๋œ๋‹ค

โœ… JSON โ†’ ๊ฐ์ฒด ๋ณต์›

gson.fromJson(reader, type);
  
์ฒซ ๋ฒˆ์งธ ์ธ์ž: reader (ํŒŒ์ผ์—์„œ ์ฝ์€ JSON ๋ฌธ์ž์—ด)

๋‘ ๋ฒˆ์งธ ์ธ์ž: ์–ด๋–ค ํƒ€์ž…์œผ๋กœ ๋ณต์›ํ• ์ง€ (ArrayList<Todo>)

์˜ˆ์™ธ ์ฒ˜๋ฆฌ

catch (Exception e) {
    System.out.println(e.getMessage());
}

์—†๋Š” ํŒŒ์ผ์ด๋ฉด โ†’ No such file or directory

ํ”„๋กœ๊ทธ๋žจ์ด ์ฃฝ์ง€ ์•Š๊ณ  ๋นˆ ๋ฆฌ์ŠคํŠธ ๋ฐ˜ํ™˜ํ•˜๊ฒŒ ์ฒ˜๋ฆฌ

public static ArrayList<Todo> loadTodosFromFile(String filename) {
    Gson gson = new Gson();
    try (FileReader reader = new FileReader(filename)) {
        Type type = new TypeToken<ArrayList<Todo>>() {}.getType();
        ArrayList<Todo> todos = gson.fromJson(reader, type);
        System.out.println("โœ… ๋ถˆ๋Ÿฌ์˜ค๊ธฐ ์™„๋ฃŒ");
        return todos;
    } catch (IOException e) {
        System.out.println("โŒ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ ์‹คํŒจ: " + e.getMessage());
        return new ArrayList<>(); // ์‹คํŒจ ์‹œ ๋นˆ ๋ฆฌ์ŠคํŠธ ๋ฐ˜ํ™˜
    }
}

๊ทธ๋ฆฌ๊ณ  ๋ฉ”์ธ ํŒŒ์ผ์—

ArrayList<Todo> todos = TodoManager.loadTodosFromFile("todos.json");

๊ฒฐ๊ณผ๋Š”?

โœ… ๋ถˆ๋Ÿฌ์˜ค๊ธฐ ์™„๋ฃŒ

๋ฉ”๋‰ด๋ฅผ ์„ ํƒํ•ด ์ฃผ์„ธ์š”
1. ํ•  ์ผ ์ถ”๊ฐ€
2. ํ˜„์žฌ ํ•  ์ผ ํ™•์ธ
3. ํ•  ์ผ ์™„๋ฃŒ ์ฒ˜๋ฆฌ
4. ํ•  ์ผ ์‚ญ์ œ
5. ์ข…๋ฃŒ
๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•ด ์ฃผ์„ธ์š”: 2
์˜ค๋Š˜ ํ• ์ผ ๋ชฉ๋ก์ž…๋‹ˆ๋‹ค.
1. ์ €๋…์‹์‚ฌ[]
2. ์ผ๋ณธ์–ด๊ณต๋ถ€[]
3. ์œก์•„[]
4. ๊ฒŒ์ž„[]
5. ๋…์„œ[]
์ด๋ ‡๊ฒŒ ๋œฌ๋‹ค!!!! ๋Œ€ ์„ฑ๊ณต ~!!! ๐ŸŽ‰

์˜ค๋Š˜ ์˜ค์ „ ๊ณต๋ถ€๊ฐ€ ๋„ˆ๋ฌด ๋นจ๋ฆฌ ๋๋‚˜์„œ
์˜ค๋Š˜ ๊ฐ€๋ณ๊ฒŒ ์‹ค์Šตํ•ด๋ณธ๊ฑธ ์ข€ ๋” ๋ฐœ์ „? ๊ฐœ๋ฐœ ์‹œ์ผœ๋ดค๋Š”๋ฐ
ํด๋ž˜์Šค๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด์„œ ์ƒ์†, ์˜ค๋ฒ„๋ผ์ด๋“œ
Json, Gson, ArrayList, ์ œ๋„ค๋ฆญ ๋“ฑ ์ •๋ง ๋งŽ์€ ๊ฒƒ๋“ค์„ ํ•œ ๋ฒˆ์”ฉ ํ›‘์–ด๋ณธ ๊ฑฐ ๊ฐ™๋‹ค

์˜ค๋Š˜์€ ์ฒ˜์Œ์ด๋ผ ์ž˜ ๋ชจ๋ฅด๊ณ  ์™œ ์“ฐ๋Š”์ง€๋งŒ ์•Œ๊ฒŒ ๋˜๋Š” ๋‚ ์ด์—ˆ์ง€๋งŒ
๋‹ค์Œ์—” โ€œ์•„ ์ด๊ฑฐ ํ•„์š”ํ•œ๋ฐโ€๋ผ๋“ ์ง€ ์ ํ˜€ ์žˆ์œผ๋ฉด ๊ทธ ์˜๋„๋„ ์•Œ ์ˆ˜ ์žˆ๊ฒ ์ง€?

๋ง‰์ƒ ํ•˜๋‹ค ๋ณด๋‹ˆ๊นŒ ์–‘๋„ ๋ฐฉ๋Œ€ํ•ด์ง€๊ณ 
๊ทธ๋ž˜์„œ ์ด๊ฑฐ GitHub๋กœ ๋‚จ๊ฒจ๋‘˜๊นŒ๋„ ๊ณ ๋ฏผ ์ค‘์ด๋‹ค
์ผ๋‹จ ์˜ค๋Š˜ ๊ณต๋ถ€๋„ ๋! ์ •๋ง ๋ฉ‹์ง„ 3์ผ์ฐจ์˜€๋‹ค โœจ

์•„! ๋ฐฑ์ค€ ๋ฌธ์ œ ํ’€๋Ÿฌ๊ฐ€์•ผ์ง€~!

velog์“ฐ๋Š” # ์ด๊ฑฐ ์™œ ์•ˆ๋˜๋Š”๊ฑฐ์ง€ ? ๊ณต๋ฐฑ์žˆ์œผ๋ฉด ๋œ๋‹ค๋Š”๋ฐ

profile
์ดˆ์‹ฌ์ž

0๊ฐœ์˜ ๋Œ“๊ธ€