not bad 한 개발

Swift - closure(클로저) 본문

Swift

Swift - closure(클로저)

leebean 2021. 10. 9. 15:26

(인덕대학교 컴퓨터소프트웨어학과 iOS프로그래밍기초(21-2학기)한성현 교수님 강의 내용을 변형 및 요약 했습니다.)

 

https://medium.com/@jgj455/%EC%98%A4%EB%8A%98%EC%9D%98-swift-%EC%83%81%EC%8B%9D-closure-aa401f76b7ce

(위의 내용을 참조했습니다.)

 

closuer(클로저)

  •  사용자의 코드안에서 전달되어 사용할 수 있는 로직을 가진 중괄호“{}”로 구분된 코드의 블럭으로 일급객체의 역할이 가능합니다.
  • 전달 인자로 보낼 수 있고, 변수/상수 등으로 저장하거나 전달할 수 있으며, 함수의 반환 값이 될 수도 있습니다.
  • 참조 타입입니다.

클로저 표현식

  • 클로저 표현식은 독립적인 코드 블록입니다.
  • 매개변수를 받거나, 값을 반환하도록 만들 수도 있습니다.

trailing closure(후행 클로저)

  • 클로저가 함수의 마지막 argument라면 마지막 매개변수 이름을 생략한 후 함수 소괄호 외부에 클로저를 구현합니다.

 

(클로저 사용 예제 1)

let miner = {(num1 :Int , num2 :Int )->Int in
	return (num1 -num2 )
}
//print(miner(num1:20, num2:10))
print (miner (20 ,10 ))
print (type (of :miner ))
// 첫 번째 print는 10이 나옵니다.
// 두 번째 print는 (Int, Int) -> Int이 출력됩니다.
// let miner의 타입은 (Int, Int) -> Int 타입 입니다.

 

(클로저 사용 예제 2)

let multi = {(num1 :Int , num2 :Int )->Int in
	return num1 * num2
}
let Result = multi (20 ,20 )
print (Result )
// 400이 출력됩니다.

 

(클로저 축약 표현들)

let multi = {(num1 :Int , num2 :Int )->Int in
	return num1 * num2
}
let add = {(num1 :Int , num2 :Int )->Int in
	return num1 + num2
}
func calculator (num1 :Int , num2 :Int , cal :(Int ,Int )->Int )->Int {
	return cal (num1 ,num2 )
}
var result = multi (20 ,30 )
print (result ) //1
result = add(20 ,30 )
print (result ) //2
result = calculator(num1 :20 , num2 :30 ){(var1 :Int , var2 :Int )->Int in
	return var1 + var2
}// trailing closure
//이름(cal:)을 생략한경우 함수 소괄호 외부에 클로저를 구현합니다.
print (result )//3
 
result = calculator(num1 :20 , num2 :30 , cal :{(var1 :Int , var2 :Int )in
	return var1 + var2
})//리턴형을 생략합니다.
print (result )//4
result = calculator(num1 :20 , num2 :30 ){(var1 :Int , var2 :Int )in
	return var1 + var2
}// trailing closure, 리턴형을 생략합니다.
print (result )//5
 
result = calculator(num1 :20 , num2 :30 , cal :{
	return $0 + $1
})//매개변수 생략하고 단축인자(shorthand argument name)사용
print (result )//6
result = calculator(num1 :10 , num2 :20 ){
	return $0 + $1
}//trailing closure, 매개변수 생략하고 단축인자사용
print (result )//7
 
result = calculator(num1 :10 , num2 :20 , cal :{
 	$0 + $1
})//클로저에 리턴값이 있으면 마지막줄을 자동으로 리턴하기 때문에 return을 생략합니다. 
print (result )//8
result = calculator(num1 :10 , num2 :20 ){
	 $0 + $1
}
print (result )//9

//1 번째 print결과 : 600
//2 번째 print결과 : 50
//3 번째 print결과 : 50
//4 번째 print결과 : 50
//5 번째 print결과 : 50
//6 번째 print결과 : 50
//7 번째 print결과 : 30
//8 번째 print결과 : 30
//9 번째 print결과 : 30
Comments