짧은인사, 하루의 사건, 나의 행동
안녕하세요~ 오늘부터 배운것을 조금씩이나마 깔짝 해보겠습니다..ㅎㅎ
하루하루 계획없이 시간만 보내던중 되돌아보니 시간이 엄청 흘러있던거 있죠,,
되돌아보니 이런 아이가 커서 뭐가될지 참...
백수가 운동을 하면 하루를 알차게 보냈다는 착각을 하게돼서 하루의 의미있는 시간은 운동밖에 없다죠..
지금 제가 그렇습니다.. 운동을 하고와서 얼마나 의미없게 보냈는지..
여러분도 착각에 빠지지 마시길....(참 저 백수아님.. 대학 막학기지만 온라인 강의로인해 집에만 있습니다 ^^)
배운점
오늘은 Swift Document를 읽었습니다. 원문은 단어를 계속찾아야 하고... 번역기의 노예가 된 느낌이니 한글 번역 문서를 읽었습니다 ㅎ
https://bbiguduk.gitbook.io/swift/language-guide-1/closures
클로저 (Closures) - Swift
다음은 Int 값의 배열을 String 값의 배열로 변환하기 위해 후행 클로저와 map(_:) 메서드를 어떻게 사용하는지 나타냅니다. 배열 [16, 58, 510] 은 새로운 배열 ["OneSix", "FiveEight", "FiveOneZero"] 을 생성하는
bbiguduk.gitbook.io
바로 클로저에 대해 알아봤습니다!!
문서에서의 클로저 정의는 명명된 함수 생성없이 실행되는 코드 그룹입니다. 라고 하더군요
이는 함수 또한 클로저를 의미합니다.
클로저는 코드에서 주변에 전달과 사용할 수 있는 자체 포함된 기능 블럭입니다. 한마디로 코드의 블럭이군요!
이렇게 클로저를 알기 전에 알고있어야하는 내용이 있었어요. 바로 일급 객체(일급 시민)입니다.
일급 객체란 다른 객체들에 일반적으로 적용 가능한 연산을 모두 지원하는 객체를 가르킵니다.
일급 객체는 아래의 조건을 만족 시켜야 합니다.
- 함수의 실질적인 매개변수가 될 수 있다.
- 함수의 반환값이 될 수 있다.
- 할당의 대상이 될 수 있다.
- 비교연산을 적용할 수 있다. (Swift는 권장하지 않습니다.)
클로저 표현식
중첩 함수 (Nested Functions) 에서 소개된 중첩 함수는 더 큰 함수에 부분으로 자체 포함된 코드 블럭의 이름을 지정하고 정의하기 편리한 수단입니다. 그러나 완전한 선언과 이름없이 함수와 유사한 구조의 짧은 버전을 작성하는 것이 때때로 유용합니다. 함수를 하나 이상의 인수로 사용하는 함수 또는 메서드로 작업할 때 특히 그렇습니다.
위의 글을 읽다 중첩 함수 부분을 다시 읽었습니다,,,
func chooseStepFunction(backward: Bool) -> (Int) -> Int {
func stepForward(input: Int) -> Int { return input + 1 }
func stepBackward(input: Int) -> Int { return input - 1 }
return backward ? stepBackward : stepForward
}
var currentValue = -4
let moveNearerToZero = chooseStepFunction(backward: currentValue > 0)
// moveNearerToZero now refers to the nested stepForward() function
while currentValue != 0 {
print("\(currentValue)... ")
currentValue = moveNearerToZero(currentValue)
}
print("zero!")
// -4...
// -3...
// -2...
// -1...
// zero!
chooseStepFunction의 함수내부의 stopForward, stopForward의 중첩함수를 정의하여 호출을 하고있습니다!
Bool값으로 앞으로갈지 뒤로갈지 리턴하고 있습니다.
중첩함수도 편리한 수단이지만, 완전한 선언과 이름없이 함수와 유사한 구조의 짧은 버전을 작성하는 것이 때때로 유용합니다!!
클로저 표현식은 명확성이나 의도를 잃지 않고, 짧은 형태로 클로저를 작성하기위해 구문최적화를 제공한다고 합니다.
여기서 sorted(by: )라는 예제를 보여주고 있습니다.
sorted(by: )는 첫번째 값이 두번째 값의 앞또는 뒤에 표시되어야 하는지 여부를 Bool값으로 반환합니다.
첫번째값이 더 큰경우 True, 두번째값이 더 큰경우 False
let names = ["Chris", "Alex", "Ewa", "Barry", "Daniella"]
func backward(_ s1: String, _ s2: String) -> Bool {
return s1 > s2
}
var reversedNames = names.sorted(by: backward)
// reversedNames is equal to ["Ewa", "Daniella", "Chris", "Barry", "Alex"]
backward를 통해 첫번째값이 두번째값보다 커야한다고 알려주고있군요.
클로저 표현구
{ (<#parameters#>) -> <#return type#> in
<#statements#>
}
클로저 표현구의 파라미터는 in-out 파라미터 일 수 있지만 기본값을 가질수 없다 합니다!
//backward(_:_:)의 클로저 표현
reversedNames = names.sorted(by: { (s1: String, s2: String) -> Bool in
return s1 > s2
})
클로저로 표현한다면 더욱 짧게 표현할 수 있습니다!
컨텍스트 타입 추론
sorted(by:)의 메서드는 (String, String) -> Bool 타입의 함수여야 합니다. 따라서 (String, String) 과 Bool 타입은 타입추론으로 인해 작성할 필요가 없습니다! 따라서 ->와 파라미터 이름을 둘러싼 소괄호를 생략할 수 있습니다.
reversedNames = names.sorted(by: { s1, s2 in return s1 > s2 } )
단일 표현 클로저의 암시적 변환
단일 표현 클로저는 return키워드를 생략 할 수 있습니다. (마지막 줄을 return으로 인지)
reversedNames = names.sorted(by: { s1, s2 in s1 > s2 } )
짧은 인수 이름
swift는 클로저에 $0, $1, $2... 등 클로저의 인수값으로 참조할 수 있습니다!
클로저의 표현식이 본문으로 전체가 구성되기 때문에 in 키워드를 생략 할 수 있습니다!
reversedNames = names.sorted(by: { $0 > $1 } )
$0과 $1은 클로저의 첫번째와 두번째 String인수를 참조합니다.
연산자 메서드
Swift의 String타입은 (>)의 문자열 별 구현을 String타입의 파라미터 2개가 있는 메서드로 정의하고, Bool을 반환합니다.
(흠 더욱 짧게 표현 할 수 있겠군요.)
reversedNames = names.sorted(by: >)
오늘은 여기까지...
생각, 감정
swift문법을 찍먹후 다시공부하는 저에겐 클로저는 새롭더라구요. $0 $1 , 코드줄이기 대충생각하고 아~ 그런가보다~ 하고 넘어갔지만 깊게 파고들수록 열심히 해야겠다는 생각이 드네요..
앞으로의 계획
클로저의 연산자 메서드에서 새로운 파도타기를 추천해줘 연산자 메서드 (Operator Method)도 공부해봐야 겠군요! 그리고 남은 뒷부분(후행클로저)을 열심히....하도록~~~~~~~~ 하자!
(내일 알라딘에서 산 책이 오니 조금씩 읽어보자 ㅎㅎ 아 애플아카데미 붙고 싶은것.....ㅜㅜ)
다시는 게을러 지지 않는 내가 되도록 하자,, 화이팅~~
1급 객체(first-class object)란?
일급 객체라는 말이 요새는 많이 보편화가 된 것 같습니다. 제가 이 말을 처음 들었던 건 자바스크립트에서였는데, 단순히 자바스크립트에 국한된 개념은 아니더군요. 프로그래밍 언어론 수업
jcsoohwancho.github.io
[Swift] 일급 객체(First-class citizen)
안녕하세요~ 차니에요! 오늘은 1급 객체에 대해 알아볼게요. Swift의 함수가 일급 객체이므로 Swift로 진행하겠습니다! 1. 일급 객체란? 컴퓨터 프로그래밍 언어 디자인에서, 일급 객체(영어: first-cla
dvlpr-chan.tistory.com
Swift의 Closure | Hohyeon Moon
Swift의 핵심 개념인 Closure에 대해 알아봅니다
www.hohyeonmoon.com
일급 객체(First Class Object)란?
자바스크립트를 공부하다보면 라는 말을 한 번쯤은 들어보았을 것이다. 이번에는 그 가 무엇인지에 대해서 정리해보고자 한다. 일급 객체(1급객체, First Class Object) 일급객체에 대한 정의이다. >
velog.io
'TIL' 카테고리의 다른 글
TIL_20230921 (0) | 2023.09.21 |
---|---|
TIL_20230918 (0) | 2023.09.18 |
TIL_20230914 (0) | 2023.09.14 |
TIL_20230913 (0) | 2023.09.13 |
TIL_20230912 (0) | 2023.09.12 |