xxo' TIL/WIL

IOS/Swift

[Swift] 함수(Function)

xxoxec 2025. 6. 19. 14:43
함수는 특정 태스크 작업을 수행하는 코드 블록입니다. 함수를 사용하면 코드의 재사용성과 가독성을 높일 수 있습니다. Swift에서는 함수의 정의, 호출, 매개변수와 반환값 등을 통해 다양한 기능을 구현할 수 있습니다.

 

https://docs.swift.org/swift-book/documentation/the-swift-programming-language/functions/

 

Documentation

 

docs.swift.org

 

함수(Function) 정의 : 함수는 특정 작업을 수행하기 위해 함께 구성된 일련의 명령문 또는 코드의 묶음이다.

함수는 입력값을 받아 처리하고, 그 결과를 출력값으로 반환할 수 있다. 그리고 그 안에 정의된 코드를 실행하는 역할을 한다. 함수는 여러 번 사용될 수 있기 때문에, 반복 코드를 줄이고 코드의 재사용성을 높이는데 유용하다.

반복문과 비슷한 면이 있지만, 특정 동작을 반복하는 반복문과 달리 특정 동작을 정의하고 필요할 때마다 호출하여 사용한다.

즉 코드 블록을 수행하기 위해서 이름을 붙이고, 이것을 호출해서 해당 코드를 수행한다.

  • 여러 곳에서 재사용 가능하며, DRY (Don’t Repeat Yourself)
func 함수이름(매개변수이름: 매개변수타입) -> 반환타입 {
    // 함수가 수행할 작업
    return 반환값
}
// 반환값이 없는 함수
func 함수이름(매개변수이름: 매개변수타입, 매개변수1이름: 매개변수1타입 ... ) -> Void {
	// 함수 구현부
   return
}
// 매개변수와 반환값이 없는 함수
func 함수이름() -> 반환타입 {
	// 함수 구현부
    return 반환값
}
// 기본값을 갖는 매개변수는 매개변수 목록 중 뒤쪽에 위치하는 것이 좋음
func 함수이름(매개변수이름: 매개변수타입, 매개변수1이름: 매개변수1타입 = 매개변수 기본값 ... ) -> 반환타입 {
	// 함수 구현부
    return 반환값
}

 

함수(Function) 작성 : 함수를 선언할 때는 가장 앞에 func 키워드를 붙이고 (person: String) 파라미터와 형 그리고 -> String 형태로 반환형을 정의한다. 즉 func키워드를 사용해서 선언 후 () 안에 인자를 받을 수 있게 만들 수도 있고, 반환되는 값이 있는 경우 -> 을 이용해서 반환 타입을 선언한다.

  • 함수의 구성요소
    • 함수 이름(필수)
    • 인풋(선택)
    • 아웃풋(선택)
  • <함수이름>() 을 통해서 실제 함수를 수행 시킨다.

greet 함수는 name 이라는 문자열 매개변수를 받아 "Hello, (name)!" 형식의 인사말을 반환, greet(name: "xxo") 를 호출하면 "Hello, xxo!" 반환되고 출력

  • func : 함수 정의를 시작하는 키워드.
  • greet(name: String) : 함수 이름과 매개변수의 정의. name은 함수가 받을 입력값이고, String은 해당 입력값의 타입.
  • -> String : 반환타입. String 타입의 값을 반환.
  • return : 함수 내에서 반환값을 지정하는 키워드.

<함수이름>() 을 통해서 함수 수행

전달인자 레이블 : 함수를 호출할 때 매개변수의 역할을 좀 더 명확하게 하거나 함수 사용자의 입장에서 표현하고자 할 때 사용

func 함수이름(전달인자 레이블 매개변수이름: 매개변수타입, 매개변수1이름: 매개변수1타입 = 매개변수 기본값 ... ) -> 반환타입 {
// 함수 구현부
    return 반환값
}

함수 내부에서 전달인자 사용 시 매개변수 이름을 사용하고 함수를 호출할 때는 전달인자 레이블을 사용

가변 매개변수 : 전달받을 값의 개수를 알기 어려울 때 사용 가능, 가변 매개변수는 함수당 하나만 가질 수 있다. 점(...) 띄어쓰기 주의.

func 함수이름(전달인자 레이블 매개변수이름: 매개변수타입, 매개변수1이름: 매개변수1타입 = 매개변수 기본값...) -> 반환타입 {
// 함수 구현부
    return 반환값
}

맨 뒤에 위치하는 것이 좋고 여러개의 전달 값을 받을 수 있다. 가변인자에 아무값도 넘기고 싶지 않으면 전달 인자 레이블 생략 가능
전달 인자가 없거나 nil일 경우 오류 발생
구구단의 단을 프린트 하는 함수 > 단을 넣으면 해당 내용 출력
주사위 랜덤 함수 > 1~6 사이에 있는 값 중 랜덤으로 하나의 수를 반환

 

input parameter 받기 : 함수는 필요한 데이터를 받을 수 있음. 넘겨받을 인풋에 대해서, 이름과 타입을 정해줘야 하며 () 안에 필요한 인자들을 정의해야 한다.

넘겨받을 인풋에 대해, 이름과 타입을 지정해줘야함

 

output 값 반환하기 : 함수는 데이터를 반환할 수 있고, 반환할 아웃풋에 대해 타입을 정해줘야 한다.

함수 내부에서는 return 키워드를 통해서 아웃풋을 반환시킨다.

반환할 아웃풋에 타입을 정해주고, 함수 내부에 return 키워드를 통해 아웃풋 반환시킴

 

input parameter label : 앞서서 input parameter의 이름을 정해주었으므로 parameter를 호출하는 외부, 내부 관점에서 보았을 때 이름을 다르게 하는 것이 더 자연스러울 때가 있다. 

  • 결국 코드는 가독성을 높여, 동료 개발자들이 이해해기 쉬워야 하기 때문.
  • 앞서 만들었던 printName의 경우 호출 시 어색함이 있으므로 개선

printName(name: "xxo"), name이 중복으로 들어간 느낌이라 예제로 해당 함수를 개선

 

default parameter : 파라미터에 기본값을 설정해 줄 수도 있음. default 케이스에 대해서는 코드를 줄여서 심플하게 표현가능 

파라미터에 기본값을 설정, 코드를 줄여서 심플하게 표현

 

variadic function : 정해지지 않은 수의 여러 파라미터를 받을 수 있은 형태의 함수를 의미한다.

대표적으로 print() 함수가 있고, 함수 내부적으로 이렇게 받은 파라미터를 배열의 형태로 받음.

여러  파라미터를 받을수 있은 형태의 함수를 의미

 

throwing function : 함수 수행 간에 예외 상황이 일어날 수 있다.

따라서, 제대로 함수를 수행할 수 없는 경우 Error을 내보내게 됨 > 예를 들어, 잘못된 인풋, 네트워크 끊김 등

throws 키워드를 이용해서 만들 수 있고, throws 가 있는 함수는 try를 이용해 호출하고, do-catch를 이용해 에러 감지를 할 수 있음

throws 키워드를 이용해서 만들수 있고, throws 가 있는 함수는 try 를 이용해 호출하고, do-catch  를 이용해 에러 감지

 

in-out parameter : 함수에서 넘겨받는 input parameter는 constant이다. 따라서 값을 변경할 수 없다.

inout을 이용하면 변경 가능하며, 원래 오리지널 값도 변경이 된다.

inout을 이용하면 변경 가능하며, 원래 오리지널 값도 변경이 된다.

 

함수를 사용하는 이유는 다양하다. 그중

  • 코드 재사용성 : 동일한 코드를 여러 번 쓰지 않고 함수로 정의해 그 함수를 여러 번 호출할 수 있다. (반복 코드를 줄임)
  • 모듈화 : 함수를 사용하면 코드를 작은 단위로 나누어 관리하기 용이하다.
  • 값 반환 : 함수는 결과 값을 반환할 수 있다. 이를 통해 함수의 결과 값을 다른 곳에서 사용할 수 있다.

따라서 자주 사용되는 코드에 변화를 주고 싶거나, 반복되는 작업 시 함수를 사용하면 효과적으로 코드를 관리하고 개선할 수 있다.