Roel Notebook

[Swift] Functions

by Roel Downey
728x90
반응형

공부하고 정리할 내용

- 함수 (Functions)와 메서드

- 함수의 정의와 호출

 

함수 대부분은 작업의 가장 작은 단위이자 하나의 작은 프로그램이기도 하다. 하나의 프로그램은 하나의 큰 함수이다. 라는 말이 있듯이, 함수는 프로그램을 이루는 주된 요소 중 하나이다. Swift에서 함수는 일급 객체이기 때문에 하나의 값으로도 사용할 수 있다.

앞으로 설명하겠지만 Swift에서 함수는 다른 언어보다 훨씬 다양한 모습으로 존재하며, 코딩 스타일도 여러가지 이다. 따라서 규칙을 만들고 함수를 사용해야 한다.

 

함수 (Functions) 메서드

함수와 메서드는 기본적으로 같다. 다만 상황이나 위치에 따라 다른 용어로 부르는 것뿐이다.

구조체, 클래스, 열거형 등 특정 타입에 연관되어 사용하는 함수를 메서드, 모듈 전체에서 전역적으로 사용할 수 있는 함수를 함수 라고 부른다. 즉, 함수가 위치하거나 사용되는 범위 등에 따라 호칭이 달라질 뿐, 함수라는 것 자체에는 변함이 없다.

 

함수의 정의와 호출

Swift의 함수는 재정의(오버라이드)와 중복 정의(오버로드)를 모두 지원한다. 따라서 매개변수의 타입이 다르면 같은 이름의 함수를 여러 개 만들 수 있고, 매개변수의 개수가 달라도 같은 이름의 함수를 만들 수 있다. 그렇기 때문에 예제 중간중간 이름이 같은 함수를 구현해도 오류가 발생하지 않는다.

 

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

Swift 함수는 자유도가 굉장히 높은 문법 중 하나이다. 기본으로 함수의 이름과 매개변수(Parameter), 반환 타입(Return Type) 등을 사용하여 함수를 정의한다.

함수를 정의하는 키워드는 func 이다. 함수 이름을 지정해준 후 매개변수는 소괄호 () 로 감싸준다. 반환타입을 명시하기 전에는 -> 를 사용하여 어떤 타입이 반환될 것인지 명시해준다. 반환을 위한 키워드는 return 이다. 

 

함수의 정의

func functionName ( Parameters: ParametersType ) -> ReturnType {

    실행구문

    return 반환 값

}

(GrayItalicFont로 작성된 요소는 실제 값으로 바꿔야 하는 요소이다.)

 

기본 형태의 함수 정의와 사용 

 

 

매개변수(Parameter)와 전달인자(Argument)
매개변수는 함수를 정의할 때 외부로부터 받아들이는 전달 값의 이름을 의미한다. 전달인자, 혹은 인자는 함수를 실제로 호출할 때 전달하는 값을 의미한다. 예를 들어 위의 코드에서 매개변수는 str 이고, 전달인자는 "Cony" 이다.

 

매개변수(Parameter)가 없는 함수

 

 

매개변수(Parameter)가 여러 개인 함수

 

 

반환 값이 없는 함수

 

 

반환 값이 여러 개인 함수

 

 

함수를 데이터 타입으로 사용하는 예

함수를 데이터 타입으로 사용할 수 있다는 것은 함수를 전달 인자로 받을 수도, 반환 값으로 돌려줄 수도 있다는 의미이다. 상황에 맞는 함수를 반환해주는 것도 가능하다는 뜻이다. 이는 Swift의 함수가 일급 객체이기 때문에 가능한 일이다.

 

 

위의 코드는 먼저 두 Int 값을 입력받아 계산 후 Int 값을 돌려주는 형태의 함수를 

CalculateTwoInts라는 별칭으로 지었다. 그리고 addTwoInts(_:_:)라는 간단한 함수를 만들었다. 함수는 변수 mathFunction에 할당되거나 mathFunction이라는 이름으로 호출할 수도 있다. 또 아래의 코드처럼 전달인자로 함수를 넘겨줄 수도 있다.

 

 

매개변수 기본 값

Swift의 함수에서는 매개변수마다 기본값을 지정할 수 있다. 즉, 매개변수가 전달되지 않으면 기본값을 사용한다. 매개변수 기본값이 있는 함수는 함수를 중복 정의한 것처럼 사용할 수 있다.

 

 

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

매개변수로 몇 개의 값이 들어올지 모를 때, 가변 매개변수를 사용할 수 있다. 가변 매개변수는 0개 이상(0개 포함)의 값을 받아올 수 있으며, 가변 매개변수로 들어온 인자 값은 배열처럼 사용할 수 있다.

 

 

[참고 링크]

Apple Developer: [Functions]

728x90
반응형

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

[Swift] Structure And Class  (0) 2019.07.17
[Swift] Enumerations  (0) 2019.07.16
[Swift] Optional  (0) 2019.07.12
[Swift] Collection [ 간단하게 정리하기]  (0) 2019.07.12
[Swift] Array  (0) 2019.07.10

블로그의 정보

What doing?

Roel Downey

활동하기