๐Ÿšค ์„ฑ์žฅ์ผ์ง€ 6.0

์ฑ… ํ–‰๋ณตํ•œ ์ด๊ธฐ์ฃผ์˜์ž(์›จ์ธ ๋‹ค์ด์–ด)์˜ ๋‚ด์šฉ์— ์ž๊ทน๋ฐ›์•„ ์‹œ์ž‘ํ•˜๋Š” ์†Œ๋ฐ•ํ•œ ์„ฑ์žฅ๊ธฐ๋ก

์‚ด์•„์žˆ๋Š” ๊ฝƒ๊ณผ ์ฃฝ์€ ๊ฝƒ์€ ์–ด๋–ป๊ฒŒ ๊ตฌ๋ณ„ํ•˜๋Š”๊ฐ€?
์„ฑ์žฅํ•˜๊ณ  ์žˆ๋Š” ๊ฒƒ์ด ์‚ด์•„ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.
์ƒ๋ช…์˜ ์œ ์ผํ•œ ์ฆ๊ฑฐ๋Š” ์„ฑ์žฅ์ด๋‹ค!

๐ŸŒพ (4.0)ํ•™์Šต ํ‚ค์›Œ๋“œ์—์„œ ์ตœ๋Œ€ํ•œ ๊ฐ„๋‹จํ•œ ์ •๋ณด ์ œ๊ณต, ๊ณ ๋ฏผ์—์„œ ๋‚ด ๊ฒฝํ—˜์„ ์ž์„ธํžˆ ์ ์ž!
๐ŸฅŠ (5.0)ํ•™์Šต ํ‚ค์›Œ๋“œ๋Š” ํ•œ์ค„์˜ ํ•ต์‹ฌ์œผ๋กœ๋งŒ ์ •๋ฆฌ, ์„ฑ๊ณต/์‹คํŒจ ์ผ์ง€ ์ž‘์„ฑํ•˜๊ธฐ! ์ด ๋•Œ, ์‹คํŒจ์˜ ๊ฒฝํ—˜์€ ์ž์„ธํžˆ ์ ๊ธฐ!
๐Ÿ‰ (6.0)<์™„์ „ ๊ฐœํŽธ!!!> ๋งค์ผ ์Šต๊ด€์ ์œผ๋กœ ํ•ต์‹ฌ๋งŒ ์ ์„ ์ˆ˜ ์žˆ๊ฒŒ ํ”„๋ ˆ์ž„ ๋ณ€๊ฒฝ. ์„ฑ๊ณต๋ณด๋‹จ ์‹คํŒจ์— ์ดˆ์ ์„ ๋งž์ถ”๊ธฐ.

  • ๐Ÿ‰ (6.1)<์ˆ˜์ •> ๋งค๋ฒˆ ์„ฑ๊ณต, ์‹คํŒจ๋ฅผ ๋”ฐ๋กœ ์ ๋Š” ๊ฒƒ๋ณด๋‹จ ๊ฒฝํ—˜์œผ๋กœ ํ‘œํ˜„ํ•˜์ž

๐ŸŒˆ ์˜ค๋Š˜์˜ ๊ฐ์ •

๋ญ”๊ฐ€ ๊ทธ๋ž˜๋„ ๊ณ ๋ฏผ์„ ๋๋‚ด๊ณ  ๋ฐฉํ–ฅ์„ ์ž˜ ์žก์•„์„œ ๊ฐ€๋Š” ๊ฒƒ ๊ฐ™์•„์„œ ๊ธฐ๋ถ„์ด ์ข‹๋‹ค. ์ง€๊ธˆ ์ด ๋ถ„์•ผ๊ฐ€ ๋„ˆ๋ฌด ์ข‹์€ ๋งŒํผ ๋ฐฉํ–ฅ์ด ์กฐ๊ธˆ์€ ์ž˜๋ชป๋˜์–ด๋„ ๊ดœ์ฐฎ์œผ๋‹ˆ(์‚ฌ์‹ค ์˜ณ์€ ๋ฐฉํ–ฅ์ด๋ž€ ๊ฑฐ ์ž์ฒด๊ฐ€ ์—†์œผ๋‹ˆ๊นŒ) ์—ด์‹ฌํžˆ ๊พธ์ค€ํžˆ ์ž˜ ๋‚˜์•„๊ฐ€์ž. ๊ทธ๋ฆฌ๊ณ  ๋‚ด๊ฐ€ ์›ํ•˜๋Š” ์‚ถ์„ ์‚ด๋ฉด ๋œ๋‹ค. ์ด๋ฏธ ์ด ๊ฐœ๋ฐœ ์„ธ์ƒ์„ ์•Œ๊ฒŒ ๋œ ๊ฒƒ๋งŒํ•ด๋„ ๋ฐ˜์€ ์„ฑ๊ณต์ด๋‹ˆ๊นŒ!

๐Ÿซง ์˜ค๋Š˜์˜ ๊ณ ๋ฏผ

A๋ผ๋Š” ํ•จ์ˆ˜์— ๋Œ€ํ•œ test ์ฝ”๋“œ ์ž‘์„ฑ ์‹œ, B๋ผ๋Š” ํ•จ์ˆ˜์— ์˜์กดํ•˜๋Š” ๊ฑด ๊ดœ์ฐฎ์€๊ฐ€?

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

describe("LinkedList์˜ deleteAt์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ํŠน์ • index์—์„œ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ๋‹ค.", () => {
  const list = new LinkedList();
  list.insertLast(0);
  list.insertLast(1);
  list.insertLast(2);
  list.insertLast(3);
  list.insertLast(4);

  test("list์˜ 0๋ฒˆ์งธ ๊ฐ’์„ ์ œ๊ฑฐํ•˜๋ฉด data 0์˜ ๊ฐ’์„ ๊ฐ€์ง„ Node๊ฐ€ ๋ฐ˜ํ™˜๋œ๋‹ค..", () => {
    const deletedValue = list.deleteAt(0)!.data;
    expect(deletedValue).toEqual(0);
  });
  test("list์˜ 2๋ฒˆ์งธ ๊ฐ’์„ ์ œ๊ฑฐํ•˜๋ฉด data 3์˜ ๊ฐ’์„ ๊ฐ€์ง„ Node๊ฐ€ ๋ฐ˜ํ™˜๋œ๋‹ค.", () => {
    const deletedValue = list.deleteAt(2)!.data;
    expect(deletedValue).toEqual(3);
  });
});

์œ„ ์ฝ”๋“œ๋Š” LinkedList์˜ deleteAt ๋ฉ”์„œ๋“œ๋ฅผ ํ…Œ์ŠคํŠธํ•˜๋Š” ์ฝ”๋“œ์ด๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์ด ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋Š” LinkedList์˜ insertLast ๋ฉ”์„œ๋“œ์— ์˜์กดํ•˜๊ณ  ์žˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋งŒ์•ฝ insertLast ๋ฉ”์„œ๋“œ๊ฐ€ ์ž˜๋ชป ๊ตฌํ˜„๋˜์–ด ์žˆ๋‹ค๋ฉด deleteAt ๋ฉ”์„œ๋“œ๋ฅผ ํ…Œ์ŠคํŠธํ•˜๋Š”๋ฐ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์žˆ๋‹ค. ์ด๋Ÿฐ ๊ฒฝ์šฐ์—๋Š” ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ• ์ง€๊ฐ€ ์˜ค๋Š˜ ๊ฐ€์žฅ ํฐ ๊ณ ๋ฏผ์ด์—ˆ๋‹ค. ๊ณ ๋ฏผ์— ๋Œ€ํ•ด ์ฐพ์•„๋ณธ ๊ฒฐ๊ณผ ์•„๋ž˜์™€ ๊ฐ™์€ ๋ฐฉ๋ฒ•๋“ค์ด ์žˆ์—ˆ๋‹ค.

  • ํ…Œ์ŠคํŠธ ๋Œ€์ƒ ํ•จ์ˆ˜๊ฐ€ ์˜์กดํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ํ…Œ์ŠคํŠธํ•˜๋Š” ์ฝ”๋“œ๋Š” ๋ณ„๋„๋กœ ์ž‘์„ฑํ•œ๋‹ค.
  • ํ…Œ์ŠคํŠธ ๋Œ€์ƒ ํ•จ์ˆ˜๊ฐ€ ์˜์กดํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ํ…Œ์ŠคํŠธํ•˜๋Š” ์ฝ”๋“œ๋Š” ํ…Œ์ŠคํŠธ ๋Œ€์ƒ ํ•จ์ˆ˜๋ฅผ ํ…Œ์ŠคํŠธํ•˜๋Š” ์ฝ”๋“œ๋ณด๋‹ค ๋จผ์ € ์ž‘์„ฑํ•˜๊ณ  ์‹คํ–‰ํ•œ๋‹ค.
  • ํ…Œ์ŠคํŠธ ์ฝ”๋“œ์—์„œ๋Š” ํ…Œ์ŠคํŠธ ๋Œ€์ƒ ํ•จ์ˆ˜๋งŒ์„ ํ…Œ์ŠคํŠธํ•˜๊ณ , ํ…Œ์ŠคํŠธ ๋Œ€์ƒ ํ•จ์ˆ˜๊ฐ€ ์˜์กดํ•˜๋Š” ํ•จ์ˆ˜๋Š” mock ํ•จ์ˆ˜๋กœ ๋Œ€์ฒดํ•œ๋‹ค.

1๋ฒˆ๊ณผ 2๋ฒˆ์˜ ๋ฐฉ๋ฒ•์€ ์ด๋ฏธ ์ž‘์„ฑํ•ด๋‘์–ด์„œ ์ด๋ ‡๊ฒŒ๋งŒ ํ•ด๋„ ์˜์กดํ•˜๋Š” ๋ฉ”์„œ๋“œ์— ๋Œ€ํ•ด test๊ฐ€ ๋œ๊ฑฐ๋‹ˆ๊นŒ ๊ดœ์ฐฎ๊ฒ ์ง€? ์ƒ๊ฐ์€ ํ–ˆ๋‹ค. ๋‹ค์Œ์—” 3๋ฒˆ ๋ฐฉ๋ฒ•์œผ๋กœ mock ํ•จ์ˆ˜๋ฅผ ์ ์šฉํ•ด๋ด์•ผ๊ฒ ๋‹ค.

โ˜€๏ธ ์˜ค๋Š˜์˜ ๊ฒฝํ—˜

์ž๋ฃŒ ๊ตฌ์กฐ๋ฅผ ๊ตฌํ˜„ํ•˜๊ณ  ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•œ ๊ฒฝํ—˜

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

ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ: ์•ก์…˜๊ณผ ๊ณ„์‚ฐ, ๋ฐ์ดํ„ฐ

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

๐Ÿพ ์˜ค๋Š˜์˜ ๊ตํ›ˆ

์„ธ์ƒ์— ์˜๋ฏธ์—†๋Š” ์‹œ๊ฐ„์€ ์—†๋‹ค. ๋‚ด๊ฐ€ ๊ฒช๋Š” ๋ชจ๋“  ์‹œ๊ฐ„๊ณผ ๊ฒฝํ—˜๋“ค์ด ์Œ“์ด๊ณ  ์Œ“์—ฌ์„œ ๋ฐ˜๋“œ์‹œ ๋น›์„ ๋‚ธ๋‹ค. ์ด๊ฑด ๋ถ€์ •ํ•  ์ˆ˜ ์—†๋Š” ์‚ฌ์‹ค์ด๋‹ค. ๊ทธ์ € ๋‚˜๋ฅผ ๋ฏฟ๊ณ  ๋‚˜์˜ ๊ธธ์„ ๋‚˜์•„๊ฐ€์ž!

๐Ÿชต ์ฐธ๊ณ