ios

Swift- inout

CheonD 2022. 6. 28. 10:24

Swift - inout

 

 

μ˜€λŠ˜μ€ Swift ν•¨μˆ˜ 문법인 inout ν‚€μ›Œλ“œμ— λŒ€ν•΄μ„œ μ•Œμ•„λ³΄λ €κ³  ν•©λ‹ˆλ‹€.

 

μš°λ¦¬λŠ” μ•ž ν¬μŠ€νŒ… https://pololove.tistory.com/97 μ—μ„œ μŠ€μœ„ν”„νŠΈμ—μ„œ ν•¨μˆ˜κ°€ 무엇인지에 λŒ€ν•΄ ν•™μŠ΅ν–ˆμŠ΅λ‹ˆλ‹€. 

기본적으둜 ν•¨μˆ˜μ˜ νŒŒλΌλ―Έν„°λŠ” let으둜 μ„ μ–Έλ˜λ©° μ΄λŠ” "μƒμˆ˜"이기 λ•Œλ¬Έμ— ν•¨μˆ˜ λ‚΄λΆ€μ—μ„œ 변경이 λΆˆκ°€ν•˜λ‹€λŠ” νŠΉμ§•μ΄ μžˆμŠ΅λ‹ˆλ‹€. 

 

그럼 변경이 λΆˆκ°€λŠ₯ν•œ μƒνƒœλ‘œλ§Œ ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•΄μ•Όν• κΉŒμš”? 

 

μ•„λ‹™λ‹ˆλ‹€. ν•¨μˆ˜μ— 전달받은 νŒŒλΌλ―Έν„°κ°’μ„ λ³€κ²½μ‹œν‚€κΈ° μœ„ν•΄ μš°λ¦¬λŠ” inout ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 

 

inout νŒŒλΌλ―Έν„°

ν•¨μˆ˜μ˜ νŒŒλΌλ―Έν„° 값을 λ³€κ²½ν•˜κΈ° μœ„ν•œ ν‚€μ›Œλ“œ.

 

 

inoutν‚€μ›Œλ“œμ˜ μ‚¬μš©λ²•λΆ€ν„° μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.

 

 

ν•¨μˆ˜μ˜ νƒ€μž… μ•žμ— inout ν‚€μ›Œλ“œλ₯Ό μ μ–΄μ€ŒμœΌλ‘œμ¨ νŒŒλΌλ―Έν„°λ₯Ό let으둜 μ„ μ–Έν•˜λŠ” 것이 μ•„λ‹Œ 원본 κ°’μ˜ μ£Όμ†Œλ₯Ό 전달받을 수 있게 λ˜μ—ˆμŠ΅λ‹ˆλ‹€. 

 

즉, κΈ°μ‘΄μ—λŠ” νŒŒλΌλ―Έν„°λ‘œ 전달받을 λ•Œ 값을 λ³΅μ‚¬ν•΄μ„œ μƒˆλ‘œμš΄ μƒμˆ˜λ₯Ό μ„ μ–Έν•œ 것에 λ°˜ν•΄ inout 을 μ΄μš©ν•œ νŒŒλΌλ―Έν„° μ •μ˜λŠ” μ›λ³Έκ°’μ˜ μ£Όμ†Œλ₯Ό 전달받아 원본값을 λ³€κ²½μ‹œν‚¬ 수 있게 된 κ²ƒμž…λ‹ˆλ‹€. (μ •ν™•νžˆλŠ” copy-in, copy-out λ§€μ»€λ‹ˆμ¦˜μ„ μ‚¬μš©ν•©λ‹ˆλ‹€. ν•˜μ§€λ§Œ λ°˜ν™˜λ  λ•Œμ˜ 값이 κ²°κ΅­ 원본 λ³€μˆ˜μ— μž¬ν• λ‹Ήν•˜κΈ°μ— κ°™λ‹€κ³  λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€.) 

 

μ—¬κΈ°μ„œ μ•Œμ•„μ•Όν•  것은 "원본 λ³€μˆ˜μ˜ μ£Όμ†Œλ₯Όλ°›μ•„μ„œ 값을 λ³€κ²½ν•œλ‹€." μž…λ‹ˆλ‹€.

 

그럼 ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•  λ•Œλ„ μ£Όμ†Œλ₯Ό 전달해주어야겠죠?

 

 

ν˜ΈμΆœλΆ€λŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

 

Swiftμ—μ„œ &λ³€μˆ˜λͺ… 은  "λ³€μˆ˜μ˜ μ£Όμ†Œλ₯Ό μ €μž₯ν•˜λŠ” ν‘œν˜„μ‹" μž…λ‹ˆλ‹€.

 

μ΄λ ‡κ²Œ μ£Όμ†Œλ₯Ό μ „λ‹¬ν•¨μœΌλ‘œμ¨ ν•¨μˆ˜ λ‚΄λΆ€μ—μ„œ μ›λ³Έλ³€μˆ˜λ₯Ό λ³€ν™”μ‹œν‚¬ 수 있게 λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

 

ν•˜μ§€λ§Œ 이런 inout ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•  λ•Œ μ£Όμ˜ν•  점이 μžˆλŠ”λ°μš”, λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

 

1. μƒμˆ˜ letμ΄λ‚˜ λ¦¬ν„°λŸ΄μ„ μ „λ‹¬ν•˜λŠ” 것 X

2. νŒŒλΌλ―Έν„°μ˜ κΈ°λ³Έκ°’ μ„ μ–Έ X

3. κ°€λ³€νŒŒλΌλ―Έν„°λ₯Ό μ‚¬μš©ν•˜λŠ” 것 X