특정 작업 또는 기능을 수행하는 코드 블록을 함수라 부르며, func
키워드를 사용하여 함수를 정의하고 사용할 수 있습니다.
특정 클래스, 구조체, 열거형 내의 함수를 메서드라고 부릅니다. (함수를 정의한 위치에 따라 함수를 메서드라 부를 수도 있습니다.)
(즉, 클래스 안에서 함수를 선언하면 해당 함수를 메서드라고 부른다.)
✅ 반환 값이 없는 경우
func 함수명(){ //실행할 코드 } 함수명() // 함수 실행
✅ 반환 값이 있는 경우
func 함수명(파라미터: 파라미터 타입, 파라미터: 파라미터 타입,...) -> 반환 타입{ //함수 코드 } 함수명(파라미터: 아규먼트, 파라미터: 아규먼트) //함수 실행
func add1(x: Int, y: Int) -> Int{ return x+y } func add2(x: Int, y: Int) -> Int{ let sum = x + y //함수 내부에 변수(상수)를 선언해서 사용할 수 있다. return sum } print(add1(x: 1, y: 0)) print(add2(x: 2, y: 0)) /* 출력 결과 1 2 */
✅ 내/외부 파라미터를 같이 사용하는 방법
내부 파라미터: 함수 내부에서 사용하는 파라미터
외부 파라미터: 함수 외부에서 사용하는 파라미터func add(x: Int, y: Int) -> Int{ return x + y } print(add(x: 2, y: 0))
✅ 내/외부 파라미터를 각각 사용하는 방법
파라미터의 이름을 내/외부로 각각 선언하여 사용하는 방식으로 함수 외부에서만 사용할 수 있는 Argument Label을 선언하여 사용합니다.
func add(A x: Int,B y: Int) -> Int{ // Argument Label: A, B return x + y } print(add(A: 2, B: 0))
✅ 밑줄( _ )을 사용하여 외부 파라미터를 생략하는 방법 (추천 X)
func add(_ x: Int, _ y: Int) -> Int{ return x+y } print(add(10, 20))
✅ 첫 번째 외부 파라미터명만 생략하는 방법 (Object-C 언어의 호출 방식)
func add(_ x: Int, with y: Int) -> Int{ return x+y } print(add(10, with: 20))
Swift에서 함수는 사용의 목적과 때에 따라 다양한 형태로 함수를 정의할 수 있습니다.
그중에서 파라미터와 아규먼트의 형태에 따라 정의될 수 있는 함수가 있습니다.
함수가 지정된 데이터 타입으로 0개 또는 그 이상의 파라미터를 받는다는 것을 가리키기 위해서 세 개의 점(...)을 이용하여 선언하는 방식의 파라미터입니다.
var sum = 0 func add(num: Int...) -> Int{ for i in num{ sum = sum + i } return sum } print(add(num: 1, 2, 3, 4)) /* 출력 결과 10 */
인수(argument)로 전달하는 값이 없는 경우, 기본값으로 설정한 파라미터를 사용하는 방식의 파라미터입니다.
func name(firtName: String = "아무개", lastName: String) -> String{ return ("성 = \(lastName), 이름 = \(firtName)") } print(name(lastName: "김")) //전달하는 값이 없으면 디폴트 값으로 대체 /* 출력 결과 성 = 김, 이름 = 아무개 */
Swift는 기본적으로 call by value이지만, inout 키워드를 사용하여 call by reference를 구현할 수 있습니다.
즉, 스택(Stack) 영역에 접근하는 방식이 아닌 힙(Heap) 영역에 접근하는 방식
(파라미터 주소의 값 자체를 변경하여 코드 실행 후 실행된 값이 유지됩니다.)
var x = 10 func aaa(value: inout Int) -> Int{ value = value + value return value } print(x) print(aaa(value: &x)) print(x) /* 출력 결과 10 20 20 */