๐ŸŽญ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๋งˆ๋ฒ•์‚ฌ: ํ•ฉ์„ฑ ํ•จ์ˆ˜ (Function Composition) ๐Ÿง™โ€โ™‚๏ธ

์ฝ˜ํ…์ธ  ๋Œ€ํ‘œ ์ด๋ฏธ์ง€ - ๐ŸŽญ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๋งˆ๋ฒ•์‚ฌ: ํ•ฉ์„ฑ ํ•จ์ˆ˜ (Function Composition) ๐Ÿง™โ€โ™‚๏ธ

 

 

์•ˆ๋…•ํ•˜์„ธ์š”, ์ฝ”๋”ฉ ๋งˆ๋ฒ•์‚ฌ ์—ฌ๋Ÿฌ๋ถ„! ์˜ค๋Š˜์€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๊ฐ•๋ ฅํ•œ ๋งˆ๋ฒ• ์ค‘ ํ•˜๋‚˜์ธ 'ํ•ฉ์„ฑ ํ•จ์ˆ˜ (Function Composition)'์— ๋Œ€ํ•ด ์•Œ์•„๋ณผ ๊ฑฐ์˜ˆ์š”. ์ด ๋งˆ๋ฒ•์€ ์—ฌ๋Ÿฌ๋ถ„์˜ ์ฝ”๋“œ๋ฅผ ๋”์šฑ ์šฐ์•„ํ•˜๊ณ  ํšจ์œจ์ ์œผ๋กœ ๋งŒ๋“ค์–ด์ค„ ๊ฑฐ์˜ˆ์š”. ๋งˆ์น˜ ์žฌ๋Šฅ๋„ท์—์„œ ๋‹ค์–‘ํ•œ ์žฌ๋Šฅ์ด ๋ชจ์—ฌ ๋ฉ‹์ง„ ์ž‘ํ’ˆ์„ ๋งŒ๋“ค์–ด๋‚ด๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ง์ด์ฃ ! ๐ŸŒŸ

๐Ÿ’ก Fun Fact: ํ•จ์ˆ˜ ํ•ฉ์„ฑ์€ ์ˆ˜ํ•™์—์„œ ์˜จ ๊ฐœ๋…์ด์—์š”. ํ•˜์ง€๋งŒ ๊ฑฑ์ • ๋งˆ์„ธ์š”! ์šฐ๋ฆฌ๋Š” ๋ณต์žกํ•œ ์ˆ˜ํ•™ ์—†์ด, ์žฌ๋ฏธ์žˆ๊ฒŒ ๋ฐฐ์šธ ๊ฑฐ์˜ˆ์š”!

๐ŸŽญ ํ•ฉ์„ฑ ํ•จ์ˆ˜๋ž€ ๋ฌด์—‡์ผ๊นŒ์š”?

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

ํ•จ์ˆ˜ ํ•ฉ์„ฑ ๊ฐœ๋…๋„ ํ•จ์ˆ˜ A ํ•จ์ˆ˜ B ํ•จ์ˆ˜ C ํ•ฉ์„ฑ ํ•จ์ˆ˜ (A โˆ˜ B โˆ˜ C)

์ด ๊ทธ๋ฆผ์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋“ฏ์ด, ํ•จ์ˆ˜ A, B, C๊ฐ€ ์ˆœ์„œ๋Œ€๋กœ ์—ฐ๊ฒฐ๋˜์–ด ํ•˜๋‚˜์˜ ํฐ ํ•ฉ์„ฑ ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค๊ณ  ์žˆ์–ด์š”. ์ด์ œ ์ด ๋งˆ๋ฒ• ๊ฐ™์€ ๊ธฐ์ˆ ์„ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•˜๋Š”์ง€ ์ž์„ธํžˆ ์•Œ์•„๋ณผ๊นŒ์š”? ๐Ÿง

๐Ÿงฉ ํ•ฉ์„ฑ ํ•จ์ˆ˜์˜ ๊ธฐ๋ณธ ๊ฐœ๋…

ํ•ฉ์„ฑ ํ•จ์ˆ˜์˜ ๊ธฐ๋ณธ ์•„์ด๋””์–ด๋Š” ์ •๋ง ๊ฐ„๋‹จํ•ด์š”. ํ•œ ํ•จ์ˆ˜์˜ ์ถœ๋ ฅ์„ ๋‹ค๋ฅธ ํ•จ์ˆ˜์˜ ์ž…๋ ฅ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฑฐ์˜ˆ์š”. ๋งˆ์น˜ ์š”๋ฆฌ ๋ ˆ์‹œํ”ผ์ฒ˜๋Ÿผ ์ˆœ์„œ๋Œ€๋กœ ์ง„ํ–‰๋˜์ฃ . ๐Ÿณโžก๏ธ๐Ÿฅ—โžก๏ธ๐Ÿฐ

๐ŸŽญ ์˜ˆ์‹œ: ์ˆซ์ž๋ฅผ ์ž…๋ ฅ๋ฐ›์•„ ๋‘ ๋ฐฐ๋กœ ๋งŒ๋“  ํ›„, ๊ทธ ๊ฒฐ๊ณผ์— 10์„ ๋”ํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค๊ณ  ์‹ถ๋‹ค๊ณ  ํ•ด๋ด์š”.

์ด๋ฅผ ์œ„ํ•ด ์šฐ๋ฆฌ๋Š” ๋‘ ๊ฐœ์˜ ์ž‘์€ ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์–ด์š”:


const double = x => x * 2;
const addTen = x => x + 10;
  

์ด์ œ ์ด ๋‘ ํ•จ์ˆ˜๋ฅผ ํ•ฉ์„ฑํ•ด๋ณผ๊นŒ์š”?


const doubleThenAddTen = x => addTen(double(x));
  

์™€! ์ด๋ ‡๊ฒŒ ๊ฐ„๋‹จํžˆ ํ•ฉ์„ฑ ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์—ˆ์–ด์š”. doubleThenAddTen ํ•จ์ˆ˜๋Š” ์ž…๋ ฅ๊ฐ’์„ ๋จผ์ € ๋‘ ๋ฐฐ๋กœ ๋งŒ๋“  ํ›„, 10์„ ๋”ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

ํ•ฉ์„ฑ ํ•จ์ˆ˜ ์‹คํ–‰ ๊ณผ์ • double(x) addTen(x) ๊ฒฐ๊ณผ x = 5 10 20

์ด ๊ทธ๋ฆผ์€ doubleThenAddTen(5)๋ฅผ ์‹คํ–‰ํ–ˆ์„ ๋•Œ์˜ ๊ณผ์ •์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. 5๊ฐ€ double ํ•จ์ˆ˜๋ฅผ ํ†ต๊ณผํ•˜๋ฉด 10์ด ๋˜๊ณ , ๊ทธ ๋‹ค์Œ addTen ํ•จ์ˆ˜๋ฅผ ํ†ต๊ณผํ•˜๋ฉด ์ตœ์ข…์ ์œผ๋กœ 20์ด ๋ฉ๋‹ˆ๋‹ค.

๐ŸŒŸ Tip: ํ•ฉ์„ฑ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ฝ”๋“œ๋ฅผ ๋” ์ฝ๊ธฐ ์‰ฝ๊ณ  ์žฌ์‚ฌ์šฉํ•˜๊ธฐ ์ข‹๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์–ด์š”. ๋งˆ์น˜ ์žฌ๋Šฅ๋„ท์—์„œ ์—ฌ๋Ÿฌ ์ „๋ฌธ๊ฐ€์˜ ์žฌ๋Šฅ์„ ์กฐํ•ฉํ•ด ๋ฉ‹์ง„ ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ์š”!

์ด์ œ ๊ธฐ๋ณธ ๊ฐœ๋…์„ ์ดํ•ดํ–ˆ์œผ๋‹ˆ, ๋” ๊นŠ์ด ๋“ค์–ด๊ฐ€๋ณผ๊นŒ์š”? ๋‹ค์Œ ์„น์…˜์—์„œ๋Š” ํ•ฉ์„ฑ ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“œ๋Š” ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•๊ณผ ์‹ค์ œ ์‚ฌ์šฉ ์˜ˆ๋ฅผ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ค€๋น„๋˜์…จ๋‚˜์š”? Let's dive in! ๐ŸŠโ€โ™‚๏ธ

๐Ÿ› ๏ธ ํ•ฉ์„ฑ ํ•จ์ˆ˜ ๋งŒ๋“ค๊ธฐ: ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•๋“ค

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

1. ์ˆ˜๋™์œผ๋กœ ํ•ฉ์„ฑํ•˜๊ธฐ

๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ๋ฐฉ๋ฒ•์€ ํ•จ์ˆ˜๋ฅผ ์ง์ ‘ ํ˜ธ์ถœํ•˜๋ฉฐ ํ•ฉ์„ฑํ•˜๋Š” ๊ฑฐ์˜ˆ์š”. ์•ž์„œ ๋ณธ ์˜ˆ์‹œ์ฒ˜๋Ÿผ ๋ง์ด์ฃ :


const doubleThenAddTen = x => addTen(double(x));
  

์ด ๋ฐฉ๋ฒ•์€ ๊ฐ„๋‹จํ•˜์ง€๋งŒ, ํ•จ์ˆ˜๊ฐ€ ๋งŽ์•„์ง€๋ฉด ์ฝ”๋“œ๊ฐ€ ๋ณต์žกํ•ด์งˆ ์ˆ˜ ์žˆ์–ด์š”.

2. reduce ๋ฉ”์„œ๋“œ ์‚ฌ์šฉํ•˜๊ธฐ

์—ฌ๋Ÿฌ ํ•จ์ˆ˜๋ฅผ ํ•ฉ์„ฑํ•  ๋•Œ๋Š” reduce ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด์š”. ์ด ๋ฐฉ๋ฒ•์€ ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ์ž์ฃผ ์‚ฌ์šฉ๋˜์ฃ .


const compose = (...fns) => x => fns.reduceRight((y, f) => f(y), x);

const doubleThenAddTen = compose(addTen, double);
  

์ด ๋ฐฉ๋ฒ•์€ ์—ฌ๋Ÿฌ ํ•จ์ˆ˜๋ฅผ ์‰ฝ๊ฒŒ ํ•ฉ์„ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค˜์š”. ๋งˆ์น˜ ๋ ˆ๊ณ  ๋ธ”๋ก์„ ์Œ“๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ง์ด์ฃ ! ๐Ÿงฑ

reduce๋ฅผ ์ด์šฉํ•œ ํ•จ์ˆ˜ ํ•ฉ์„ฑ ํ•จ์ˆ˜ A ํ•จ์ˆ˜ B ํ•จ์ˆ˜ C ํ•จ์ˆ˜ D compose(D, C, B, A)

์ด ๊ทธ๋ฆผ์€ compose ํ•จ์ˆ˜๊ฐ€ ์—ฌ๋Ÿฌ ํ•จ์ˆ˜๋ฅผ ํ•˜๋‚˜๋กœ ํ•ฉ์น˜๋Š” ๊ณผ์ •์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ๋งˆ์น˜ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์žฌ๋Šฅ์„ ๊ฐ€์ง„ ์‚ฌ๋žŒ๋“ค์ด ์žฌ๋Šฅ๋„ท์—์„œ ๋งŒ๋‚˜ ํ•˜๋‚˜์˜ ํŒ€์„ ์ด๋ฃจ๋Š” ๊ฒƒ๊ณผ ๋น„์Šทํ•˜์ฃ ! ๐Ÿค

3. ํŒŒ์ดํ”„๋ผ์ธ ์—ฐ์‚ฐ์ž (์ œ์•ˆ ๋‹จ๊ณ„)

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๋ฏธ๋ž˜ ๋ฒ„์ „์—์„œ๋Š” ํŒŒ์ดํ”„๋ผ์ธ ์—ฐ์‚ฐ์ž(|>)๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์„ ๊ฑฐ์˜ˆ์š”. ์ด ์—ฐ์‚ฐ์ž๋Š” ํ•จ์ˆ˜ ํ•ฉ์„ฑ์„ ๋”์šฑ ์ง๊ด€์ ์œผ๋กœ ๋งŒ๋“ค์–ด์ค๋‹ˆ๋‹ค.


const result = 5 |> double |> addTen;
// ์ด๋Š” addTen(double(5))์™€ ๊ฐ™์•„์š”
  

์•„์ง ์ •์‹์œผ๋กœ ์ง€์›๋˜์ง€๋Š” ์•Š์ง€๋งŒ, ์ด ๋ฐฉ์‹์ด ์–ผ๋งˆ๋‚˜ ์ฝ๊ธฐ ์‰ฌ์šด์ง€ ๋ณผ๊นŒ์š”? ๋งˆ์น˜ ๋ฐ์ดํ„ฐ๊ฐ€ ํŒŒ์ดํ”„๋ฅผ ํ†ต๊ณผํ•˜๋Š” ๊ฒƒ ๊ฐ™์ฃ ! ๐Ÿšฐ

๐ŸŽญ Fun Fact: ํŒŒ์ดํ”„๋ผ์ธ ์—ฐ์‚ฐ์ž๋Š” Unix ์‰˜ ๋ช…๋ น์–ด์˜ ํŒŒ์ดํ”„(|) ๊ฐœ๋…์—์„œ ์˜๊ฐ์„ ๋ฐ›์•˜์–ด์š”. Unix ์ฒ ํ•™ "ํ•œ ๊ฐ€์ง€ ์ผ์„ ์ž˜ํ•˜๋Š” ์ž‘์€ ํ”„๋กœ๊ทธ๋žจ๋“ค์„ ๋งŒ๋“ค์–ด ์กฐํ•ฉํ•˜๋ผ"์™€ ๋น„์Šทํ•œ ๊ฐœ๋…์ด์ฃ !

4. ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ฌ์šฉํ•˜๊ธฐ

ํ•จ์ˆ˜ ํ•ฉ์„ฑ์„ ๋” ์‰ฝ๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค๋„ ์žˆ์–ด์š”. ์˜ˆ๋ฅผ ๋“ค์–ด, Lodash๋‚˜ Ramda ๊ฐ™์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” compose ํ•จ์ˆ˜๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.


// Lodash ์‚ฌ์šฉ ์˜ˆ
const _ = require('lodash');
const doubleThenAddTen = _.flowRight(addTen, double);

// Ramda ์‚ฌ์šฉ ์˜ˆ
const R = require('ramda');
const doubleThenAddTen = R.compose(addTen, double);
  

์ด๋Ÿฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์€ ํ•จ์ˆ˜ ํ•ฉ์„ฑ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋‹ค์–‘ํ•œ ์œ ํ‹ธ๋ฆฌํ‹ฐ ํ•จ์ˆ˜๋ฅผ ์ œ๊ณตํ•ด์„œ ์ฝ”๋”ฉ์„ ๋” ํšจ์œจ์ ์œผ๋กœ ๋งŒ๋“ค์–ด์ค˜์š”. ๋งˆ์น˜ ์žฌ๋Šฅ๋„ท์—์„œ ๋‹ค์–‘ํ•œ ๋„๊ตฌ์™€ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ง์ด์ฃ ! ๐Ÿ› ๏ธ

์ด๋ ‡๊ฒŒ ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ํ•จ์ˆ˜๋ฅผ ํ•ฉ์„ฑํ•  ์ˆ˜ ์žˆ์–ด์š”. ๊ฐ ๋ฐฉ๋ฒ•์€ ์žฅ๋‹จ์ ์ด ์žˆ์œผ๋‹ˆ, ์ƒํ™ฉ์— ๋งž๋Š” ์ตœ์ ์˜ ๋ฐฉ๋ฒ•์„ ์„ ํƒํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ด์š”. ๋‹ค์Œ ์„น์…˜์—์„œ๋Š” ์ด๋Ÿฐ ํ•ฉ์„ฑ ํ•จ์ˆ˜๋“ค์„ ์‹ค์ œ๋กœ ์–ด๋–ป๊ฒŒ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์•Œ์•„๋ณผ๊นŒ์š”? ์ค€๋น„๋˜์…จ๋‚˜์š”? Let's go! ๐Ÿš€

๐ŸŽญ ํ•ฉ์„ฑ ํ•จ์ˆ˜์˜ ์‹ค์ œ ํ™œ์šฉ ์‚ฌ๋ก€

์ž, ์ด์ œ ์šฐ๋ฆฌ๊ฐ€ ๋ฐฐ์šด ํ•ฉ์„ฑ ํ•จ์ˆ˜๋ฅผ ์‹ค์ œ๋กœ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์•Œ์•„๋ณผ ์ฐจ๋ก€์˜ˆ์š”. ๋งˆ์น˜ ์žฌ๋Šฅ๋„ท์—์„œ ๋‹ค์–‘ํ•œ ์žฌ๋Šฅ์„ ๊ฐ€์ง„ ์‚ฌ๋žŒ๋“ค์ด ํ˜‘๋ ฅํ•˜์—ฌ ๋ฉ‹์ง„ ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค์–ด๋‚ด๋Š” ๊ฒƒ์ฒ˜๋Ÿผ, ์šฐ๋ฆฌ๋„ ์—ฌ๋Ÿฌ ํ•จ์ˆ˜๋ฅผ ์กฐํ•ฉํ•ด ๊ฐ•๋ ฅํ•œ ๊ธฐ๋Šฅ์„ ๋งŒ๋“ค์–ด๋‚ผ ์ˆ˜ ์žˆ์–ด์š”! ๐ŸŽจ๐Ÿ”ง๐ŸŽต

1. ๋ฐ์ดํ„ฐ ๋ณ€ํ™˜ ํŒŒ์ดํ”„๋ผ์ธ

๋ฐ์ดํ„ฐ๋ฅผ ์—ฌ๋Ÿฌ ๋‹จ๊ณ„๋กœ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•  ๋•Œ ํ•ฉ์„ฑ ํ•จ์ˆ˜๊ฐ€ ์•„์ฃผ ์œ ์šฉํ•ด์š”. ์˜ˆ๋ฅผ ๋“ค์–ด, API์—์„œ ๋ฐ›์•„์˜จ ๋ฐ์ดํ„ฐ๋ฅผ ์ •์ œํ•˜๊ณ  ๋ณ€ํ™˜ํ•˜๋Š” ๊ณผ์ •์„ ๋ด…์‹œ๋‹ค.


const removeEmptyFields = obj => 
  Object.fromEntries(Object.entries(obj).filter(([_, v]) => v != null && v !== ''));

const camelCaseKeys = obj => 
  Object.fromEntries(Object.entries(obj).map(([k, v]) => [
    k.replace(/_([a-z])/g, (_, l) => l.toUpperCase()), v
  ]));

const parseNumbers = obj => 
  Object.fromEntries(Object.entries(obj).map(([k, v]) => [
    k, isNaN(v) ? v : parseFloat(v)
  ]));

const processApiData = compose(parseNumbers, camelCaseKeys, removeEmptyFields);

// ์‚ฌ์šฉ ์˜ˆ
const apiData = {
  user_name: 'John Doe',
  age: '30',
  email: 'john@example.com',
  phone_number: '',
  score: '85.5'
};

console.log(processApiData(apiData));
// ์ถœ๋ ฅ: { userName: 'John Doe', age: 30, email: 'john@example.com', score: 85.5 }
  

์ด ์˜ˆ์ œ์—์„œ ์šฐ๋ฆฌ๋Š” API ๋ฐ์ดํ„ฐ๋ฅผ ๊น”๋”ํ•˜๊ฒŒ ์ •๋ฆฌํ–ˆ์–ด์š”. ๋นˆ ํ•„๋“œ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ , ํ‚ค๋ฅผ ์นด๋ฉœ ์ผ€์ด์Šค๋กœ ๋ณ€ํ™˜ํ•˜๊ณ , ์ˆซ์ž ๋ฌธ์ž์—ด์„ ์‹ค์ œ ์ˆซ์ž๋กœ ๋ฐ”๊ฟจ์ฃ . ๊ฐ ๋‹จ๊ณ„๊ฐ€ ๋…๋ฆฝ์ ์ธ ํ•จ์ˆ˜๋กœ ๊ตฌํ˜„๋˜์–ด ์žˆ์–ด ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ๊ณผ ์žฌ์‚ฌ์šฉ์„ฑ์ด ๋†’์•„์กŒ์–ด์š”. ๐Ÿ‘€

๋ฐ์ดํ„ฐ ๋ณ€ํ™˜ ํŒŒ์ดํ”„๋ผ์ธ ์›๋ณธ API ๋ฐ์ดํ„ฐ removeEmptyFields camelCaseKeys parseNumbers

์ด ๊ทธ๋ฆผ์€ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ฐ ํ•จ์ˆ˜๋ฅผ ํ†ต๊ณผํ•˜๋ฉด์„œ ๋ณ€ํ™˜๋˜๋Š” ๊ณผ์ •์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ๋งˆ์น˜ ์กฐ๋ฆฝ ๋ผ์ธ์„ ๋”ฐ๋ผ ์ œํ’ˆ์ด ์™„์„ฑ๋˜์–ด๊ฐ€๋Š” ๊ฒƒ ๊ฐ™์ง€ ์•Š๋‚˜์š”? ๐Ÿญ

2. ์ด๋ฒคํŠธ ํ•ธ๋“ค๋ง ์ฒด์ธ

์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์‚ฌ์šฉ์ž ์ž…๋ ฅ์„ ์ฒ˜๋ฆฌํ•  ๋•Œ๋„ ํ•ฉ์„ฑ ํ•จ์ˆ˜๊ฐ€ ์œ ์šฉํ•ด์š”. ์—ฌ๋Ÿฌ ๊ฒ€์ฆ ๋‹จ๊ณ„์™€ ๋ณ€ํ™˜ ๊ณผ์ •์„ ๊ฑฐ์น˜๋Š” ๊ฒฝ์šฐ๋ฅผ ์ƒ๊ฐํ•ด๋ด…์‹œ๋‹ค.


const trim = s => s.trim();
const toLowerCase = s => s.toLowerCase();
const capitalize = s => s.charAt(0).toUpperCase() + s.slice(1);
const removeSpecialChars = s => s.replace(/[^a-zA-Z0-9]/g, '');

const processUsername = compose(capitalize, removeSpecialChars, toLowerCase, trim);

// ์‚ฌ์šฉ ์˜ˆ
document.getElementById('username').addEventListener('input', function(e) {
  e.target.value = processUsername(e.target.value);
});
  

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

๐Ÿ’ก Tip: ์ด๋Ÿฐ ๋ฐฉ์‹์œผ๋กœ ํ•จ์ˆ˜๋ฅผ ์กฐํ•ฉํ•˜๋ฉด, ๊ฐ ๋‹จ๊ณ„๋ฅผ ์‰ฝ๊ฒŒ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ์–ด์š”. ๋งˆ์น˜ ์žฌ๋Šฅ๋„ท์—์„œ ํ”„๋กœ์ ํŠธ ํŒ€์„ ์œ ์—ฐํ•˜๊ฒŒ ๊ตฌ์„ฑํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ง์ด์ฃ !

3. ๋ฏธ๋“ค์›จ์–ด ์ฒด์ธ

์„œ๋ฒ„ ์‚ฌ์ด๋“œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ, ํŠนํžˆ Express.js ๊ฐ™์€ ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ๋ฏธ๋“ค์›จ์–ด ์ฒด์ธ์„ ๊ตฌ์„ฑํ•  ๋•Œ๋„ ํ•ฉ์„ฑ ํ•จ์ˆ˜์˜ ๊ฐœ๋…์ด ์‚ฌ์šฉ๋ผ์š”.


const express = require('express');
const app = express();

const logRequest = (req, res, next) => {
  console.log(`${req.method} ${req.url}`);
  next();
};

const checkAuth = (req, res, next) => {
  if (req.headers.authorization) {
    next();
  } else {
    res.status(401).send('Unauthorized');
  }
};

const handleErrors = (err, req, res, next) => {
  console.error(err.stack);
  res.status(500).send('Something broke!');
};

app.use(logRequest);
app.use(checkAuth);
app.use(handleErrors);

app.get('/', (req, res) => {
  res.send('Hello World!');
});

app.listen(3000);
  

์ด ์˜ˆ์ œ์—์„œ๋Š” ๊ฐ ๋ฏธ๋“ค์›จ์–ด ํ•จ์ˆ˜๊ฐ€ ์ˆœ์ฐจ์ ์œผ๋กœ ์‹คํ–‰๋˜๋ฉด์„œ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•ด์š”. ๋กœ๊น…, ์ธ์ฆ ์ฒดํฌ, ์—๋Ÿฌ ํ•ธ๋“ค๋ง ๋“ฑ์ด ๋…๋ฆฝ์ ์ธ ํ•จ์ˆ˜๋กœ ๊ตฌํ˜„๋˜์–ด ์žˆ์ฃ . ์ด๋Š” ํ•ฉ์„ฑ ํ•จ์ˆ˜์˜ ๊ฐœ๋…์„ ์„œ๋ฒ„ ์•„ํ‚คํ…์ฒ˜์— ์ ์šฉํ•œ ์ข‹์€ ์˜ˆ์‹œ์˜ˆ์š”. ๐Ÿ—๏ธ

๋ฏธ๋“ค์›จ์–ด ์ฒด์ธ ์š”์ฒญ logRequest checkAuth handleErrors ๋ผ์šฐํŠธ ํ•ธ๋“ค๋Ÿฌ ์‘๋‹ต

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

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

๐ŸŒŸ Pro Tip: ํ•จ์ˆ˜๋ฅผ ์„ค๊ณ„ํ•  ๋•Œ๋Š” "๋‹จ์ผ ์ฑ…์ž„ ์›์น™"์„ ๊ธฐ์–ตํ•˜์„ธ์š”. ๊ฐ ํ•จ์ˆ˜๋Š” ํ•œ ๊ฐ€์ง€ ์ผ๋งŒ ์ž˜ ํ•˜๋„๋ก ๋งŒ๋“ค๋ฉด, ๋‚˜์ค‘์— ์กฐํ•ฉํ•ด์„œ ์‚ฌ์šฉํ•˜๊ธฐ๊ฐ€ ํ›จ์”ฌ ์‰ฌ์›Œ์ง‘๋‹ˆ๋‹ค!

๐ŸŽญ ํ•ฉ์„ฑ ํ•จ์ˆ˜์˜ ์žฅ๋‹จ์ 

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

๐Ÿ‘ ์žฅ์ 

  • ๋ชจ๋“ˆ์„ฑ: ๊ฐ ํ•จ์ˆ˜๊ฐ€ ๋…๋ฆฝ์ ์ด์–ด์„œ ํ…Œ์ŠคํŠธ์™€ ๋””๋ฒ„๊น…์ด ์‰ฌ์›Œ์ ธ์š”.
  • ์žฌ์‚ฌ์šฉ์„ฑ: ์ž‘์€ ํ•จ์ˆ˜๋“ค์„ ๋‹ค์–‘ํ•œ ๋ฐฉ์‹์œผ๋กœ ์กฐํ•ฉํ•ด ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์–ด์š”.
  • ๊ฐ€๋…์„ฑ: ๋ณต์žกํ•œ ๋กœ์ง์„ ์ž‘์€ ๋‹จ์œ„๋กœ ๋‚˜๋ˆ„์–ด ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๊ฒŒ ๋งŒ๋“ค์–ด์ค˜์š”.
  • ์œ ์ง€๋ณด์ˆ˜์„ฑ: ๊ฐ ํ•จ์ˆ˜๊ฐ€ ๋‹จ์ผ ์ฑ…์ž„์„ ๊ฐ€์ง€๋ฏ€๋กœ ์ˆ˜์ •์ด ์šฉ์ดํ•ด์š”.
  • ํ™•์žฅ์„ฑ: ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ๊ธฐ์กด ๊ธฐ๋Šฅ์„ ์ˆ˜์ •ํ•˜๊ธฐ ์‰ฌ์›Œ์ ธ์š”.

๐Ÿ‘Ž ๋‹จ์ 

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

์ด ๊ทธ๋ฆผ์€ ํ•ฉ์„ฑ ํ•จ์ˆ˜์˜ ์ฃผ์š” ์žฅ๋‹จ์ ์„ ํ•œ๋ˆˆ์— ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ๋งˆ์น˜ ๋™์ „์˜ ์–‘๋ฉด์ฒ˜๋Ÿผ, ๊ฐ๊ฐ์˜ ํŠน์„ฑ์ด ์žฅ์ ์ด ๋  ์ˆ˜๋„ ์žˆ๊ณ  ๋‹จ์ ์ด ๋  ์ˆ˜๋„ ์žˆ์ฃ . ์ƒํ™ฉ์— ๋”ฐ๋ผ ์ ์ ˆํžˆ ํ™œ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค! ๐ŸŽญ

๐Ÿ’ก Insight: ํ•ฉ์„ฑ ํ•จ์ˆ˜๋Š” ๊ฐ•๋ ฅํ•œ ๋„๊ตฌ์ง€๋งŒ, ๋ชจ๋“  ์ƒํ™ฉ์— ์ ํ•ฉํ•œ ๊ฒƒ์€ ์•„๋‹ˆ์—์š”. ํ”„๋กœ์ ํŠธ์˜ ํŠน์„ฑ, ํŒ€์˜ ์—ญ๋Ÿ‰, ์„ฑ๋Šฅ ์š”๊ตฌ์‚ฌํ•ญ ๋“ฑ์„ ๊ณ ๋ คํ•˜์—ฌ ์ ์ ˆํžˆ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋งˆ์น˜ ์žฌ๋Šฅ๋„ท์—์„œ ํ”„๋กœ์ ํŠธ์— ๋งž๋Š” ์ตœ์ ์˜ ํŒ€์„ ๊ตฌ์„ฑํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ง์ด์ฃ !

๐ŸŽญ ๊ฒฐ๋ก : ํ•ฉ์„ฑ ํ•จ์ˆ˜์˜ ๋งˆ๋ฒ•์„ ํŽผ์น˜์„ธ์š”!

์ž, ์—ฌ๋Ÿฌ๋ถ„! ์šฐ๋ฆฌ๋Š” ์ง€๊ธˆ๊นŒ์ง€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๊ฐ•๋ ฅํ•œ ๋งˆ๋ฒ•, ํ•ฉ์„ฑ ํ•จ์ˆ˜์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์•˜์–ด์š”. ์ด ๊ธฐ์ˆ ์€ ๋งˆ์น˜ ์žฌ๋Šฅ๋„ท์—์„œ ๋‹ค์–‘ํ•œ ์žฌ๋Šฅ์„ ๊ฐ€์ง„ ์‚ฌ๋žŒ๋“ค์ด ๋ชจ์—ฌ ๋ฉ‹์ง„ ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค์–ด๋‚ด๋Š” ๊ฒƒ๊ณผ ๊ฐ™์•„์š”. ๊ฐ์ž์˜ ์ž‘์€ ์žฌ๋Šฅ์ด ๋ชจ์—ฌ ํฐ ์‹œ๋„ˆ์ง€๋ฅผ ๋งŒ๋“ค์–ด๋‚ด๋Š” ๊ฑฐ์ฃ ! ๐ŸŒŸ

ํ•ฉ์„ฑ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด:

  • ์ฝ”๋“œ๋ฅผ ๋” ๊น”๋”ํ•˜๊ณ  ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์–ด์š”. ๐Ÿ“š
  • ์ž‘์€ ๊ธฐ๋Šฅ๋“ค์„ ๋ ˆ๊ณ  ๋ธ”๋ก์ฒ˜๋Ÿผ ์กฐ๋ฆฝํ•ด ๋ณต์žกํ•œ ๊ธฐ๋Šฅ์„ ๋งŒ๋“ค์–ด๋‚ผ ์ˆ˜ ์žˆ์ฃ . ๐Ÿงฑ
  • ์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ์–ด์š”. ๐Ÿ”ง
  • ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ๊ฐ•๋ ฅํ•œ ๊ฐœ๋…์„ ์‹ค์ œ๋กœ ์ ์šฉํ•ด๋ณผ ์ˆ˜ ์žˆ์ฃ . ๐Ÿง 

ํ•˜์ง€๋งŒ ๊ธฐ์–ตํ•˜์„ธ์š”, ๋ชจ๋“  ๋งˆ๋ฒ•์—๋Š” ์ฃผ์˜๊ฐ€ ํ•„์š”ํ•ด์š”! ํ•ฉ์„ฑ ํ•จ์ˆ˜๋ฅผ ๊ณผ๋„ํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๋ฉด ์ฝ”๋“œ๊ฐ€ ์˜คํžˆ๋ ค ๋ณต์žกํ•ด์งˆ ์ˆ˜ ์žˆ์–ด์š”. ์ƒํ™ฉ์— ๋งž๊ฒŒ, ์ ์ ˆํžˆ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ๐Ÿ‘€

๐ŸŒˆ Final Thought: ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ๊ฒฐ๊ตญ ๋ฌธ์ œ ํ•ด๊ฒฐ์˜ ์˜ˆ์ˆ ์ด์—์š”. ํ•ฉ์„ฑ ํ•จ์ˆ˜๋Š” ๊ทธ ์˜ˆ์ˆ ์„ ๋”์šฑ ์•„๋ฆ„๋‹ต๊ฒŒ ๋งŒ๋“ค์–ด์ฃผ๋Š” ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ๋ถ„๋งŒ์˜ ๋ฐฉ์‹์œผ๋กœ ์ด ๋„๊ตฌ๋ฅผ ํ™œ์šฉํ•ด ๋ฉ‹์ง„ ์ฝ”๋“œ ์ž‘ํ’ˆ์„ ๋งŒ๋“ค์–ด๋ณด์„ธ์š”! ๋งˆ์น˜ ์žฌ๋Šฅ๋„ท์—์„œ ์—ฌ๋Ÿฌ๋ถ„์˜ ๋…ํŠนํ•œ ์žฌ๋Šฅ์œผ๋กœ ํŠน๋ณ„ํ•œ ํ”„๋กœ์ ํŠธ๋ฅผ ์™„์„ฑํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ง์ด์—์š”. ๐ŸŽจ๐Ÿ‘ฉโ€๐Ÿ’ป๐Ÿ‘จโ€๐ŸŽจ

์ž, ์ด์ œ ์—ฌ๋Ÿฌ๋ถ„์€ ํ•ฉ์„ฑ ํ•จ์ˆ˜์˜ ๋งˆ๋ฒ•์‚ฌ๊ฐ€ ๋˜์—ˆ์–ด์š”! ์ด ๊ฐ•๋ ฅํ•œ ๋„๊ตฌ๋กœ ๋ฌด์—‡์„ ๋งŒ๋“ค์–ด๋‚ผ์ง€ ์ •๋ง ๊ธฐ๋Œ€๋˜๋„ค์š”. ์—ฌ๋Ÿฌ๋ถ„์˜ ์ฝ”๋“œ์— ์ƒˆ๋กœ์šด ์ƒ๋ช…์„ ๋ถˆ์–ด๋„ฃ์„ ์ค€๋น„๊ฐ€ ๋˜์…จ๋‚˜์š”? Let's compose some magic! โœจ๐ŸŽฉ

ํ•ฉ์„ฑ ํ•จ์ˆ˜์˜ ๋งˆ๋ฒ• ํ•ฉ์„ฑ ํ•จ์ˆ˜์˜ ๋งˆ๋ฒ• ์ž‘์€ ํ•จ์ˆ˜๋“ค์ด ๋ชจ์—ฌ ํฐ ๊ธฐ๋Šฅ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค!

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