๐Ÿ“•[์ฑ…] ์™์™ ๋“ค์–ด์˜ค๋Š” ํ•จ์ˆ˜ํ˜• ์ฝ”๋”ฉ - 23,24

rivolt0421ยท2023๋…„ 4์›” 8์ผ
0

๐Ÿ“•์ฑ…

๋ชฉ๋ก ๋ณด๊ธฐ
14/26

253p ~ 278p

์š”์•ฝ

๐Ÿ˜‡ ๊ฐœ์š”
์ฝ”๋“œ์˜ ๋ƒ„์ƒˆ. ๋‘ ๊ฐ€์ง€์˜ ๋ฆฌํŒฉํ„ฐ๋ง์œผ๋กœ ํ•ด๊ฒฐ ๊ฐ€๋Šฅ.

  1. ์•”๋ฌต์  ์ธ์ž๋ฅผ ๋“œ๋Ÿฌ๋‚ด๊ธฐ. ์ฆ‰, ๋ช…์‹œ์  ์ธ์ž๋กœ ๋ฐ”๊พธ๊ธฐ (์ผ๊ธ‰ ๊ฐ’)
  2. ํ•จ์ˆ˜ ๋ณธ๋ฌธ์„ ์ฝœ๋ฐฑ์œผ๋กœ ๋ฐ”๊พธ๊ธฐ (๊ณ ์ฐจ ํ•จ์ˆ˜) โžก๏ธ ์˜ค๋Š˜์˜ ์ฃผ์ œ.

๐Ÿ˜‡ ์šฉ์–ด ์ •๋ฆฌ
์ผ๊ธ‰ (first-class) : "์ธ์ž๋กœ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค."
์ผ๊ธ‰ ๊ฐ’ : '์ผ๊ธ‰'์ธ ๋ฐ์ดํ„ฐ.
์ผ๊ธ‰ ํ•จ์ˆ˜ : '์ผ๊ธ‰'์ธ ํ•จ์ˆ˜.
๊ณ ์ฐจ ํ•จ์ˆ˜ : ์ผ๊ธ‰ ํ•จ์ˆ˜๋ฅผ ์ธ์ž๋กœ ๋ฐ›๊ฑฐ๋‚˜ ๋ฆฌํ„ดํ•  ์ˆ˜ ์žˆ๋Š” ํ•จ์ˆ˜.

๐Ÿ˜‡ "ํ•จ์ˆ˜ ๋ณธ๋ฌธ์„ ์ฝœ๋ฐฑ์œผ๋กœ ๋ฐ”๊พธ๊ธฐ"

  1. ๋ณธ๋ฌธ๊ณผ ๊ทธ ์•ž๋ถ€๋ถ„ / ๋’ท๋ถ€๋ถ„ ์„ ํ™•์ธํ•œ๋‹ค.
    • ๋ณธ๋ฌธ : ๊ตฌํ˜„์ด ๋น„์Šทํ•œ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ•จ์ˆ˜์—์„œ, ์ฝ”๋“œ์— ๋ณ€ํ™”๊ฐ€ ์žˆ๋Š” ๋ถ€๋ถ„.
  2. ๋ฆฌํŒฉํ„ฐ๋ง ํ•  ์ฝ”๋“œ๋ฅผ ํ•จ์ˆ˜๋กœ ๋นผ๋‚ธ๋‹ค.
  3. ๋ณธ๋ฌธ์„ ์ธ์ž(์ฝœ๋ฐฑ ํ•จ์ˆ˜)๋กœ ๋งŒ๋“ค์–ด, 2๋ฒˆ์—์„œ ๋นผ๋‚ธ ํ•จ์ˆ˜(๊ณ ์ฐจ ํ•จ์ˆ˜)์— ์ธ์ž๋กœ ์ „๋‹ฌํ•œ๋‹ค.

๐Ÿ˜‡ ์ฝ”๋“œ ์˜ˆ์‹œ

// 1. ์•ž๋ถ€๋ถ„ ๋’ท๋ถ€๋ถ„ ํ™•์ธ
function arraySet (array, idx, value) {
	var copy = array.slice();	// ์•ž๋ถ€๋ถ„
  	copy[idx] = value;			// ๋ณธ๋ฌธ
  	return copy;				// ๋’ท๋ถ€๋ถ„
}

// 2. ํ•จ์ˆ˜ ๋นผ๋‚ด๊ธฐ
function withArrayCopy(array) {
	var copy = array.slice();
	copy[idx] = value;				        // ๋ณธ๋ฌธ. ์•„์ง ์ œ๋Œ€๋กœ ์ •์˜๋˜์ง€ ์•Š์€ ์ƒํƒœ.
  	return copy;
}
function arraySet(array, idx, value) {
	return withArrayCopy(array);
}


// 3. ์ฝœ๋ฐฑ ๋นผ๋‚ด๊ธฐ
function withArrayCopy(array, modify) {
	var copy = array.slice();
	modify(copy);	                        // ์ฝœ๋ฐฑ ํ˜ธ์ถœ. ์›๋ž˜์˜ ๋ณธ๋ฌธ์— ํ•ด๋‹น.
  	return copy;
}
function arraySet(array, idx, value) {
  	return withArrayCopy(
      array,
      function(copy) {copy[idx] = value;}	// ์ฝœ๋ฐฑ ์ „๋‹ฌ
    );
}

๋ฐœ์ทŒ

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ์ธ์ž๋กœ ์ „๋‹ฌํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ์ฝœ๋ฐฑ(callback) ๋˜๋Š” ํ•ธ๋“ค๋Ÿฌ ํ•จ์ˆ˜(handler function) ๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค. ๋ฌผ๋ก  ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์™ธ์˜ ๋‹ค๋ฅธ ์ปค๋ฎค๋‹ˆํ‹ฐ์—์„œ๋„ ์‚ฌ์šฉํ•˜๋Š” ์šฉ์–ด์ž…๋‹ˆ๋‹ค. ์ฝœ๋ฐฑ์œผ๋กœ ์ „๋‹ฌํ•˜๋Š” ํ•จ์ˆ˜๋Š” "๋‚˜์ค‘์— ํ˜ธ์ถœ๋  ๊ฒƒ"์„ ๊ธฐ๋Œ€ํ•ฉ๋‹ˆ๋‹ค.

  • ์„ ํƒ์ ์œผ๋กœ ํ˜ธ์ถœ (e.g. ์กฐ๊ฑด๋ฌธ ์•ˆ์—์„œ)
  • ๋‚˜์ค‘์— ํ˜ธ์ถœ (e.g. sleep()์„ ํ†ตํ•œ ์ผ์ • ์‹œ๊ฐ„ ๊ฒฝ๊ณผ ํ›„)
  • ์ƒˆ๋กœ์šด ๋ฌธ๋งฅ ์•ˆ์—์„œ ํ˜ธ์ถœ (e.g. try/catch ๊ตฌ๋ฌธ ์•ˆ์—์„œ)

๋ฉ”๋ชจ

๊ณ ์ฐจ ํ•จ์ˆ˜์— ์ „๋‹ฌํ•˜๋Š” ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋Š”, ๊ณ ์ฐจ ํ•จ์ˆ˜ ์•ˆ์—์„œ ํ˜ธ์ถœ๋˜๋Š” ๊ผด์— ๋งž๋Š” ์ธ์ž์™€ ๊ฒฐ๊ณผ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์žˆ์–ด์•ผ ํ•จ. ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์™œ ์ƒ๊ฒผ๋Š”์ง€ ์•Œ๊ฒ ๋‹ค.

profile
I think I think too much.

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

comment-user-thumbnail
2023๋…„ 4์›” 9์ผ

๋ธ”๋กœ๊ทธ์˜ ์‹ 

1๊ฐœ์˜ ๋‹ต๊ธ€