안녕하세요 후르륵짭짭 입니다,
이번에는 Swift에서 가장 머랄까,,, 개인적으로 가장 많은 시간을 투자한 문법입니다.
가장 이해하기 어려웠습니다.
물론 아직 보지 못한 문법들도 있으니,,, 더 어려운 것도 많겠지만, 지금 공부 한 것 중 가장 어려웠던 걸 설명할까 합니다.
** Closure **
자바에서는 람다라고 불리기도 합니다.
클로저는 그냥 함수 입니다.
하지만 가독성을 높히고 간편하게 만들었다? 를 위해서 만들었다고 생각합니다.
하지만 가독성은 잘 모르겠네요 ㅎㅎㅎㅎ
생각을 하고 읽어야하니,,, 초심자에게는 어렵습니다
** Closure Expression **
클로저의 표현 방법은 정말 다양합니다.
클로저는 아래와 같이 변수에 함수를 정의 할 수 있습니다.
let addTwoNumber : (Int, Int) -> (Int) = { (one : Int, two : Int) -> (Int) in
print("덧셈")
return one + two
}
따라서 우리가 일반적으로 변수를 정의 할 때 처럼 변수의 자료형을 정의 해주세요
정수인 두개의 변수를 받아서 정수를 반환한다. 그리고 {} 안에
함수 처럼 변수의 이름과 자료형을 모두 넣어주고 반환형을 적어주세요!
그리고 in 을 써주고
그 아래 부분에 내용을 적어주면 됩니다.
그리고 addTwoNumber(1,3) 처럼 그냥 함수 쓰듯이 사용해주면 됩니다.
그런데 코드를 보면
(Int, Int) -> Int 와 (one : Int , two : Int) -> (Int)
자료형 정의가 두번 되어 있습니다. 따라서 굉장히 길어요....
그래서 이 둘을 줄일 수 있습니다
let timesTwoNumber = { (one :Int, two :Int) -> (Int) in
print("곱셈")
return one * two
}
요렇게 앞 부분을 제거 해줄 수도 있고
let minusTwoNumber : (Int, Int) -> (Int) = { one, two in
print("뺄셈")
return max(one,two) - min(one,two)
}
이렇게 뒷 부분을 제거 해줄 수도 있씁니다
또한 저 in 이 맘에 안 들면 "$"이라는 인자를 통해서
let diviedTwoNumber : (Int, Int) -> (Int) = {
print("나눗셈")
return max($0, $1) / min($0,$1)
}
이렇게 정의 해줄 수도 있습니다 (참고로 저 return 부분도 지울 수 있습니다)
$0은 첫번째 인자를 의미하고 $1은 두번째 인자를 의미합니다. 인자는 변수라 생각하면 편합니다.
하지만 저는 저렇게 확 줄이는 것을 안 좋아합니다.
무슨 코드 인지 잘 읽기가 어려워서
가급적이면 minusTwoNumber 처럼 적는 것을 좋아합니다.
지금 까지 Closure의 표현법에 대해서 배워보았습니다.
그리고 다음에는 Complete Handler에서 배워 보고
더 나아가서 escaping Closure에 대해서 배워보도록 하겠습니다.
** 전체 코드 **
'Xcode > Swift - PlayGround' 카테고리의 다른 글
PlayGround) Struct 와 Class의 차이 그리고 Protocol (1) | 2020.07.23 |
---|---|
PlayGround) SQLite를 이용하여 데이터를 저장하자! (0) | 2020.07.18 |
PlayGround) Closure에 대해서 알아보자 2부 (nonEscaping) (0) | 2020.07.17 |
PlayGround) Delegate에 대해서 알아보자 (0) | 2020.07.04 |
PlayGround) URL을 통해 GET&POST HTTP 통신 알아가기 (5) | 2020.06.30 |
댓글