iOS) swift : 함수

J·2021년 1월 30일
0

Swift

목록 보기
3/4

야곰님의 유튜브를 보고 공부하고 있습니다.
조건문과 반복문 이전에 함수를 살펴보았어야 했는데.....!





함수의 기본

함수를 선언할때도 데이터타입을 매번 선언해야 합니다.

함수 구현


func 함수명(매개변수1: 데이터타입, 매개변수2: 데이터타입, ...) -> 반환타입 {
                                                        함수 구현부
                                                        return 반환값
                                                        }

한글로 나열하다보니 길어졌지만 다른 언어와 선언하는 방법은 매우 유사합니다.
주의할 점은 -> 반환타입 부분입니다. 반환되는 값이 없다면 반환타입 부분에 Void를 적어주거나, -> Void를 통째로 삭제해주면 됩니다. Void의 V를 대문자로 쓰려니 어색합니다.

함수 호출

sum(a:3, b:9)

각 매개변수에 값을 대입해주어야 합니다. 이건 좀 많이 번거롭습니다..



함수의 심화

강의에는 고급 함수라는 표현을 사용했지만 그냥.. 심화되는 정도입니다.

1. 매개변수 기본값

매개변수의 값을 미리 지정해주는 것입니다. 호출시 생략이 가능하지만, 기본값이 아닌 다른 값을 대입하려면 작성해주면 됩니다. 어렵지 않습니다.

위와 같은 함수를 선언하고 호출했습니다.

비슷하지만 매개변수 기본값이 지정된 함수를 새로 선언했습니다. 매개변수 me 부분에 "J"를 기본값으로 넣었습니다. 호출시 매개변수 me를 비워두면 자동으로 "J"가 출력되고, 함께 작성해주면 작성된 String이 출력됩니다.
기본값이 주어진 매개변수는 대부분 매개변수의 가장 뒤에 선언하는 편이 좋습니다.

2. 전달인자 레이블

함수를 호출할 때 매개변수의 역할을 조금 더 명확하게 하거나,
사용자의 입장에서 표현하고자 할때 사용합니다. 말 그대로 별칭같은 존재라고 생각이 되네요.

위의 예제에서 조금 변형했습니다.
매개변수의 이름 앞에 각각 from,to를 입력해 주었고 호출시 friend,me가 아닌 레이블을 사용해야합니다.
함수 내부에서 함수를 구현할 때에는 매개변수 이름을, 함수를 호출할 때에는 레이블을 사용합니다.

3. 가변 매개변수

가변 매개변수는 매개변수의 개수를 명확히 할 수 없을때 사용합니다.

몇명인지 모를 친구들에게 인사를 하는 함수입니다. 가변매개변수는 길이가 0일 수 있습니다.
가변 매개변수는 함수당 하나만 가질 수 있습니다.

4. 하나의 데이터 타입으로 표현이 가능한 swift의 함수

함수 자체가 하나의 데이터 타입이 됩니다. 스위프트의 함수는 일급객체이므로 변수, 상수 등에 저장이 가능하고, 매개변수를 통해 전달할 수 있습니다.


위에서 사용했던 예제들을 이용해 변수에 함수를 저장했습니다.

  • String을 반환하는 greeting 함수의 경우 someFunc에 저장했습니다.
    변수: (매개변수 타입) -> 반환타입 = 함수명(매개변수명)

  • 반환값이 없는 greeting 함수의 경우 someFunction에 저장했습니다.
    여기에서 하얀 색으로 드래그한 문구는 생략해도 컴파일에 아무런 이상이 없지만, 아래 변수에 저장할 때에 -> Void를 생략하면 컴파일 에러가 납니다. 당연한건가요? 저는 지울수 있을줄 알고 지워봤습니다. 안됩니다..


호출하는 모습입니다. 호출은 정말 간단하게 생겼습니다. 함수를 만들어서, 변수에 넣고, 사용하는 방법에 익숙해지면 좋겠습니다. 사용은 쉽군요! 변수명, 함수명 등을 길게 적어두어서 눈에 더 안들어오는것 같지만, 많이 사용하면서 익숙해져야겠습니다.


주의해야 할 점을 확인해보겠습니다.
  • 반환타입을 생략할 수 없습니다.
    위에서 확인했습니다. -> Void 지우고싶게 생겨서 지워보았으나 컴파일 에러가 발생했습니다.
  • 타입이 다른 함수는 할당할 수 없습니다.
    아래의 이미지를 살펴보면 greeting1, greeting2 두 함수 모두 매개변수를 String 타입으로 받지만 greeting2의 매개변수 friends는 가변 매개변수입니다. 컴파일 에러가 발생합니다.


오늘은 여기까지 하겠습니다. 화이팅!

0개의 댓글