function
함수(function)는 프로그램의 가장 작은 단위이자 하나의 작은 프로그램이다. 함수를 사용하는 데에는 크게 두가지 이유가 있다. 첫번째는 작업단위의 모듈화. 두번째는 재사용의 용이성이다.
함수는 미리 정의한 뒤, 호출을 통해서 사용할 수 있다. 다음은 함수의 정의 표현이다.
func 함수이름 (매개변수:자료형 ... ) -> 리턴타입 {
실행구문
return 반환값
}
매개변수에는 자료형을 명시해야하며 함수에 매개변수, 리턴타입이 없다면 생략이 가능하다. 다음은 함수의 호출형식이다.
함수명(인수1, 인수2, ... )
변수 = 함수명(인수1, 인수2, ... )
함수의 호출 시 인수의 순서는 바뀌면 안되며 반드시 함수의 매개변수에 맞게 인수를 적어야한다.
//함수정의
func fn_1(aa:Int, bnbn bb:String) -> Int{
print("fn_1() 실행1 \(aa)") //함수실행코드
print("fn_1() 실행2 \(bb)") //매개변수는 지역변수로 활용된다.
print("fn_1() 실행3")
return 1234 //리턴
}
var rr = fn_1(aa:10, bnbn:"아기상어") //함수호출
print("rr: \(rr)") //리턴 값 확인
fn_1()함수에 매개변수를 보면 bnbn bb : String이라 되어있다. 스위프트의 함수가 다른언어들과의 차이점이 매개변수와 인수를 따로 구분한다는 점이다. bnbn은 인수, 즉 외부에서 호출 시의 매개변수를 부르는 이름이다. 반대로 함수 내부에서는 bnbn이 아닌 bb로 사용해야 매개변수로서 접근이 가능하다. 코딩시 영어문장처럼 흘러가도록 하기위해 이와 같이 매개변수와 인수를 따로 구분하는 것으로 알고있다. 해당 문법이 불편하면 매개변수만 적게되으면 된다. 인수와 매개변수를 통일하여 사용 할 수 있다.
fn_1(aa: 20, bnbn: "아빠상어");
fn_1(aa: 678, bnbn: "엄마상어")
fn_1(aa: 1920, bnbn: "할머니상어")
이와 같이 함수를 사용하게 되면 반복작업을 손쉽게 처리할 수 있다.
label 생략
label(인수)은 생략이 가능하다. 인수명을 언더바로 적으면 호출 시에 인수명을 따로 적지 않고 바로 입력하여 함수를 호출 할 수 있다.
func fn_1(name:String, age:Int, marriage:Bool){
print("fn_1() name:\(name), age:\(age), marriage:\(marriage)")
}
func fn_2(_ name:String, aa age:Int, mm marriage:Bool){
print("fn_2() name:\(name), age:\(age), marriage:\(marriage)")
}
func fn_3(_ name:String, _ age:Int, _ marriage:Bool){
print("fn_3() name:\(name), age:\(age), marriage:\(marriage)")
}
//fn_1(name: "정우성", marriage: false, age: 51) //인수의 순서는 바꾸면 안된다.
fn_1(name: "정우성", age: 51, marriage: false) //스위프트의 함수는 호출 시 인수(label)를 적어야 한다.
fn_2("정좌성", aa:51, mm:false) //인수(label)를 언더바(_)로 생략처리하면 인수를 적으면 안된다.
fn_3("정남성", 51, false)
func 예제
정수형 배열을 매개변수로 받아 그 중 가장 작은 값을 반환하는 함수를 작성해보았다.
func minGo(arr:[Int]) -> Int{
var res = arr[0] //매개변수로 배열의 첫번째 요소를 res변수에 담는다.
for i in arr{
if res > i {
res = i //res의 값보다 더 작은 값의 요소를 찾으면 res에 대입한다.
}
}
return res //res값을 반환한다.
}
var res = minGo(arr: [34,56,7,12,4,98,23,167,11])
print("res:",res)
'iOS > TJ' 카테고리의 다른 글
day12_funcVariable, selfCall, class (0) | 2021.06.29 |
---|---|
day11_param, return, funcCall (0) | 2021.06.18 |
day09_dictionary, set (0) | 2021.06.16 |
day08_multiArray, tuple (0) | 2021.06.03 |
day07_array (0) | 2021.06.02 |