본문 바로가기

iOS/Swift

Swift) 함수(Function) 정복하기 (1/3) - 함수? 메서드? 클로저?

 

 

 

안녕하세요 소들입닏다 :)

최근 포스팅 중 Swift의 기초 문법에 대해 다룬 게 없어서 (기초 중시자)

이번 12월달엔 기초 문법에 대해 포스팅을 많이 해보려고 합니다!

 

지금 생각나는 것만 해도

Closure ... Class.... Protocol...... 머 등등..

내용이 꽤나 많을 것 같네영

 

먼저 함수부터 시작!!!

이름하야 함수 정복하기!!!!! 시작은 패기롭게 ^^!

모든 포스팅은 편의 말투로 합니다~!!

 

 

 

 

1. 함수 vs 메서드

 

나는 처음 아무것도 모르고 공부를 시작할 때

가장 헷갈리던 게 용어 하나하나부터였던 거 같음..!

예를 들면 변수&프로퍼티, 함수&메서드

님들 차이점이 뭔데요...;; 이런 궁금증들이 많이 들었달까  👀

 

그래서 혹시 나처럼 헷갈릴 사람을 위해 용어부터 정리하고 감

 

자, 먼저 우리가 일반적으로

func이라는 키워드로 생성하는 것은 모~~두 "함수"

 

 

func doSomething() {
    print("Somaker")
}

 

 

당연히 doSomething이란 것은

func 키워드로 생성한 함수

 

그럼 메서드는 뭐냐??

 

클래스, 구조체, 열거형 속에 포함되어 있는 "함수"

 

를 말함!!!!  만약 우리가 func으로 선언한 함수

클래스, 구조체, 열거형 속에 속해 포함되어 있다면

 

 

class Sodeul {
    func doSomething() {
        print("Somaker")
    }
}

 

 

 

이땐 doSomething을 함수가 아니라 메서드라고 표현함!!!!!!!

 

근데 iOS 앱을 개발하면 보통 함수를 독단적으로 쓸 일은 거~~~~의 없고

클래스나 구조체 내에서 사용하는 경우가 거의 대부분이기 때문에

메서드라는 것이 자연스러울텐데, 메서드보다 큰 범주가 함수임!

 

따라서 난 함수라는 단어로 포스팅을 할 것임 :)

 

 

 

 

2. 함수 vs 클로저

 

자, 여기서 클로저 사용법에 대해선 알고가지 않을 것임

왜냐? 그건 클로저 편에서 따로 다룰 거거등!!

 

다만, 앞서도 그랬듯 함수와 클로저란 용어에 대해 알고갈 것임

클로저라고 하면 보통 익명함수를 뜻한다고 생각할텐데,

사실 func 키워드를 이용해 이름을 붙여주는 함수들도 모두 클로저임!!

 

무슨말이냐면,

클로저는 다음과 같이 두 가지 종류가 있음

 

 

Named Closure가 있고, Unnamed Closure가 있는데

우리가 다음과 같이 선언해왔던 이름이 있는 함수

 

 

func doSomething() {
    print("Somaker")
}

 

 

Named Closure임! 근데, 이를 클로저라 부르지 않고,

그냥 함수라고 부르는 것 뿐임! (그치만 클로저란 사실은 변함 없음)

 

그리고, 다음과 같이 이름을 붙이지 않고 사용하는 함수

 

 

let closure = { print("Somaker") }

 

 

익명함수, 즉 Unnamed Closure라고 부르는 것임

근데 보통 Closure라고 하면 Unnamed Closure를 말하긴 함 :)

따라서, 정리하자면

 

클로저는 Named Clousre & Unnamed Closure 둘다 포함하지만,

보통 Unnamed Closure를 말한다!

 

(클로저 사용법에 대해선 나중에 자세히 다룰 거니 개념만 알고 가세용)

 

 

 

 

3. Swift에서 함수 선언 방법

 

자, 함수가 뭔지 용어에 대해 다 정리했음!

func이란 키워드로 선언되는 것은 "함수"이자, Named Closure

이 함수가 클래스, 구조체, 열거형에 속해 있으면 메서드라고 부른다 했음

 

그럼 이 함수를 선언할 때 어떻게 선언하는지 볼 것임 :)

 

 

 

자, 이렇게 생겼는데 하나하나씩 살펴볼 것임!

 

 

 

3-1. func

 

 

가장 기본임!

함수를 선언하기 위해선 이 func이라는 키워드를 써주어야 함!!

 

 

 

 

3-2. name (함수 이름)

 

 

 

func이란 키워드를 썼으면,

이제 그 뒤에 한칸 띄우고 함수 이름을 써주어야 함!!

Swift에선 함수 이름을 lowCamelCase로 사용하니 지켜주셈~.~

 

 

 

3-3. parameter (파라미터)

 

 

자, 파라미터는 이름 뒤에 ()를 치고 안에 원하는 파라미터를 적는 형식인데,

이 파라미터를 선언하는 방식은 크게 세 가지가 있음!!

 

 

 

 ① Argument Label과 Parameter Name 각각 명시하기 

 

Argument Label과 Parameter Name이 뭐냐고 묻고 싶겠지..~~

 

Argument Label : 함수를 호출할 때 사용하는 이름

 Parameter Name : 함수 내에서 사용할 파라미터의 이름

 

먼저, Argument Lable과 Parameter Name을 둘 다 명시하려면,

 

 

 

 

이런 형식으로 사용하는데,

음,,,,,  뭐 이건 예제로 봐야 이해하기 쉬워서 예제로 보여드리겠음

 

 

func sayHello(to name: String) {
   print("Hello, \(name)")
}
 
sayHello(to: "Sodeul")

 

 

자 이런 식으로 함수를 선언하고 호출할 경우,

(호출은 다음번에 볼 거지만 맨 마지막 줄처럼 함)

Argument Label to에 해당하고, 따라서 다음과 같이

 

 

 

 

함수를 호출할 때 사용됨!

Parameter Namename에 해당하고, 다음과 같이

 

 

 

 

받은 파라미터를 함수 내부에서 사용할 때 사용됨!!!!

자, 이제 Argument LabelParameter Name에 대해 알게됐음 :)

 

근데, 우린 지금껏 Print 함수를 쓸 때

 

 

 

 

이렇게 Argument Label 없이 써왔단 말임!??!?

이건 print 함수의 원형을 보면 알 수 있음 :)

 

 

 

 

이렇게 Argument Label _(underbar)로 표시하고 있음

자, Argument Label을 생략하고 싶다면,  _를 사용해서 생략할 수 있음!!!

이것을 Wildcard Pattern이라고 함!!!!!!!

 

따라서 다음과 같이 Wildcard Pattern을 이용해 Argument Label을 생략한 함수는,

 

 

func sayHello(_ name: String) {
   print("Hello, \(name)")
}

 

 

실제 호출할 때 Argument Label을 생략하고

 

 

sayHello("Sodeul")

 

 

이런 식으로 호출함 :)

 

참고로 Argument Label은 생략할 수 있지만, Parameter Name은 절대 생략할 수 없음

당연한 거 Parameter Name 생략하면 함수 내부에서 파라미터 어떻게 사용하게.. 🌝

이 Argument Label과 Parameter Name을 정확히 이해하야, 나중에 함수 표기법에 대해 알 수 있으니

제대로 인지하고 넘어가시길!

 

 

 ② Argument Label & Parameter Name을 한번에 명시하기 

 

뭐 제목은 거창한데,

Argument LabelParameter Name을 굳이 나눠서 각각 쓰지 않아도

한번에 명시할 수 있음!!!

 

 

 

 

이렇게 하나만 선언할 경우,

nameArgument Label이자, Parameter Name이 되는 것임

 

이또한 예제로 보여드리면,

 

 

func sayHello(name: String) {
   print("Hello, \(name)")
}

 

 

name Parameter Name으로 쓰여서 

함수 내부에서도 name이란 이름으로 파라미터를 사용하고,

 

 

sayHello(name: "Sodeul")

 

 

 

실제 호출할 때 Argument Label 또한 name으로 사용함!

 

 

 

 ③ 파라미터를 받지 않을 경우 

 

파라미터를 받지 않을 경우, 다음과 같이 

 

 

이렇게 파라미터 없다~~~ 하고 빈 괄호로 명시해주어야 함

 

 

func sayHello() { }

 

 

이렇게!! 파라미터가 없다고 괄호를 생략하면 절!대! 안됨

(Objective-C는 가능)

 

이제 파라미터에 대해 간단히 선언하는 방법을 봤는데,

in-out 파라미터, 가변 파라미터 등등에 대해선 다음 포스팅에 하겠음다 :)

 

 

 

3-4. Return Type (리턴 타입)

 

 

Swift에서 Return Type은 -> 라는 키워드(?)랑 함께 써야함

->를 쓰고 그 뒤에 Return하고자 하는 Type을 명시해주면 됨

 

 

func sayHello(name: String) -> String {
   return name
}

 

 

 

이런 식으로!!!!

만약 Return Type이 없을 경우 쿨하게 다 지워버리면 됨

 

 

func sayHello(name: String) { }

 

 

 

이렇게 생략이 가능하다! :)

 

 

 

 

4. Swift에서 함수 호출 방법

 

위에서 함수 선언할 때 뭐 다 보여줬찌만......

 

 

 

 

이렇게 호출하면 되는데,

위에서 설명했듯이 함수 호출 시 parameters에는 Argument Label이 들어감!!

 

 

sayHello("Sodeul")          //Argument Label 생략
sayHello(name: "Sodeul")    //Argument Label 명시

 

 

이렇게 :)

근데 보통..

 

 

 

 

요롷게.. 자동완성ㅇㅣ 되니까 ..

자동완성을 잘 활용합ㅅ...ㅣ....ㄷ.......ㅏ

 

 

 

 

.

.

.

이번 포스팅에선 헷갈리기 쉬운 개념과

함수의 기본 선언 방식, 호출 방식에 대해 알아봤음!!

다음번엔 더 심화를 공부할 것이니,

꼭 이번 포스팅을ㄷ ㅏ 이해 했길 💩



Calendar
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
최근 댓글
Visits
Today
Yesterday