지겨우셨죠? 드디어 클로저 알아보기 마지막 5탄입니다.
이번 시간은 다행하게도 비교적 짧은 내용입니다.
이렇게 5개의 글로 나눠 작성하니 나중에 다시 공부하기도 좋을 것 같네요.
hiMessage를 풀어보면 String 매개변수를 받아 String 타입을 리턴하는 일반적인 함수 형태입니다.
그런데 hiMessageClosure 함수를 보면 리턴 타입이 () -> String으로 낯선 형태로 느껴집니다.
간단하게 생각해서 hiMessageClosure의 리턴 타입이 클로저라고 생각하면 쉽습니다.
리턴 부분을 보시면 -> return {"hi " + message}으로
축약된 클로저 표현식 형태임을 알 수 있어요.
hieMessageClosure를 실행시켜보면 리턴타입인 클로저 () -> String 가 반환됩니다.
hiMessageClosure(message: "오늘도 반가워 클로저야") // () -> String
여기에서 왜 () -> String가 출력되었는지 헷갈릴 수 있습니다.
간단한 test 함수와 비교하며 이해해보겠습니다.
test 함수를 보시면 () -> String 형태의 함수입니다.
test // () -> String
test() // "1"
기본으로 돌아가서 생각해보면 함수를 실행하려면 ()가 붙어야 합니다.
즉, test함수와 hiMessageClosure를 비교해보면
hiMessageClosure(message: "오늘도 반가워 클로저야") = test
hiMessageClosure(message: "오늘도 반가워 클로저야")() = test()
임을 알 수 있습니다.
그렇다면 ()를 붙여 실행해보겠습니다.
hiMessageClosure(message: "오늘도 반가워 클로저야")() // "hi 오늘도 반가워 클로저야"
예상했던 결과가 잘 나왔습니다.
클로저는 형태가 다양하고 활용이 많아서
접할 때마다 낯설고 어려운 것 같습니다.
스위프트 클로저 알아보기 1~5탄으로 정리해보았는데,
클로저 공부하시는 분들이 조금이라도 도움되셨으면 좋겠습니다.
언제나 잘못된 부분 지적 환영하니 댓글 부탁드릴게요.
감사합니다^^
'Swift 문법' 카테고리의 다른 글
Swift protocol extension 프로토콜 익스텐션 (0) | 2021.02.08 |
---|---|
swift guard let 사용하는 경우 (0) | 2020.11.17 |
스위프트 클로저 (swift closures) 알아보기 4 (0) | 2020.09.10 |
swift filter, map, reduce 스위프트 필터,맵,리듀스 이용하기! (2) | 2020.09.10 |
스위프트 타입 캐스팅 as 업캐스팅(upcasting) as! as? 다운캐스팅(downcasting) (0) | 2020.09.10 |