πŸ‘©‍πŸ’»CS

μˆœμˆ˜ν•¨μˆ˜λž€? μˆœμˆ˜ν•¨μˆ˜ λΆˆλ³€μ„± μ‚¬μ΄λ“œμ΄νŽ™νŠΈ

IOTrue 2023. 4. 5. 12:03

😎 μˆœμˆ˜ν•¨μˆ˜λž€?

βœ… μˆœμˆ˜ν•¨μˆ˜ νŠΉμ§•

  • μ‚¬μ΄λ“œ μ΄νŽ™νŠΈκ°€ μ—†μ–΄μ•Ό ν•œλ‹€. (μ™ΈλΆ€μ˜ μƒνƒœλ₯Ό λ³€κ²½ν•˜μ§€ μ•Šμ•„μ•Ό ν•œλ‹€.)
  • λ™μΌν•œ 값이 μ£Όμ–΄μ§ˆ 경우 항상 리턴 값이 κ°™μ•„μ•Ό ν•œλ‹€.

 

βœ… μˆœμˆ˜ν•¨μˆ˜ μ˜ˆμ‹œ

1. μˆœμˆ˜ν•¨μˆ˜

const one = 1
const two = 2

function sum(a, b){
    return a + b;
}
sum(one, two) // 3

sum ν•¨μˆ˜λŠ” μ™ΈλΆ€ μƒνƒœλ₯Ό λ³€κ²½ν•˜μ§€ μ•Šκ³ , 같은 값에 λŒ€ν•΄ 항상 같은 값을 λ¦¬ν„΄ν•˜λ―€λ‘œ

μˆœμˆ˜ν•¨μˆ˜μ΄λ‹€.

 

2. μˆœμˆ˜ν•¨μˆ˜κ°€ μ•„λ‹Œ 것 (λΉ„μˆœμˆ˜ν•¨μˆ˜)

const arr = [1, 2]

function add(arr, value){
	return arr.push(value)
}
add(arr, 3) 
arr // [1, 2, 3]

add ν•¨μˆ˜λŠ” 전달 받은 κ°’ arr에 valueλ₯Ό push ν•˜λ©΄μ„œ

μ™ΈλΆ€ 값인 arr의 μƒνƒœλ₯Ό λ³€κ²½ν•˜κ³ (μ‚¬μ΄λ“œμ΄νŽ™νŠΈ), 항상 λ‹€λ₯Έ 값을 λ¦¬ν„΄ν•˜λ―€λ‘œ

μˆœμˆ˜ν•¨μˆ˜κ°€ μ•„λ‹ˆλ‹€.

 

βœ… μˆœμˆ˜ν•¨μˆ˜μ™€ λΆˆλ³€μ„±

μˆœμˆ˜ν•¨μˆ˜λŠ” λΆˆλ³€μ„±μ„ μ§€ν‚€κΈ° μœ„ν•΄ μ‚¬μš©ν•œλ‹€.

ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ˜ νŠΉμ§• 쀑 ν•˜λ‚˜κ°€ μˆœμˆ˜ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜λŠ” 것이고 이것은 λ¦¬μ•‘νŠΈκ°€ μ§€ν–₯ν•˜λŠ” 방식이닀.

예λ₯Ό λ“€μ–΄μ„œ λ¦¬μ•‘νŠΈλŠ” μƒνƒœκ΄€λ¦¬λΌλŠ” 것을 ν•œλ‹€.

state와 setStateλ₯Ό 톡해 이전 κ°’κ³Ό λ°”λ€” 값을 λΉ„κ΅ν•œ ν›„ 바뀐 값을 λ¦¬ν„΄ν•œλ‹€.

λ³€ν™”κ°€ ν•„μš”ν•œ κ°’λ§Œμ„ λ¦¬ν„΄ν•œλ‹€λŠ” λœ»μ΄λ‹€.

λ§Œμ•½ λ³€ν™”κ°€ ν•„μš”ν•œ κ°’ 말고도 μ™ΈλΆ€μ˜ 값을 λ³€κ²½ν•œλ‹€κ±°λ‚˜

λ³€ν™”κ°€ ν•„μš”ν•œ 값이 μ˜ˆμƒμΉ˜ λͺ»ν•œ κ°’μœΌλ‘œ 리턴이 λœλ‹€λ©΄ κ°œλ°œμ€ 엉망이 될 것이닀.

즉 μˆœμˆ˜ν•¨μˆ˜λŠ” μ˜ˆμƒμΉ˜ λͺ»ν•œ 상황을 λ§Œλ“€μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— μ‹ λ’°ν•  수 μžˆλŠ” ν•¨μˆ˜κ°€ 되며

이것은 ν•¨μˆ˜λ‘œ 이루어진 ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ° λ°©μ‹μ—μ„œ κΌ­ ν•„μš”ν•œ κ°œλ…μ΄λ‹€.

 

βœ… λΆˆλ³€μ„± μ˜ˆμ‹œ

1. λΆˆλ³€μ„±μ„ μ§€ν‚€μ§€ μ•Šμ€ μ˜ˆμ‹œ

const arr = [1, 2]

function add(arr, value){
	return arr.push(value)
}
add(arr, 3) 
arr // [1, 2, 3]

원본 arr의 값이 λ³€κ²½λ˜μ—ˆμœΌλ―€λ‘œ λΆˆλ³€μ„±μ„ μ§€ν‚€μ§€ μ•Šμ•˜λ‹€.

 

2. λΆˆλ³€μ„±μ„ 지킨 μ˜ˆμ‹œ

const arr = [1, 2]

function add(arr, value){
	const newArr = arr.map((arr)=> arr)
	newArr.push(value)
	return newArr
}
add(arr, 3) // [1, 2, 3]
arr // [1, 2]

μƒˆλ‘œμš΄ 객체λ₯Ό λ³΅μ‚¬ν•΄μ„œ μ‚¬μš©ν•˜μ˜€μœΌλ―€λ‘œ 원본 arr의 값은 κ·ΈλŒ€λ‘œ μœ μ§€λ˜μ—ˆκΈ° λ•Œλ¬Έμ— λΆˆλ³€μ„±μ΄ μœ μ§€ λ˜μ—ˆλ‹€.

 

λΆˆλ³€μ„±μ˜ μ§„μ§œ μ˜λ―ΈλŠ” 'λ©”λͺ¨λ¦¬ μ˜μ—­μ˜ κ°’'을 λ³€κ²½ν•˜μ§€ μ•ŠλŠ” 것을 λ§ν•œλ‹€.

 

 

βœ… μˆœμˆ˜ν•¨μˆ˜ μž₯단점

μˆœμˆ˜ν•¨μˆ˜ μž₯점

예츑 κ°€λŠ₯ν•˜λ‹€.
μ™ΈλΆ€μ˜ 값을 λ³€κ²½ μ‹œν‚€μ§€ μ•Šκ³ , 같은 전달에 λŒ€ν•΄ 같은 값을 λ°˜ν™˜ν•˜κΈ° λ•Œλ¬Έμ— 예츑이 κ°€λŠ₯ν•˜λ‹€.

순수 ν•¨μˆ˜λŠ” μ‹€ν–‰ μ‹œμ μ΄ μ€‘μš”ν•˜μ§€ μ•Šλ‹€.
μ‹€ν–‰λ˜λŠ” μ‹œμ κ³Ό 상관없이 항상 λ™μΌν•œ κ²°κ³Όλ₯Ό λ°˜ν™˜ν•˜κΈ° λ•Œλ¬Έμ— μ‹€ν–‰ μ‹œμ μ€ μ€‘μš”ν•˜μ§€ μ•Šλ‹€.

μž¬μ‚¬μš©μ„±μ΄ μ’‹λ‹€.
ν•˜λ‚˜μ˜ κΈ°λŠ₯에 μΆ©μ‹€ν•˜κΈ° λ•Œλ¬Έμ— μ‘°ν•© 및 μž¬μ‚¬μš©μ„±μ΄ μ’‹λ‹€.

 

μˆœμˆ˜ν•¨μˆ˜ 단점

개발 λ‚œμ΄λ„κ°€ λ†’λ‹€.
μˆœμˆ˜ν•¨μˆ˜μ˜ νŠΉμ§•μ„ μ§€μΌœκ°€λ©° κ°œλ°œν•΄μ•Ό ν•˜λ―€λ‘œ λ‚œμ΄λ„κ°€ μ˜¬λΌκ°„λ‹€.

 

 

❗ μ •리

  • μˆœμˆ˜ν•¨μˆ˜λŠ” ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ—μ„œ λΆˆλ³€μ„±μ„ μœ„ν•΄ κΌ­ ν•„μš”ν•œ κ°œλ…μ΄λ‹€.
  • λΆˆλ³€μ„±μ΄λž€ 'λ©”λͺ¨λ¦¬ μ˜μ—­μ˜ κ°’'이 λ³€ν•˜μ§€ μ•ŠλŠ” 것이닀.
  • λ¦¬μ•‘νŠΈλŠ” λΆˆλ³€μ„±μ„ μ§€ν‚€λ―€λ‘œμ¨ 효율적인 μƒνƒœ μ—…λ°μ΄νŠΈλ₯Ό ν•œλ‹€.
  • μˆœμˆ˜ν•¨μˆ˜μ™€ λΆˆλ³€μ„±μ€ 개발 ꡬ쑰λ₯Ό λ‹¨μˆœν™” μ‹œμΌœ 예츑이 κ°€λŠ₯ν•΄μ§„λ‹€.