๐Ÿ“š TIL 15์ผ์ฐจ

temprmnยท2023๋…„ 6์›” 5์ผ
0
post-thumbnail

์˜ค๋Š˜์˜ ์ฃผ์š”์‚ฌํ•ญ (6/5, ์›”์š”์ผ)

  1. (์›Œ๋ฐ์—…) ๋ฉ”๋ชจ์žฅ ํ”„๋กœ์ ํŠธ

์ž ์„ ๋ชป์ž์„œ ์ปจ๋””์…˜์ด ์‹ฌ๊ฐํ•˜๋‹ค... ๊ฑด๊ฐ•๊ด€๋ฆฌ ์ž˜ํ•˜๊ธฐ.

์™„๋ฃŒํ•œ ํ”„๋กœ์ ํŠธ๋Š” ์—ฌ๊ธฐ

๐Ÿ˜บ Notepad

๊ตฌ์กฐ ์„ค๊ณ„

์—‰์„ฑํ–ˆ๋˜ ์ง€๋‚œ ํ”„๋กœ์ ํŠธ๋ฅผ ๋’ค๋กœํ•˜๊ณ  ์ด๋ฒˆ์—” ์ œ๋Œ€๋กœ ํ•ด๋ณด๊ณ  ์‹ถ์€ ๋งˆ์Œ์— ์ปจํŠธ๋กค๋Ÿฌ ๋ถ€๋ถ„์„ ๋งก์•˜๋Š”๋ฐ... ์ด๋ฅผ ์œ„ํ•œ ํฐ ๊ทธ๋ฆผ(?)์„ ๊ทธ๋ ค๋ณด์•˜๋‹ค. ๋Œ€์ถฉ ์ด๋ ‡๊ฒŒ ํ˜๋Ÿฌ๊ฐ€๊ฒ ์ง€? ํ•˜๋Š” ์ƒ์ƒ๋„ ๊ฐ™์€ ๋Š๋‚Œ์œผ๋กœ. ๊ธฐ๋Šฅ์€ ํด๋ž˜์Šค ๋‹จ์œ„๋กœ ๋ถ„๋ฆฌํ•˜๊ธฐ๋กœ ํ•ด์„œ, ๊ฐ์ž ๊ตฌํ˜„๋œ ๊ธฐ๋Šฅ๋“ค์„ ์ปจํŠธ๋กค๋Ÿฌ์—์„œ ํ˜ธ์ถœํ•˜๋ ค๊ณ  ํ•œ๋‹ค.

์ž‘์„ฑํ•œ ๊ตฌ์กฐ๋„๋ฅผ ํ† ๋Œ€๋กœ ํ•„์š”ํ•œ ํ•„๋“œ์™€ ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌ์ƒํ–ˆ๋‹ค.

NotepadApp.java
/* ํ•„๋“œ */
- Scanner
- MemoVO
- ๋ฉ”๋ชจ๋ฆฌ์ŠคํŠธ (MemoList)
- ํ™”๋ฉด (ScreenPrint)
/* ๋ฉ”์„œ๋“œ */

// 0. ์ตœ์ดˆ ์ง„์ž…์ 
- startNotepadApp()
// ์ตœ์ดˆ ์ง„์ž…ํ™”๋ฉด์€ '๋ฉ”๋‰ด(=๊ธฐ๋Šฅ ์„ ํƒ ํ™”๋ฉด)'
// 1. ์ž…๋ ฅ (Input)
- ๋ฉ”๋‰ด ์„ ํƒ/์ž…๋ ฅ (menuInput())

// (1) ์ž…๋ ฅ(์ƒ์„ฑ)์—์„œ...
- ์ด๋ฆ„ ์ž…๋ ฅ
- ๋น„๋ฐ€๋ฒˆํ˜ธ ์ž…๋ ฅ
- ๋ฉ”๋ชจ ์ž…๋ ฅ (StringBuilder -> String ๋ณ€ํ™˜)

- ๋ฉ”๋ชจ ์ €์žฅ ์—ฌ๋ถ€ ์„ ํƒ/์ž…๋ ฅ

// (2) ๋ชฉ๋ก๋ณด๊ธฐ์—์„œ...
- ๋˜๋Œ์•„๊ฐ€๊ธฐ ์ž…๋ ฅ

// (3, 4) ์ˆ˜์ • ๋ฐ ์‚ญ์ œ์—์„œ...
- ์ˆ˜์ • ๋ฐ ์‚ญ์ œํ•  ๊ธ€ ์„ ํƒ/์ž…๋ ฅ
- ๋น„๋ฐ€๋ฒˆํ˜ธ ์ž…๋ ฅ -> ์ผ์น˜ ์—ฌ๋ถ€ ํŒ๋ณ„
- ์ˆ˜์ •ํ•  ๋‚ด์šฉ ์ž…๋ ฅ
- ์‚ญ์ œ ์—ฌ๋ถ€ ์„ ํƒ/์ž…๋ ฅ
// 2. ์‹คํ–‰ (Process)

- ์ž…๋ ฅ(์ƒ์„ฑ) ์‹คํ–‰ ๋ฉ”์„œ๋“œ()
- ๋ชฉ๋ก๋ณด๊ธฐ ์‹คํ–‰ ๋ฉ”์„œ๋“œ()
- ์ˆ˜์ • ์‹คํ–‰ ๋ฉ”์„œ๋“œ()
- ์‚ญ์ œ ์‹คํ–‰ ๋ฉ”์„œ๋“œ()
- ์ข…๋ฃŒ ์‹คํ–‰ ๋ฉ”์„œ๋“œ()

์ง€๋‚œ ์ฃผ์— ํŠœํ„ฐ๋‹˜๊ป˜ MVC์— ๋Œ€ํ•ด ์—ฌ์ญค๋ณด๋Ÿฌ๊ฐ”์—ˆ๋‹ค๊ฐ€, '์‹ค์ œ๋กœ๋Š” ์ปจํŠธ๋กค๋Ÿฌ ๋ฐ‘์—(?) sevice ๋ ˆ์ด์–ด๋ฅผ ํ•˜๋‚˜ ๋” ์ถ”๊ฐ€ํ•˜๊ธด ํ•˜๋Š”๋ฐ~' ๋ผ๋Š” ๋ง์„ ๋“ค์—ˆ์„ ๋• ๋ฌด์Šจ ๋ง์ธ๊ฐ€ ์‹ถ์—ˆ๋Š”๋ฐ, ์ปจํŠธ๋กค๋Ÿฌ ๋‚ด์—์„œ Process ๋ฉ”์„œ๋“œ๋ฅผ ๋”ฐ๋กœ ๋ถ„๋ฆฌํ•˜๊ณ  ๋‚˜๋‹ˆ ์–ด๋–ค ๋ง์ธ์ง€ ๋Œ€์ถฉ ์ง์ž‘์ด ๊ฐ€๋Š” ๊ฒƒ ๊ฐ™๊ธฐ๋„ ํ•˜๋‹ค. (๋‚ด๊ฐ€ ์ƒ๊ฐํ•œ๊ฒŒ ํ‹€๋ฆฐ ๊ฑธ์ˆ˜๋„ ์žˆ์ง€๋งŒ.)

๋‚˜๋ฆ„๋Œ€๋กœ์˜ ์ž‘์„ฑ ๊ทœ์น™

์–ด๋–ค ๊ตฌ์กฐ๋กœ ์ž‘์„ฑํ• ์ง€ ๊ตฌ์ƒํ•ด๋‘๋ฉด ์ž‘์„ฑํ•˜๊ธฐ๊ฐ€ ๋” ์‰ฌ์›Œ์ง„๋‹ค. ๊ทธ๋ž˜์„œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ ์‰ฝ๋„๋ก ๋‚˜๋ฆ„๋Œ€๋กœ ๊ทœ์น™์„ ์„ธ์›Œ๋ดค๋‹ค.

  1. ๋ชจ๋“  ์ถœ๋ ฅ์€ ScreenPrint ๊ฐ์ฒด๊ฐ€ ๋‹ด๋‹นํ•œ๋‹ค. ์ถœ๋ ฅ'๋งŒ' ๋‹ด๋‹นํ•ด์•ผํ•œ๋‹ค.
  2. ํ•˜์ง€๋งŒ Input(์ž…๋ ฅ)์€ NotepadApp์ด ๋‹ด๋‹นํ•œ๋‹ค.
  3. ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์ž‘์—…์€ NotepadApp๊ณผ ScreenPrint๋ฅผ ์ œ์™ธํ•œ ๊ฐ์ฒด๋“ค์ด ๋‹ด๋‹นํ•œ๋‹ค.
  4. main()์—์„œ๋Š” NotepadApp์œผ๋กœ ์ง„์ž…๋งŒ ํ•œ๋‹ค.

Input ๋ฉ”์„œ๋“œ

์ž…๋ ฅ์„ ๋ฐ›๋Š” ๋ฉ”์„œ๋“œ์˜ ์ข…๋ฅ˜๋Š” ๋‹ค์–‘ํ•˜๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด ๋ฉ”๋‰ด๋ฅผ ์„ ํƒํ•˜๋Š” ๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅ ๋ฐ›๊ฑฐ๋‚˜, ์ด๋ฆ„/๋น„๋ฐ€๋ฒˆํ˜ธ/๋ฉ”๋ชจ ๊ฐ™์€ ๋ฌธ์ž์—ด์„ ์ž…๋ ฅ ๋ฐ›๋Š” ๊ฒฝ์šฐ๋„ ์žˆ์—ˆ๋‹ค.

// 1-1. ๋ฉ”๋‰ด ์„ ํƒ ์ž…๋ ฅ
private void selectMenuInput() {

    int menuSelect = sc.nextInt();
    
    switch (menuSelect) {
        case 1: // ์ž…๋ ฅ(์ƒ์„ฑ)
            processCreateMemo();
            break;
        case 2: // ๋ชฉ๋ก์กฐํšŒ
            processViewMemoList();
            break;
        case 3: // ์ˆ˜์ •
            processReviseMemo();
            break;
        case 4: // ์‚ญ์ œ
            processDeleteMemo();
            break;
        case 5: // ์ข…๋ฃŒ
            processQuit();
            break;
    }
}
// 1-2-1. ์ด๋ฆ„+๋น„๋ฐ€๋ฒˆํ˜ธ+๋ฉ”๋ชจ ์ž…๋ ฅ
// ์ด๋ฆ„ ์ž…๋ ฅ
private String enterNameInput() {
    return sc.nextLine();
}
// ๋น„๋ฐ€๋ฒˆํ˜ธ ์ž…๋ ฅ
private String enterPasswordInput() {
    return sc.nextLine();
}

Process ๋ฉ”์„œ๋“œ

๋Œ€์ฒด๋กœ ScreenPrint(์ถœ๋ ฅ ๊ฐ์ฒด)์™€ Input() ๋ฉ”์„œ๋“œ๋ฅผ ๊ฒฐํ•ฉํ•œ ๊ตฌ์กฐ์ด๋‹ค. Input์„ ํ†ตํ•ด ๋ฐ›์€ ๊ฐ’์„ ์‚ฌ์šฉํ•ด์„œ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์‹คํ–‰ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ์ผ์„ ํ•œ๋‹ค.

// 2-1. ์ž…๋ ฅ(์ƒ์„ฑ) ์‹คํ–‰
private void processCreateMemo() {
    String name, password, memo;
    
    sc.nextLine(); // ์˜ค์ž…๋ ฅ๋ฐฉ์ง€๋ฒ„ํผ
    
    // ์ด๋ฆ„ ์ž…๋ ฅ
    screenPrint.pInputName();
    name = enterNameInput();
    
    // ๋น„๋ฐ€๋ฒˆํ˜ธ ์ž…๋ ฅ
    screenPrint.pInputPassword();
    password = enterPasswordInput();
    
    // ๋ฉ”๋ชจ ์ž…๋ ฅ
    screenPrint.pInputMemo();
    memo = enterMemoInput();
    
    // Q. "์ €์žฅํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?"
    screenPrint.pSaveYnMsg();
    int save = yesOrNoInput();
    
    switch (save) {
        case 1: // 1. ์ €์žฅํ•จ
            {
                // ์ €์žฅ
                memoList.Insert(name,password, memo);
                screenPrint.pSavedMsg();
                // ๋ฉ”๋‰ด๋กœ ๋Œ์•„๊ฐ„๋‹ค
                startNotepadApp();
            }
            break;
        case 2: // 2. ์ €์žฅ ์•ˆ ํ•จ
            {
                // ์ตœ์ดˆ ๋ฉ”๋‰ด๋กœ ๋Œ์•„๊ฐ
                startNotepadApp();
            }
            break;
    }
}

StringBuilder๋กœ ๋ฉ”๋ชจ ๋‚ด์šฉ ์ž…๋ ฅ๋ฐ›๊ธฐ

by. ์ž…๋ ฅ(์ƒ์„ฑ) ๋‹ด๋‹น ํŒ€์› ๋ถ„

๋ฉ”๋ชจ์žฅ์ด๋ผ๋Š”๊ฒŒ ํ•œ ์ค„๋งŒ ์ž…๋ ฅ ๋ฐ›๊ณ  ๋๋‚˜๋Š”๊ฒŒ ์•„๋‹ˆ๊ณ , ๋ฌธ๋‹จ ๋„์–ด์“ฐ๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ๋„ ํ•˜๋ฉด์„œ ์—ฌ๋Ÿฌ ์ค„์„ ์ž…๋ ฅ๋ฐ›๋Š”๋ฐ, String ํ˜•์œผ๋กœ ์ž…๋ ฅ ๋ฐ›์œผ๋ฉด ํ•œ ์ค„๋งŒ ์ž…๋ ฅ ๋ฐ›๊ณ  ๋๋‚˜๋Š”๊ฒŒ ์•„์‰ฌ์›Œ์„œ ๊ณ ์•ˆํ•œ ๋ฐฉ๋ฒ•์ด๋ผ๊ณ  ์„ค๋ช…ํ•ด์ฃผ์…จ๋‹ค.

while() ๋ฐ˜๋ณต๋ฌธ์„ ํ†ตํ•ด ๊ณต๋ฐฑ์„ ์ž…๋ ฅํ•  ๋•Œ๊นŒ์ง€ ๊ฐ’์„ ๊ณ„์† ์ž…๋ ฅ ๋ฐ›๊ณ , ์ž…๋ ฅ ๋ฐ›์€ ๊ฐ’์„ StringBuilder.append() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด ์ถ”๊ฐ€ํ•ด์ค€๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ๋ฐ˜ํ™˜ํ•  ๋•Œ String ํ˜•์œผ๋กœ ๋ณ€ํ™˜ํ•ด์ฃผ๋ฉด \n ๋ฌธ์ž๊ฐ€ ํฌํ•จ๋œ ๋ฌธ์ž์—ด์„ ๋ฐ›์€ ๊ฒƒ๊ณผ ๊ฐ™์€ ํšจ๊ณผ๋ฅผ ๋‚ผ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.

// 1-2-1. ์ด๋ฆ„+๋น„๋ฐ€๋ฒˆํ˜ธ+๋ฉ”๋ชจ ์ž…๋ ฅ
// ๋ฉ”๋ชจ ์ž…๋ ฅ
public String enterMemoInput() {

    // ์ž„์‹œ list ์ƒ์„ฑ
    ArrayList<String> textList = new ArrayList<>();
    // ์ž„์‹œ stringBuilder ๊ฐ์ฒด ์ƒ์„ฑ
    StringBuilder text = new StringBuilder();
    
    // ๋ฐ˜๋ณต๋ฌธ์„ ์‚ฌ์šฉํ•ด์„œ ์ž…๋ ฅ์„ ๊ณ„์† ๋ฐ›๋Š”๋‹ค
    while (sc.hasNextLine()) {
        String word = sc.nextLine();
        
        // ์•„๋ฌด๋Ÿฐ ๊ฐ’๋„ ์ž…๋ ฅ๋ฐ›์ง€ ์•Š์•˜์„ ๋•Œ
        if (word.isEmpty()) {
            break; // ๋น ์ ธ๋‚˜๊ฐ„๋‹ค
        }
        // ์ž…๋ ฅ ๋ฐ›์€ ๊ฐ’์€ ์ž„์‹œ list์— ์ €์žฅ
        textList.add(word);
    }
    
    // ์ž„์‹œ list์— ์ €์žฅ๋œ ํ…์ŠคํŠธ๋ฅผ stringbuilder ๊ฐ์ฒด๋กœ ์ถ”๊ฐ€
    for (String item : textList) {
        text.append(item).append("\n");
    }
    
    // StringBuilder -> String ๋ณ€ํ™˜
    return text.toString();
}

์‹คํ–‰ํ™”๋ฉด

์ ˆ์ฐจ์ง€ํ–ฅ์ ์ธ ๊ตฌ์กฐ?

์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์„ค๊ณ„ํ•˜๋ฉด์„œ ์–ด๋–ป๊ฒŒ ๊ผฌ์•„์„œ ์ƒ๊ฐํ•ด๋ณด์•„๋„ ์ ˆ์ฐจ์ง€ํ–ฅ์ ์ธ ๊ตฌ์กฐ๋กœ ์งœ์—ฌ์ง€๋Š”๊ฒŒ ์Šค์Šค๋กœ ๋‹ต๋‹ตํ–ˆ๋‹ค. ๊ทธ๋ž˜์„œ ํŠœํ„ฐ๋‹˜๊ป˜ ์งˆ๋ฌธ์„ ํ•ด๋ณด์•˜๋Š”๋ฐ, ์ปจํŠธ๋กค๋Ÿฌ ๋ถ€๋ถ„์€ ์–ด๋Š์ •๋„ ์ ˆ์ฐจ์ง€ํ–ฅ์ ์ธ ๋‹จ๊ณ„๋กœ ๋Œ์•„๊ฐ€๋Š”๊ฒŒ ๋งž๋‹ค๊ณ  ํ•˜์…”์„œ ์•ˆ์‹ฌํ•˜๊ณ  ์ž‘์—…ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

profile
`ISFJ` T 49% F 51% /

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