ํฐ์คํ ๋ฆฌ ๋ทฐ
iOS ์ฑ๊ฐ๋ฐ/Swift Basic
[์ค์ํํธ(Swift) ํ๋ก๊ทธ๋๋ฐ] - Closure๋ฅผ ์ด์ฉํด ์ ์ฅ ํ๋กํผํฐ ์ด๊ธฐํํ ๋ ๋ค์๋ ์๋ฌธ์ ๋ค
B_log 2021. 5. 18. 12:32๋ฐ์ํ
๐ Closure๋ฅผ ์ด์ฉํ ์ ์ฅ ํ๋กํผํฐ ์ด๊ธฐํ๋ฅผ ๊ตฌํ์ ์๊ฐํด๋ณด๊ธฐ
๐ฌ Closure๋ฅผ ์ด์ฉํ ์ ์ฅ ํ๋กํผํฐ ์ด๊ธฐํ๋ฅผ ๊ตฌํ ๋ฐฉ๋ฒ
- ํ์ต๊ณผ์ ์ค ๊ตฌํ๋ ํด๋ก์ ๋ฅผ ์ด์ฉํ ์ ์ฅ ํ๋กํผํฐ์ ๊ตฌ์กฐ๋ฅผ ๋ณด๋ฉฐ ํ๊ฐ์ง ์๋ฌธ์ด ๋ค์์ต๋๋ค. ์๋ฌธ์ ๋ํด ๋งํด๋ณด๊ธฐ ์ ์, ์ฐ์ ๊ตฌํ๋ ๊ตฌ์กฐ๋ฅผ ํ๋ฒ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
let/var propertyName: Type = { // Logics return returnValue }
์์ ์ถ์ํ๋ ๊ตฌ์กฐ๋ฅผ ์์๋ก ๊ตฌ์ฒดํ ์์ผ๋ณด๊ฒ ์ต๋๋ค.
var age: Int = { print("๋์ด๊ฐ ๋ช์ด์ ๋๊น?") return 10 }()
์์ ๊ฐ์ด ํด๋ก์ ๋ฅผ ํตํด ํ๋กํผํฐ๋ฅผ ์ ์ํ ์ ์์ต๋๋ค.
๐ ์ฐ์ฐ ํ๋กํผํฐ์์ ์ฐจ์ด
- ์์ ์์๋ฅผ ๋ณด๋ฉด ํ๊ฐ์ง ์๋ฌธ์ด ์๊ธธ ์ ์์ต๋๋ค. ์ฐ์ฐํ๋กํผํฐ์ ๋ชจ์์ด ๋น์ทํด ๋ณด์ผ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ํ์ง๋ง ์๊ฐํด๋ณด๋ฉด, ์ฐ์ฐ ํ๋กํผํฐ์ ์์ ์ ์ฅ ํ๋กํผํฐ๋ ๊ธฐ๋ณธ์ ์ธ ๋ชฉ์ ์์ ์ฐจ์ด๊ฐ ๋ฉ๋๋ค.
- ์ฐ์ฐ ํ๋กํผํฐ์ ๊ฒฝ์ฐ ์ฐ์ฐ ์์ฒด๋ฅผ ๋ด๋ ๊ฒ์ด ๋ชฉ์ ์ด๊ธฐ ๋๋ฌธ์ ๋ช๋ฒ์ ๋ฐ๋ณตํด์ ํธ์ถํด๋ ๊ณ์ ์ฐ์ฐ์ ์ํํฉ๋๋ค. ๊ฒฐ๊ณผ ๊ฐ์ด ๋ฐ๋๋ค๊ณ ํด๋ ๋ชฉ์ ์ด '์ฐ์ฐ' ๊ทธ ์์ฒด๋ฅผ ๋ถ๋ฌ์ค๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์
๋๋ค.์ด ๋ก์ง์์ ํด๋ก์ ๋ก ๊ตฌํ๋ age ๋ณ์๊ฐ ๋ณํ ๊ฒฝ์ฐ ageCaculator๊ฐ ๋ฐํํ๋ ๊ฐ ์ญ์ ๋ฐ๋ ๊ฒ์
๋๋ค. ๋ค์ ๋ฐ๋ณต์ ์ผ๋ก ์ฐ์ฐ์ ์ํํ๊ธฐ ๋๋ฌธ์
๋๋ค.
๊ทธ์ ๋ฐ๋ฉด์ ํด๋ก์ ๋ก ์ ์๋ ํ๋กํผํฐ๋ฅผ ๋ณด๋ฉด ์ ์ฅ ํ๋กํผํฐ๋ก '๊ฐ์ ์ ์ฅํ๋ ๊ฒ'์ด ๋ชฉ์ ์ธ ํ๋กํผํฐ์ด๋ฏ๋ก ํด๋ก์ ๋ฅผ ํ๋ฒ๋ง ์ฐ์ฐํด์ ๊ทธ ๊ฒฐ๊ณผ๊ฐ์ ์ ์ฅํฉ๋๋ค. ๊ทธ ์ดํ๋ก๋ ๋ค์ ๋ฐ๋ณตํด์ ํธ์ถํด๋ ์ต์ด์ ์คํ์ ์ ์ฅ๋ ๊ฐ๋ง์ ๋ฐ๋ณตํฉ๋๋ค. -
var ageCaculator: Int { get { print("์ ๋์ด๋ \(age)์ ๊ฐ์ต๋๋ค.") return age } }
๐ฏ ์ฌ๋ฌ๊ฐ์ง ์๊ฐ๋ค
๐ง Q1. ํด๋ก์ ๋ ์ผ๊ธ ๊ฐ์ฒด๋ก ๋ณ์๋ ์์์ ํ ๋น ๊ฐ๋ฅํ๋ฐ () ์์ด ํด๋ก์ ๊ทธ ์์ฒด๋ฅผ ๋ณ์์ ํ ๋นํ ์๋ ์์๊น?
- ์ฐ์ ํด๋ก์ ์ ๋ง์ง๋ง ๋ถ๋ถ์ ์๋ '( )'์ ์กด์ฌ ์๋ฏธ์ ๋ํด ์๊ฐํด๋ดค์ต๋๋ค. ๊ดํธ๊ฐ ์กด์ฌํ๋ค๋ ๊ฒ์ ์ ํด๋ก์ ๊ฐ ๋ฉ๋ชจ๋ฆฌ์์ ์ฌ๋ผ๊ฐ ์คํ์ด ๋๋ค๋ ๊ฒ์ธ๋ฐ ์คํ ๊ฒฐ๊ณผ๋ฌผ์ ํ๋กํผํฐ์ ์ ์ฅํ๋ค๋ ์๋ฏธ์์ '์คํ'์ ์๋ฏธ๋ฅผ ๊ฐ์ง ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ฉด ํด๋ก์ ์์ฒด๋ฅผ ์ ์ฅํ๋ ๊ฐ๋ ์ผ๋ก ์ฌ์ฉํ ์๋ ์์๊น ์๊ฐํด๋ดค์ต๋๋ค.
- ๊ฒฐ๋ก : ๊ดํธ๊ฐ ์ ๊ฑฐ๋๋ฉด ์๋ฌ๋ฅผ ๋ฐ์์ํต๋๋ค.
var age: Int = { // ์๋ฌ ๋ฐ์ print("๋์ด๊ฐ ๋ช์ด์ ๋๊น?") return 10 }
return๊ฐ์ด ์กด์ฌํ๋๋ฐ ๋ฉ์๋์ ๊ตฌ์กฐ๊ฐ ์๋๊ธฐ ๋๋ฌธ์ ๋๋ค. PlayGround์์ ์ฌ๊ธฐ์ ๋ํ ๋ณด์์ฑ ์ผ๋ก ์ถ์ฒ์ด ๋์ค๋ ๊ฒ์ ์๋์ ๊ฐ์ต๋๋ค.
age์ ๊ฐ์ ํด๋ก์ { () -> Int }, ์ฆ ์ ๋ ฅ๊ฐ์ด ์๊ณ ๋ฐํ๊ฐ์ด Intํ์ธ ํด๋ก์ ๋ฅผ ๋์ ํ๋ค๋ ์๋ฏธ์ ๋๋ค. ์์ ๋ฉ์๋๋ ์ฌ์ค ์์ด์ ๊ตฌํํ๋ ค๊ณ ํ๋ ๊ฒ๊ณผ ์ฐจ์ด๊ฐ ์๊ธฐ ๋๋ฌธ์ ์๋(Q3)์์ ์ถ๊ฐ๋ก ์ค๋ช ํ๊ฒ ์ต๋๋ค.var age = { () -> Int in print("๋์ด๊ฐ ๋ช์ด์ ๋๊น?") return 10 }
๊ณ ๋ฏผ์ ์ถ๋ฐ์ ์ ์๊ฐํด๋ณด๋ฉด ํด๋ก์ ๋ ์ผ๊ธ๊ฐ์ฒด์ด๋ฏ๋ก ๋น์ฐํ ๋ณ์/์์ ํ ๋น์ด ๊ฐ๋ฅํฉ๋๋ค. ์๋์ ๊ฐ์ด return์ด ์๋ ๋ก์ง์ด๋ผ๋ฉด ๋ง์ด์ฃ
let age = { print("๋์ด๋ฅผ ๋จน์ด๊ฐ๋๋ค..") }
๊ทธ๋ฐ๋ฐ return์ด ๋ฑ์ฅํ๋ ์๊ฐ ๊ทธ ํด๋ก์ ๋ ๋จ์ํ ํด๋ก์ ๊ฐ ์๋๋ผ ํจ์ ์ญํ ์ ํ๊ธฐ ๋๋ฌธ์ ๊ทธ ํจ์์ ๋ง๋ ์์๊ฐ ํ์ํฉ๋๋ค. ๊ทธ๋์ ์ฐ์ฐ ๊ฒฐ๊ณผ๋ฅผ ๋ฃ์ด์ฃผ๊ธฐ ์ํด ์ด ํจ์๋ฅผ ๋์์ํจ๋ค๋ ์๋ฏธ์์ ๊ดํธ๊ฐ ํ์ํฉ๋๋ค.
๐ง Q2. ํด๋ก์ ๋ฅผ ์ด์ฉํด ์ ์ฅ ํ๋กํผํฐ๋ฅผ ์ด๊ธฐํํ ๋ ํ์ ๋ช ์๊ฐ ์๋๋ฉด ์๋ฌ ๋ฐ์
- Swift๋ ํ์
์ด ๋ช
๋ฐฑํ ๊ฒฝ์ฐ ํ์
์ถ๋ก ์ ํตํด ๋ณ์/์์์ ํ์
์ ์ง์ ํด์ฃผ๊ธฐ ๋๋ฌธ์ ํ์
๋ช
์๋ฅผ ํด์ฃผ์ง ์์๋ ๊ด์ฐฎ์ต๋๋ค. ํ์ง๋ง ์ด ์์์์๋ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
์ ๊ฐ ์ถ์ธกํด๋ณธ ์ด์ ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. ๋จ์ ํด๋ก์ ๋ฅผ ์์์ ํ ๋นํ ๋์๋ ํด๋ก์ ์์ฒด๊ฐ ์์์ ๋ค์ด๊ฐ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ์์์ ํ์ ์ ๋ช ์ํด์ค ํ์๊ฐ ์์ต๋๋ค. ํ์ง๋ง ํด๋ก์ ์ ์ฐ์ฐ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅ ํ๋กํผํฐ์ ๋ฃ์ด์ฃผ๋ ๊ฒ์ ์ฝ๊ฒ ๋งํด ํจ์์ ๊ฒฐ๊ณผ๋ฌผ์ ์ ์ฅ ํ๋กํผํฐ์ ๋ฃ์ด์ฃผ๋ ๊ฒ์ ๋๋ค. ์ฆ, ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํ ์์์ ํจ์ ๊ทธ ์์ฒด๋ ๋ค๋ฅธ ๊ฐ๋ ์ธ ๊ฒ์ด์ฃ . ๊ทธ๋์ ํจ์์ ๊ฒฐ๊ณผ๋ฌผ์ ํ์ ์ ์ ์ ์์ง๋ง, ๊ทธ ํ์ ์ ๋ด์ ์ ์ฅ ํ๋กํผํฐ์ ํ์ ์ด ์ด๊ฒ๊ณผ ์ผ์นํด์ผ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ง ์๊ธฐ ๋๋ฌธ์ ์ ์ฅ ํ๋กํผํฐ์ ํ์ ์ ๋ช ์ํด ๊ฒฐ๊ณผ๋ฌผ์ ์ ์ฅํ ๊ณต๊ฐ์ ๋ง๋ค๊ณ , ํจ์์ ๊ฒฐ๊ณผ๋ฌผ์ ์ฌ๊ธฐ์ ์ ์ฅํ๋ค๊ณ ์๊ฐํฉ๋๋ค. -
// ํ์ ์ด ๋ช ์๊ฐ ์๋๋ฉด ์ถ๋ก ์ด ๋ถ๊ฐ๋ฅ let test = { // ์๋ฌ๋ฐ์ print("test") return 10 }()
๐ง Q3. ์์ ํจ์๋ฅผ ์์ฑํด ๊ทธ ํจ์๋ฅผ ๋ณ์์ ํ ๋นํ๊ธฐ
- Q1์์ ์ ๊ธฐํ๋ ์๋ฌธ์ ๋ค์ ์๊ฐํด๋ณด๊ฒ ์ต๋๋ค.
๋ ๋ณ์์ ์ฐจ์ด๊ฐ ๋ฌด์์ผ๊น์? ๋ต์ print๋ฌธ์ผ๋ก ๋ ๋ณ์๋ฅผ ์ถ๋ ฅํด๋ณด๋ฉด ์ฝ๊ฒ ์ ์ ์์ต๋๋ค.
print(age) // ๋์ด๊ฐ ๋ช์ด์ ๋๊น? // 10 print(age2) // (Function)
์ฌ์ค ๊ต์ฅํ ๋น์ฐํ ์ฐจ์ด์ธ๋ฐ ์๊ฐ์ ์ฐ๊ฒฐ๊ณ ๋ฆฌ์์ ํท๊ฐ๋ ธ๋ ๋ถ๋ถ์ด ์๋ ๊ฒ ๊ฐ์ต๋๋ค. age์ ๋ชฉ์ ์ "์ ๋ฉ์๋๋ฅผ ์คํ์ํจ ๊ฒฐ๊ณผ๋ฌผ์ age๋ผ๋ Int ๋ณ์์ ๋ด์๊ฑฐ์ผ"๋ผ๋ ๊ฒ์ด๊ณ age2์ ๋ชฉ์ ์ "age2์๋ค๊ฐ ์ ํจ์ ํํ์ ํด๋ก์ ๋ฅผ ๋ด์๊ฑฐ์ผ" ์ด๊ธฐ ๋๋ฌธ์ ๊ฒฐ๊ณผ๋ฌผ์ด ํจ์๋ค! ๋ผ๊ณ ๋งํด์ฃผ๋ ๊ฒ์ด์ฃ . age2๋ฅผ ์กฐ๊ธ ๋ณํํด๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์ธ ์ ์์ต๋๋ค.
์ฆ, age2์๋ ํจ์ ์์ฒด๊ฐ ๋ค์ด์๊ธฐ ๋๋ฌธ์ ์ถ๋ ฅ ๊ฒฐ๊ณผ๊ฐ 10์ด ์๋๋ผ (ํจ์) ๋ผ๊ณ ์๋ ค์ฃผ๋ ๊ฒ์ ๋๋ค. ๋ง์ฝ ์์ ์ฝ๋์์ getAge ๋ค์ ๊ดํธ๋ฅผ ๋ถ์ธ๋ค๋ฉด ์ฐ๋ฆฌ๊ฐ ์ง๊ธ๊น์ง ์ด์ผ๊ธฐ ํ๋ ์ ์ฅ ํ๋กํผํฐ๋ฅผ ํด๋ก์ ๋ก ์ ์ํด์ฃผ๋ ๊ฒ์ด ๋๊ธฐ ๋๋ฌธ์ age2๋ ํธ์ถ๋๋ ์์ ์ ์๋๋์ด 10์ด๋ผ๋ ๊ฐ์ ๊ณ์ ๋ด๊ณ ์๋ ์ ์ฅ ํ๋กํผํฐ๊ฐ ๋ฉ๋๋ค.
var age2 = getAge() func getAge()-> Int { print("๋์ด๋ฅผ ์๋ ค์ฃผ์ธ์") return 10 } print(age2) // ๋์ด๋ฅผ ์๋ ค์ฃผ์ธ์ // 10
๋ฐ์ํ
'iOS ์ฑ๊ฐ๋ฐ > Swift Basic' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋๊ธ
๋ฐ์ํ
๊ณต์ง์ฌํญ
์ต๊ทผ์ ์ฌ๋ผ์จ ๊ธ
์ต๊ทผ์ ๋ฌ๋ฆฐ ๋๊ธ
- Total
- Today
- Yesterday
๋งํฌ
TAG
- Brackets#Stacks and Queues#Codility#Python
- ์ฟผ๋ํธ๋ฆฌ#BOJ#๋ถํ ์ ๋ณต#Python
- ํฐํ๋น์น#๋ฆฌ์ฝ#xbox#controller
- NumberofDiscIntersections#Codility#Sort#Python
- ๋ฐฑ์ค ์๊ณ ๋ฆฌ์ฆ#BackTracking
- Distinct#Codility#Python
- ํ์ด์ฌ์๊ณ ๋ฆฌ์ฆ์ธํฐ๋ทฐ#4์ฅ
- ๋๋ฌด์๋ฅด๊ธฐ#BOJ#์ด๋ถํ์#Python
- ๋ ์ง ๊ณ์ฐ#BOJ#์์ ํ์#Python
- Swift#Tuples#Range
- filter#isalnum#lower
- ์ข ์ด์๋ฅด๊ธฐ#๋ถํ ์ ๋ณต#BOJ#Python
- API#lazy#
- ๋ฐ๋ณต์์ด#๋ฐฑ์ค์๊ณ ๋ฆฌ์ฆ#Python
- ๋ณ๋ ๋์ดํธ#BOJ#ํ์๋ฒ#Python
- django
- ํ ํ๋ก์ ํธ#๋ฐฑ์ค์๊ณ ๋ฆฌ์ฆ#Python
- PassingCars#Codility#Python
- ๋ฏธ๋ก ํ์#๋ฐฑ์ค์๊ณ ๋ฆฌ์ฆ#Python
- ์ํธ์ฝ๋#dp#BOJ#Python
- ๊ณต์ ๊ธฐ ์ค์น#BOJ#์ด๋ถํ์#Python
- ๋ฐฐ์ดํฉ์น๊ธฐ#๋ถํ ์ ๋ณต#BOJ#Python
- ์ฌ์๊ฐ์#๋ฐฑ์ค์๊ณ ๋ฆฌ์ฆ#Python
- django#slicing
- ๋ฆฌ๋ชจ์ปจ#์์ ํ์#BOJ#Python
- ํ ๋งํ #๋ฐฑ์ค์๊ณ ๋ฆฌ์ฆ#Python
- Triangle#Sorting#Codility#Python
- ๋์ ์๋ฅด๊ธฐ#์ด๋ถํ์#BOJ#Python
- N์ผ๋ก ํํ#DP#Programmers#Python
- ์์ด์ฌ์ดํด#BOJ#Python
์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
๊ธ ๋ณด๊ดํจ