본문 바로가기
Languages/Swift

사당 iOS 스터디 1주차 - 함수

by 탄이. 2018. 7. 23.





__7.1 함수와 메서드

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

모듈 전체에서 전역적으로 사용할 수 있는 함수를 그냥 함수

__7.2 함수의 정의와 호출

스위프트의 함수는 재정의(오버라이드)와 중복 정의(오버로드)를 모두 지원

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

  • 매개변수

    • 함수를 정의할 때 외부로부터 받아들이는 전달 값의 이름

        • hello(name: “Jenny”)

  • 전달인자

    • 전달인자(Argument), 혹은 인자는 함수를 실제로 호출할 때 전달하는 값

        • hello(name: “Jenny”)

7.2.2 매개변수

  • 함수를 호출할 때, 매개변수 이름을 붙여주고 콜론(:)을 적어준 후 전달인자를 보내준다

  • 매개변수 이름과 전달인자 레이블

    • 매개변수 이름(Parameter Name)

      • 호출 시에 매개변수에 붙이는 이름

    • 전달인자 레이블(Argument Label)

      • 전달인자 레이블을 별도로 지정하면 함수 외부에서 매개변수의 역할을 좀 더 명확히 할 수 있습니다.

    • 전달인자 레이블만 다르게 써주더라도 함수 중복 정의(오버로드)로 동작할 수 있습니다.

  • 매개변수 기본값

    • 스위프트의 함수에서는 매개변수마다 기본값을 지정할 수 있습니다.

    • 즉, 매개변수가 전달되지 않으면 기본값을 사용합니다.

7.2.4 데이터 타입으로서의 함수

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

    • 가변 매개변수

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

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

      • 함수마다 가변 매개변수는 하나만 가질 수 있습니다.

    • 입출력 매개변수

      • 함수의 전달인자로 값을 전달할 때는 보통 값을 복사해서 전달합니다. 값이 아닌 참조를 전달하려면 입출력 매개변수를 사용

      • 값 타입 데이터의 참조를 전달인자로 보내면 함수 내부에서 참조하여 원래 값을 변경합니다,

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

          1. 함수를 호출할 때, 전달인자의 값을 복사합니다.

          1. 해당 전달인자의 값을 변경하면 1에서 복사한 것을 함수 내부에서 변경합니다.

          1. 함수를 반환하는 시점에 2에서 변경된 값을 원래의 매개변수에 할당합니다.

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

      • 입출력 매개변수는 매개변수 기본값을 가질 수 없으며, 가변 매개변수로 사용될 수 없습니다.

      • 상수는 변경될 수 없으므로 입출력 매개변수의 전달인자로 사용될 수 없습니다.

  • 함수를 하나의 데이터 타입으로 나타내는 방법

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

  • 함수 타입의 사용

    • 함수를 데이터 타입으로 사용할 수 있다는 것은 함수를 전달인자로 받을 수도, 반환 값으로 돌려줄 수도 있다는 의미입니다.

    • 상황에 맞는 함수를 전달인자로 넘겨 적절히 처리할 수도 있으며 상황에 맞는 함수를 반환해주는 것도 가능하다는 뜻

7.2.3 반환 타입

__7.3 중첩 함수

함수 안의 함수로 구현된 중첩 함수는 상위 함수의 몸통 블록 내부에서만 함수를 사용할 수 있습니다.

__7.4 종료되지 않는 함수

종료(return)되지 않는다는 의미는 정상적으로 끝나지 않는 함수라는 뜻

  • 비반환 함수(메서드)

    • 비반환 함수 안에서는 오류를 던진다던가, 중대한 시스템 오류를 보고하는 등의 일을 하고 프로세스를 종료

    • 반환 타입을 Never라고 명시해주면 됩니다.

__7.5 반환 값을 무시할 수 있는 함수

함수의 반환 값을 무시해도 된다는 @discardableResult 선언 속성을 사용



댓글