새소식

iOS/Swift

[Swift] 함수

  • -
참조 :  Swift 스위프트 프로그래밍 3판 Swift 5, 저자 야곰 (한빛미디어) , The Swift Programming Language Swift 5.6 Edition (iBooks)(https://books.apple.com/kr/book/the-swift-programming-language-swift-5-6/id881256329)

 

 

함수와 메서드


- 함수와 메서드는 기본적으로 같음, 상황이나 위치에 따라 다른 용어로 지칭되는 것

- 메서드 : 구조체, 클래스, 열거형 등 특정 타입에 연관되어 사용하는 함수

- 함수 : 모듈 전체에서 전역적으로 사용할 수 있는 함수

- 함수에서 소괄호(()) 생략 불가

- 재정의(override)와 중복 정의(overload) 모두 지원

 



기본적인 함수의 정의와 호출


- 함수의 이름과 매개변수(Parameter), 반환 타입(Return Type)등을 사용하여 함수 정의

- 함수를 정의하는 키워드 func, 함수 이름 지정후 매개변수는 소괄호로 감싸줌

- 반환 타입을 명시하기 전에는 ->를 사용하여 어떤타입이 반환될 것인지 명시, 반환하는 키워드는 return

- 함수 내부의 코드가 단 한 줄의 표현이고 그 표현의 결괏값의 타입이 함수 반환 타입과 같으면 return 키워드 생략 가능

 

func 함수 이름 (매개변수 ...) -> 반환 타입 {
	실행구문
	return 반환 값
}

 

 

매개변수(Parameter)


- 매개변수(Parameter) : 함수를 정의할 때 외부로 받아들이는 전달 값의 이름

- 함수에서 매개변수가 필요 없다면 매개변수 위치 공란

- 매개변수가 여러 개 필요한 함수를 정의할 때는 쉼표로 매개변수 구분
- 함수 호출 시에는 
매개변수 이름을 붙여주고 콜론(:)을 적어준 후 전달인자를 보내줌

※ 키워드는 매개변수 이름으로 사용 불가 

- 매개변수 마다 기본값을 지정 가능

- 기본값이 없는 매개변수를 기본값이 있는 매개변수 앞에 사용

→ 기본값이 없는 매개변수는 대체로 함수를 사용할 때 중요한 값을 전달할 가능성 높음

 

- 매개변수가 여러 개인 함수

 

func sayHello(myName: String, yourName: String)-> String {
	return "Hello \(yourName)! I`m \(myName)"
}

print(sayHello(myName: "kim", yourName: "Jisoo")) // Hello Jisoo! I`m Kim

 

전달인자 레이블(Argument Label)


- 전달인자 레이블(인자) : 함수를 실제로 호출할 때 전달하는 값을 의미

- 매개변수 이름과 함께 전달인자 레이블을 지정 가능

- 전달인자 레이블을 별도로 선언 → 함수 외부에서 매개변수의 역할을 좀 더 명확히 함

- 전달인자 레이블을 변경하면 함수의 이름 자체가 변경됨

- 전달인자 레이블은 함수 타입의 구성요소가 아니므로 함수 타입을 작성할 때는 전달인자 레이블 사용 불가

- 전달인자 레이블을 사용하고 싶지 않으면, 와일드카드 식별자(_) 사용 가능

 

func 함수 이름 (전달인자 레이블 매개변수 이름: 매개변수 타입, 전달인자 레이블 매개변수 이름: 
		매개변수 타입...) -> 반환타입 {
    실행구문
    return 반환 값
}

 

가변 매개변수와 입출력 매개변수


- 매개변수로 몇 개의 값이 들어올지 모를 때, 가변 매개변수 사용

- 가변 매개변수는 0개 이상의 값을 받아올 수 있으며, 가변 매개변수로 들어온 인자 값은 배열처럼 사용 가능

- 함수마다 가변 매개변수는 하나만 사용 가능

 

- 함수의 전달인자로 값을 보통 복사해서 전달하지만, 값이 아닌 참조를 전달하려면 입출력 매개변수를 사용

- C언어의 포인터와 유사

- 입출력 매개변수를 사용할 때는 함수 외부의 값에 어떤 영향을 줄지 모르기 때문에 함수형 프로그래밍 패러다임에서는 지양

- 입출력 매개변수의 전달 순서

  1. 함수를 호출할 때, 전달인자의 값을 복사
  2. 해당 전달인자의 값을 변경하면 1에서 복사한 것을 함수 내부에서 변경
  3. 함수를 반환하는 시점에 2에서 변경된 값을 원래의 매개변수에 할당

 

- 참조는 inout 매개변수로 전달될 변수 또는 상수 앞에서 앰퍼샌드(&)를 붙여 표현

- 입출력 매개변수는 매개변수의 기본값을 가질 수 없고, 가변 매개변수로 사용 불가

- 상수는 변경이 불가하므로 입출력 매개변수의 전달인자로 사용 불가

 

 

반환이 없는 함수


- 반환 값이 없는 함수는 '없음'을 의미하는 Void로 표기하거나 생략

※  Void키워드는 빈 소괄호의 묶음으로 표현 가능

 

  1. (Void) -> Void
  2. () -> Void
  3. () -> ()

 

데이터 타입으로서의 함수


- 각 함수는 매개변수 타입과 반환 타입으로 구성된 하나의 타입으로 정의 가능

 

(매개변수 타입의 나열) -> 반환 타입

 

 

중첩 함수


- 스위프트는 데이터 타입의 중첩이 자유로움

- 특별한 위치에 속해 있지 않는 한 모든 함수는 전역함수

- 전역함수가 많은 큰 프로젝트에서 전역으로 사용이 불필요한 함수들의 사용범위를 조금 더 명확하고 깔끔하게 표현

 

 

 

종료되지 않는 함수


- return 되지 않는 함수

- 정상적으로 끝나지 않는 함수 → 비 반환 함수(Nonreturning function), 비반환 매서드(Nonreturning method)

- 어디서든 호출 가능하고, guard 구문의 else 블록에서도 호출 가능

- 반환 타입을 Never로 명시

 

 

 

반환 값을 무시하는 함수


- @discardableResult 선언 속성 사용

728x90

'iOS > Swift' 카테고리의 다른 글

[Swift] 모나드  (0) 2022.09.16
[Swift] 옵셔널(Optional)  (0) 2022.09.15
[Swift] 연산자  (0) 2022.09.14
[Swift] 맵, 필터, 리듀스  (0) 2022.09.14
[Swift] regular expression  (0) 2022.09.07
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.