Swift/개념 & 응용

[Swift] Swift 문법 - 함수(1)

유정주 2021. 8. 21. 00:10
반응형

안녕하세요. 

 

오늘은 Swift의 함수에 대해 알아보겠습니다.

 

어떤 언어든 함수 부분이 첫 번째 고비인 것 같아요.

저도 공부하면서 다른 문법보다는 어려운 감이 있었는데요.

파이팅하면 좋겠습니다.

 

함수 선언명은 Clean Code에 관한 이전 포스팅을 참고하여 명확하게 지으면 좋습니다.

2021.08.02 - [개발,IT,코딩] - [유튜브 정리] 노마드 코더 Nomad Coders - 깨끗한 코드를 위한 5가지 팁

 

[유튜브 정리] 노마드 코더 Nomad Coders - 깨끗한 코드를 위한 5가지 팁

안녕하세요. 신입 개발자인 저는 깨끗한 코드를 작성하기 위해 노력하고 있습니다. 개인 기록용으로 "노마드 코더 Nomad Coders - 깨끗한 코드를 위한 5가지 팁"을 정리한 포스팅입니다. "노마드 코

jeong9216.tistory.com

 

그럼 시작하겠습니다.


참고 자료

Apple Swift Document

https://developer.apple.com/documentation/swift

 

해당 포스팅은 Smile Han님의 유튜브 영상을 참고하며 작성하였습니다.

https://www.youtube.com/channel/UCM8wseo6DkA-D7yGlCrcrwA


함수

함수란 특정 작업을 수행하는 코드 블록입니다.

 

함수 정의부에 있는 값을 매개 변수, parameter, 인자라고 하고

함수 호출 시 전달하는 값argument, 인수라고 합니다.

 

메서드(Method)

특정 클래스, 구조체, 열거형 내의 함수입니다.

함수를 Swift 클래스 내에 선언하면 메서드라고 부릅니다.

보통은 같은 의미로 함수와 메서드를 혼용하여 사용한다고 합니다.


함수 선언 방법

 

함수명은 좀 길더라도 의미가 명확하게 지어야 좋습니다.

func <함수명> (<매개변수 이름>: <매개변수 타입>, ... ) -> <반환값 타입> {
	// 함수 코드
}

 

함수 선언 예시 1

func printHello() { // -> Void 는 생략 가능
	print("Hello")
}
printHello()
//실행 결과
//Hello

print(type(of: printHello))
//실행결과
//() -> ()

parameter와 return 값이 모두 없는 형태입니다.

return값이 없는 경우 반환값 타입은 생략 가능합니다.

함수 호출도 함수명만 작성하면 됩니다.

 

함수의 타입은 parameter와 return값이 모두 Void이기 때문에 () -> ()이 출력되는 걸 볼 수 있습니다.

 

함수 선언 예시 2

func getMessage(type: Int, message: String) -> String {
	return ("\(type) : \(message)")
}
let msg = getMessage(type: 1, message: "Hi! Hi!")
print(msg)
//실행 결과
//1 : Hi! Hi!

print(type(of: getMessage))
//실행결과
//(Int, String) -> String

parameter는 총 두 개로 각각 Int와 String이고 return값 타입은 String입니다.

parameter가 있는 경우 함수를 호출할 때 parameter 이름을 적어줘야 합니다.

 

함수의 타입을 찍어보면 parameter의 개수, 타입과 return값 타입이 나옵니다. 


내부 매개변수 이름과 외부 매개변수 이름

Swift는 함수 내부에서 사용할 parameter 이름과

함수 호출 시 사용할 parameter 이름을 다르게 지정할 수 있습니다.

func <함수명> (<외부 매개변수 이름> <내부 매개변수 이름>: <매개변수 타입>, ... ) -> <반환값 타입> {
	// 함수 코드
}

함수를 정의할 때는 내부 매개변수명을 사용하고

함수를 호출할 때는 외부 매개변수명을 사용합니다.

이때 외부 매개변수명을 생략하면 내부 매개변수명이 외부 매개변수명까지 겸합니다.

 

외부 매개변수 이름 예시

func getMessage(type t: Int, message s: String) -> String {
    return ("\(t) : \(s)")
}
let msg = getMessage(type: 2, message: "Hello!")
print(msg)
//실행 결과
//2 : Hello!

내부 매개변수 이름은 t, s로 설정하고 외부 매개변수 이름으로 type과 message로 설정하였습니다.

getMessage 함수의 내부에서는 t와 s로 각 매개변수를 사용하고

함수를 호출할 때는 type과 message로 사용합니다.


외부 매개변수 생략

외부 매개변수 이름으로 _를 사용하면 호출할 때 매개변수 이름을 생략 가능합니다.

Swift에서 가장 많이 사용하는 방법이라고 하네요.

Objective-C의 함수 호출 방법이 이런 형태이고 Swift의 내부 함수들의 많은 수가 이 형태로 되어 있다고 합니다.

 

예시

func getMessage(_ t: Int, message s: String) -> String {
    return ("\(t) : \(s)")
}
let msg = getMessage(3, message: "Goood!")
print(msg)
//실행 결과
//3 : Goood!

처음 매개변수는 외부 매개변수 명을 _로 설정하여 호출할 때 매개변수 명을 생략 가능하도록 하였습니다.

따라서 getMessage 함수의 첫 번째 매개변수는 정수만 넣어도 

함수 호출이 가능합니다.


함수는 내용이 많아 포스팅을 세 개로 나누었습니다.

다음 포스팅에서 이어서 알아보도록 합시다.

 

다음 포스팅 바로 가기

2021.08.22 - [개발,IT,코딩] - [Swift] Swift 문법 - 함수(2)

 

감사합니다!


아직은 초보 개발자입니다.

더 효율적인 코드 훈수 환영합니다!

공감 댓글 부탁드립니다.

반응형