[1์ฃผ์ฐจ ์Šคํ„ฐ๋”” ํ›„๊ธฐ/15๊ธฐ] ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์„ ์œ„ํ•œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ (feat. VanillaJS)

2022. 5. 20. 19:14ใ†๊ฐœ๋ฐœ/๊ฐ•์˜ํ›„๊ธฐ

https://programmers.co.kr/learn/courses/13885

 

[์Šคํ„ฐ๋””/15๊ธฐ] ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์„ ์œ„ํ•œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ (feat. VanillaJS)

๐Ÿš€ ์•„์‰ฝ์ง€๋งŒ 15๊ธฐ๋Š” ๋งˆ๊ฐ๋˜์—ˆ์–ด์š”. 16๊ธฐ ์˜คํ”ˆ ์•Œ๋ฆผ ์‹ ์ฒญํ•˜๊ณ , ์ตœ์ €๊ฐ€์— ์ˆ˜๊ฐ•ํ•˜์„ธ์š”! ์˜คํ”ˆ ์•Œ๋ฆผ ์‹ ์ฒญ ๐Ÿšจ ์Šคํ„ฐ๋”” ์ฐธ์—ฌ ๋น„์šฉ ์ „์•ก ์ง€์› ๋ฐ›์ž! ์ž„ํŒฉํŠธ์บ ํผ์Šค ์ง€์› ์กฐ๊ฑด(๋ฏธ์ทจ์—… ๊ธฐ๊ฐ„, ์†Œ๋“ ๊ธฐ์ค€ ๋“ฑ)์—

programmers.co.kr


ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์—์„œ ์ง„ํ–‰ํ•˜๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์Šคํ„ฐ๋””์— ์ฐธ์—ฌํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.
ํ•ด๋‹น ์Šคํ„ฐ๋””๋Š” ๋ฆฌ๋”๋ถ„๋“ค์ด ๊ณผ์ œ๋ฅผ ๋‚ด์ฃผ์‹œ๋ฉด 1์ฃผ์ผ ๋™์•ˆ ๊ทธ ๊ณผ์ œ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด์„œ ๊ฐ์ž ์ž์œ ๋กญ๊ฒŒ ์ฝ”๋“œ ๋ฆฌ๋ทฐ๋ฅผ ํ•˜๋ฉด์„œ ํ•จ๊ป˜ ์„ฑ์žฅํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ง„ํ–‰๋œ๋‹ค.

๋จผ์ € ์ฒซ ์„ธ์…˜์„ ํ•˜๊ธฐ ์ „์— ์‚ฌ์ „๊ณผ์ œ๋ฅผ ํ’€์—ˆ๋Š”๋ฐ, ํด๋กœ์ €, ํ˜ธ์ด์ŠคํŒ…, this๋ฐ”์ธ๋”ฉ ๋“ฑ ์ค‘์š”ํ•œ ๊ฐœ๋…๋“ค ์œ„์ฃผ๋กœ ๋ฌธ์ œ๊ฐ€ ๋‚˜์™”๊ณ  ์†”์งํžˆ ๋‚˜ํ•œํ…Œ๋Š” ์กฐ๊ธˆ ๋‚œ์ด๋„๊ฐ€ ์žˆ์—ˆ๋‹ค. ๊ทธ๋ƒฅ ํ’€์—ˆ์œผ๋ฉด ๋ฐ˜ํƒ€์ž‘ ์ •๋„ ํ–ˆ์„ ๊ฒƒ ๊ฐ™์€๋ฐ vscode ์ผœ๋†“๊ณ  ์ฝ”๋“œ๋ฅผ ์ง์ ‘ ๋Œ๋ ค๋ณด๋ฉด์„œ ์™œ ์ด๋ ‡๊ฒŒ ๋‚˜์˜ฌ๊นŒ ๊ณ ๋ฏผํ•ด๊ฐ€๋ฉด์„œ ๋‹ต๋ณ€์„ ์ ์œผ๋‹ˆ ๊ทธ๋ž˜๋„ ๋ชจ๋“  ๋ฌธ์ œ์— ๋‹ต๋ณ€์€ ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

๊ทธ๋ ‡๊ฒŒ OT ํ˜•์‹์˜ 1์ฃผ์ฐจ ์„ธ์…˜์ด ๋๋‚˜๊ณ  ๋“œ๋””์–ด ๊ณผ์ œ๋ฅผ ๋ฐ›์•˜๋‹ค! ๐Ÿ“–

[1์ฃผ ์ฐจ ๊ณผ์ œ]
- TodoList๋ผ๋Š” ์ด๋ฆ„์˜ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.
- function style์˜ ๋ฌธ๋ฒ•, class style์˜ ๋ฌธ๋ฒ• ์–ด๋А ๊ฒƒ์„ ์‚ฌ์šฉํ•ด๋„ ์ข‹์Šต๋‹ˆ๋‹ค. ... ํ›„๋žต ...


๋‚˜๋Š” ์™ ์ง€ ํ•จ์ˆ˜๋กœ ํด๋ž˜์Šค์˜ ์—ญํ• ์„ ํ•˜๋„๋ก ํ•˜๋Š”๊ฒŒ ์•„์ง์€ ์กฐ๊ธˆ ์–ด์ƒ‰ํ•œ ๋А๋‚Œ์ด ๋“ค์–ด์„œ class style์˜ ๋ฌธ๋ฒ•์„ ์„ ํƒํ–ˆ๋‹คโœจ 

 

๊ทธ๋ ‡๊ฒŒ ํด๋ž˜์Šคํ˜•์œผ๋กœ TodoList ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŒ๋“œ๋Š”๋ฐ

class TodoList {
    constructor(data) {
      validateData(data); // => ํ• ๋‹นํ• ๋•Œ๋งˆ๋‹ค ๋งค๋ฒˆ ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•ด์ค˜์•ผ ํ•œ๋‹ค ๐Ÿ˜ฅ
      this.data = data;
    }
        // ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„ ๐Ÿ’ป
}

const validateData = (data) => {
    // ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ โœ…
};


์ด๋ ‡๊ฒŒ PR ์˜ฌ๋ฆฌ๊ณ  ๋‚˜์„œ ์•„๋ฌด๋ฆฌ ์ƒ๊ฐํ•ด๋„ constructor์—์„œ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌํ•  ๋•Œ ์™ธ๋ถ€ ํ•จ์ˆ˜๋ฅผ ์“ฐ๋Š” ๊ฒŒ ๋„ˆ๋ฌด ๋งˆ์Œ์— ๋“ค์ง€ ์•Š์•˜๋‹ค.  ๊ทธ๋ž˜์„œ ๊ดœ์Šค๋ ˆ ๊ตฌ๊ธ€๋งํ•˜๋‹ค๊ฐ€ ๋’ค๋Šฆ๊ฒŒ ์ƒ๊ฐ์ด ๋‚˜์„œ getter, setter๋ฅผ ๋”ฑ ์“ฐ๋Š”๋ฐ..

class TodoList {
    constructor(data) {
      this.data = data; // => ๊ทธ๋ƒฅ ์•Œ์•„์„œ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๊ฐ€ ๋œ๋‹ค โœจ like a ๋งค์ง
    }
    
    set data(data) {
      // ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ โœ…
      this._data = data;
    }
    // ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„ ๐Ÿ’ป
}

์ฝ”๋“œ๊ฐ€ ๊ฑฐ์ง“๋ง๊ฐ™์ด ๊น”๋”ํ•ด์ง€๋Š” ๋งˆ๋ฒ• ๐Ÿง™‍โ™€๏ธ  getter, setter์˜ ์กด์žฌ๋ฅผ ๋ชฐ๋ž๋˜ ๊ฒƒ๋„ ์•„๋‹ˆ๊ณ  ์‹ฌ์ง€์–ด Java ํŒ€ํ”Œ ํ•˜๋ฉด์„œ ์ฃผ๊ตฌ์žฅ์ฐฝ ์ผ๋˜ ๊ฑด๋ฐ, JS์—์„œ๋Š” ์ด๋ ‡๊ฒŒ๊นŒ์ง€ ์ฒ ์ €ํ•˜๊ฒŒ ์™ธ๋ฉดํ•  ์ˆ˜ ์žˆ์—ˆ๋‚˜ ์‹ถ๋‹ค. ๋ง‰์ƒ ์ด๋ฒˆ์— ์ ์šฉ์‹œ์ผœ๋ณด๋‹ˆ๊นŒ "์•„ ๋งž๋‹ค, ์ด๋ ‡๊ฒŒ ์“ฐ๋Š” ๊ฑฐ์˜€์ง€! "ํ•˜๋Š” ๋งˆ์Œ๊ณผ ๋™์‹œ์—, ์ƒˆ์‚ผ์Šค๋Ÿฝ๊ฒŒ setter, getter๊ฐ€ ๋™์ž‘ํ•˜๋Š” ๊ฑฐ ์ž์ฒด๊ฐ€ ์žฌ๋ฐŒ๊ณ  ์‹ ๊ธฐํ–ˆ๋‹ค.

ํ™•์‹คํžˆ ์ฑ…์œผ๋กœ ๊ณต๋ถ€ํ•  ๋•Œ์™€๋Š” ๋А๋‚Œ์ด ๋‹ค๋ฅธ ๊ฒŒ, ์ด๋Ÿฐ ์‹์œผ๋กœ ๋ฏธ์…˜์ด๋‚˜ ํ”„๋กœ์ ํŠธ๋ฅผ ํ•˜๋ฉด ๋จธ๋ฆฟ์†์— ์ง€์‹์œผ๋กœ๋งŒ ์žˆ์—ˆ๋˜ ๊ฐœ๋…๋“ค์„ ์ด๋ฆฌ์ €๋ฆฌ ์กฐ๋ฆฝํ•ด๋ณด๋ฉด์„œ ์ง„์ •์œผ๋กœ ์ฒดํ™”๋˜๋Š” ๋А๋‚Œ์„ ๋ฐ›๋Š” ๊ฒƒ ๊ฐ™๋‹ค. ๊ทธ๋ž˜์„œ ํ”Œ์ ํ•˜๋Š”๊ฒŒ ์ค‘์š”ํ•˜๋‹จ ๊ฒƒ์„ ์•Œ๊ณ ๋Š” ์žˆ์ง€๋งŒ, ์™ ์ง€ ํ˜ผ์ž ํ•˜๋Š” ํ”„๋กœ์ ํŠธ๋Š” ์ต์ˆ™ํ•œ ๊ฒƒ๋งŒ ๊ณ„์† ์“ฐ๊ฒŒ ๋˜๋Š” ๋А๋‚Œ์ด ๋“ค์–ด์„œ ์ฑ…์ด๋‚˜ ์ธ๊ฐ•์— ๋” ์‹œ๊ฐ„์„ ํ• ์• ํ•˜๊ฒŒ ๋œ๋‹ค.

 

 


์•„์ง ์•Œ๊ณ  ์žˆ๋Š” ๊ฑด ๋„ˆ๋ฌด ์ ๊ณ , ์•ž์œผ๋กœ ๋ฐฐ์›Œ์•ผ ํ•  ๊ฑด ๋„ˆ๋ฌด ๋งŽ๋‹ค๋Š” ์ƒ๊ฐ์— ์กฐ๊ธˆ์€ ์กฐ๊ธ‰ํ•œ ๋งˆ์Œ์ด ๋“ค์–ด์„œ ๊ณ„์† ๊ณต๋ถ€๋ฅผ ํ•ด์„œ ๋จธ๋ฆฟ์†์„ ์ฑ„์›Œ ๋„ฃ๊ณ  ์‹ถ์€ ๋งˆ์Œ์ด ๋” ์•ž์„œ๊ฒŒ ๋˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค. ์ด๋Ÿด ๋•Œ ์ด๋ ‡๊ฒŒ ๋งค์ฃผ ๋ฏธ์…˜์„ ํ•˜๊ณ  ์ฝ”๋“œ ๋ฆฌ๋ทฐ๋ฅผ ๋ฐ›๋Š” ํ˜•ํƒœ์˜ ์Šคํ„ฐ๋””๋ฅผ ํ•˜๋Š” ๊ฒŒ ์ •๋ง ๋งŽ์€ ๋„์›€์ด ๋  ๊ฒƒ ๊ฐ™๊ณ  ์•ž์œผ๋กœ ์žˆ์„ ๋ฏธ์…˜๋“ค์ด ๊ธฐ๋Œ€๋๋‹ค. ํšŒ์‚ฌ์—์„œ๋Š” ๊ฑฐ์˜ ํผ๋ธ”๋ฆฌ์‹ฑ ์œ„์ฃผ๋กœ ์ผ์„ ํ•˜๋‹ค ๋ณด๋‹ˆ๊นŒ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์— ์ง‘์ค‘ํ•  ์ผ์ด ๋ณ„๋กœ ์—†์—ˆ๋Š”๋ฐ ์ด๋ ‡๊ฒŒ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ๋ฏธ์…˜์„ ํ•˜๋ฉด์„œ ํ•˜๋ฃจ ์ข…์ผ ์–ด๋–ป๊ฒŒ ํ•˜๋ฉด ๋” ์ข‹์€ ์ฝ”๋“œ๊ฐ€ ๋ ์ง€ ๊ณ ๋ฏผํ•˜๋Š” ๊ณผ์ •์ด ์ง„์งœ ๋„ˆ๋ฌด ์žฌ๋ฐŒ๊ณ  ์‹ ๋‚ฌ๋‹ค.

๊ณ„์† ์šฐ๋‹นํƒ•ํƒ•๊ฑฐ๋ฆฌ๊ธด ํ–ˆ์ง€๋งŒ ๊ทธ๋ž˜๋„ ์ด๊ฒƒ์ €๊ฒƒ ๊ณ ๋ฏผํ•ด๊ฐ€๋ฉด์„œ ์ตœ๋Œ€ํ•œ ๊น”๋”ํ•˜๊ฒŒ ์งœ๋ ค๊ณ  ๋‚˜๋ฆ„๋Œ€๋กœ ์—ด์‹ฌํžˆ ํ–ˆ๋Š”๋ฐ, ๋‹ค๋ฅธ ๋ถ„๋“ค์€ ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„์„ ํ•˜์…จ์„์ง€, ๋ฆฌ๋”๋ถ„๋“ค๊ณผ ์Šคํ„ฐ๋””์›๋ถ„๋“ค์ด ์–ด๋–ป๊ฒŒ ์ฝ”๋“œ๋ฆฌ๋ทฐ๋ฅผ ํ•ด์ฃผ์‹ค์ง€ ๊ธฐ๋Œ€๋œ๋‹ค.

 

 


 

๋‚ด๊ฐ€ ์ง  ์ฝ”๋“œ์— ๋Œ€ํ•ด ๋ฆฌ๋ทฐ๋ฅผ ๋ฐ›์•˜๋‹ค!

 

์ฝ”๋“œ๋ฆฌ๋ทฐ๋ฅผ ์ง„ํ–‰ํ–ˆ๋Š”๋ฐ ์ƒ๊ฐํ–ˆ๋˜ ๊ฒƒ๋ณด๋‹ค ๋” ์žฌ๋ฏธ์žˆ์—ˆ๋‹ค!

์œ„ ์‚ฌ์ง„์ฒ˜๋Ÿผ ๋ฆฌ๋”๋‹˜๋“ค๊ป˜์„œ ๋‚ด ์ฝ”๋“œ๋ฅผ ๋ฆฌ๋ทฐํ•ด์ฃผ์‹œ๋Š” ๊ฒƒ๋„ ๋„์›€์ด ๋งŽ์ด ๋๊ณ , ๋‹ค๋ฅธ ๋ถ„๋“ค์˜ ์ฝ”๋“œ๋ฆฌ๋ทฐ๋ฅผ ํ•ด์ฃผ์‹œ๋Š”๊ฑธ ๋ณด๋ฉด์„œ ๋‚ด ์ฝ”๋“œ์—๋„ ์ ์šฉ์‹œ์ผœ๋ณด๋ฉด์„œ ์ƒˆ๋กœ์šด ๋‚ด์šฉ์„ ์•Œ๊ฒŒ ๋˜๊ธฐ๋„ ํ–ˆ๋‹ค.

 

์ˆ˜๋™์ ์œผ๋กœ ์ฝ”๋“œ๋ฆฌ๋ทฐ๋ฅผ ๋ฐ›๊ธฐ๋งŒ ํ•˜๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ ๋‚˜๋„ ๋‹ค๋ฅธ ์ˆ˜๊ฐ•์ƒ๋ถ„๋“ค๊ป˜ ์ฝ”๋“œ๋ฆฌ๋ทฐ๋ฅผ ํ•ด๋“œ๋ฆฌ๋ฉด์„œ "์ด ์ฝ”๋“œ์—์„œ ์–ด๋–ป๊ฒŒ ํ•˜๋ฉด ๊ฐ€๋…์„ฑ๊ณผ ์„ฑ๋Šฅ์ด ๋” ํ–ฅ์ƒ๋ ๊นŒ?" ๊ณ ๋ฏผํ•˜๋Š” ์‹œ๊ฐ„์„ ๊ฐ–๊ธฐ๋„ ํ•˜๊ณ , ์งˆ๋ฌธ์— ๋‹ต๋ณ€์„ ํ•ด๋“œ๋ฆฌ๊ธฐ ์œ„ํ•ด์„œ ๊ณ ๋ฏผํ•˜๊ณ  ์ฐพ์•„๋ณด๋ฉด์„œ ๋‚ด๊ฐ€ ์• ๋งคํ•˜๊ฒŒ ์•Œ์•˜๋˜ ๊ฐœ๋…๋“ค๋„ ํ™•์‹คํ•˜๊ฒŒ ์ •๋ฆฝ๋˜๋Š” ์‹œ๊ฐ„์„ ๊ฐ€์กŒ๋‹ค.

 

๋‹ค๋ฅธ ์ˆ˜๊ฐ•์ƒ๋ถ„ ์งˆ๋ฌธ์— ๋‹ต๋ณ€์„ ๋‹ฌ๊ธฐ๋„ ํ–ˆ๋‹ค.

 

์ „์ฒด์ ์œผ๋กœ ๋‚ด ์ฝ”๋“œ์— ๋Œ€ํ•ด ์ข‹์€ ๋ง์„ ๋งŽ์ด ๋“ค์–ด์„œ ๊ธฐ๋ถ„์ด ์ข‹์•˜๋‹ค ๐Ÿฅฐ