소소한 일상과 잡다한 정보

APPLE/Swift 문법

[기초 문법] 함수 ( func )

pandada 2022. 8. 4. 11:48
반응형

이전에는 컬렉션타입까지 알아봤으면, 이번에는 함수에 대해서 알아보자.

 

함수

  • 작업의 가장 작은 단위이자 코드의 집합
  • 사용 이유  : 반복적인 작업을 피할 수 있다.
  • Swift에서 함수의 크기에 대해서 명확하게 정의를 하지 않았지만 1개의 기능에 대해서 반복적으로 사용할때 함수라고 생각하면 된다.

 

Swift에서 언급하는 함수의 정의에 대해서 대략적으로 알아봤다.

그럼 이제 함수를 어떻게 사용하는지 알아보자.

 

func 함수명 (파라미터 이름 : 데이터 타입 ) -> 반환 타입 {

         return 반환값

}

 

함수의 문법 사용 순서이다. 보통의 함수는 이렇게 사용을 한다. 함수의 활용에 대해서 이제 알아보도록 하자.

 

< A + B 함수 >

A와 B의 숫자를 받아서 두개의 숫자를 더하는 함수를 구현하였다.

이처럼 함수를 사용할 때에 파라마터의 이름을 적어놓고, 데이터 타입을 작성하여 반환값을 가지고 오면 숫자 계산 함수를 사용하기에는 

충분한 내용이다.

 

 

함수를 사용할때에는 함수명 ( 파라미터 이름 : 값 ) 이런식으로 작성을 해준다.

그럼 여기서 궁금한 사항이 발생한다.

개발을 하면서 무수한 함수들을 사용할 텐데.. 내가 만들어논 함수의 매개변수 이름을 모두 기억하고 있어야하나?

그것은 아니다. 그것은 매우 불편하기 때문에 파라미터의 이름을 없이 진행을 해보도록 하자.

 

< from to 사용 >

이렇게 from 과 to 를 사용하여 실행이 가능하다.

그럼 이제 여기서 의문이 든다. from ~ to ~ 이거는 보통 영어에는 어디어디에서 어디어디까지로 보통 얘기를 하는데 ( 필자가 영어를 잘 못하기 때문에 틀릴 수 도 있다. ) 

그럼 파라미터를 3개를 받으면 from ~ to ~ xx?? 이렇게 사용을 하는걸까? 한번 진행을 해보도록 하자.

 

< 기타 전달 인자 사용 가능 >

이렇게 다른 전달인자를 사요할 수 있다. 자동으로 함수명을 입력하면 자동으로 전달인자를 사용하기 때문에 딱히 from ~ to ~ 내용으로 

작성을 하지 않아도 된다.

이 내용을 작성한 이유는 다른 책들에서도 다들... from 과 to로 알려주기 때문에 이렇게 다른 전달인자 명을 사용해도 된다는 것을 작성해보았다.

 

자 그럼 이제 아 나는 이런 전달인자도 작성하기 너무 싫다. 영문자 여러개 치기 너무 싫다. 그러면 와일드카드 방식으로도 사용이 가능하다.

참고로 필자는 IOS를 협업으로 개발해본적이 없기 때문에... 다른 언어들이야 SVN으로 협업으로 진행을 해봤지만... 

IOS를 개발하는 사람들은 어떻게 진행을 하는지 모르겠다.

 

 

우선 와일드카드 사용법에 대해서 알아보도록 하자.

 

< 와일드카드 방식 >

이렇게 매개변수 앞에 _ 를 붙이게 되면 와일드카드 방식으로 사용이 가능하며, 함수호출할때에 매개변수 내용이 없이 표기가 된다.

참고로 Swift를 좀 해본 사람들은 _A 이렇게 쓰지 않고, _ A 이렇게 띄워서 사용한다는 것을 알 수 있다.

이 이유는 _A 이렇게 붙일 경우에는 _A를 매개변수명으로 같이 인식하기 때문에 와일드카드가 진행이 안된다.

자세한것은 구글링을 해서 변수명 규칙에 대해서 검색을 보면 알 것이다.

 

그럼 이제 와일드 카드 방식으로 사용하는 함수에 대해서도 확인을 해봤다.

 

그럼 이제 문자열 반환에 관련된 내용을 진행해보도록 하자.

 

< 문자열 방식 >

이렇게 String 타입으로 문자열을 반환해서 사용을 할 수 있다.

 

파라미터가 3개인것도 해봤고, String도 해봤고, 그럼 함수는 꼭 값을 반환해야만 하는가?

그것은 아니다. 그럼 이번에는 값을 반환하지 않는 내용으로 함수를 만들어보자.

기본적으로 반환하는 값이 없으면 함수에서는 void라고 말한다. 여기서 void는 없다는 뜻이다.

 

func 함수명 ( 매개변수 : 데이터타입 ) -> Void {

}

 

이렇게 사용해도 되지만

 

보통 개발자들은 귀찮아 하기 때문에...

 

func 함수명 ( 매개변수 : 데이터 타입 ) {

}

이렇게 작성을 한다. 즉, void 는 생략이 가능하다는 내용이다.

 

그럼 이제 소스를 확인하면서 진행을 해보자.

 

< void 있고, 없고 차이 >

이렇게 뒤의 Void가 없어도 된다는 것을 알 수 있다.

보통 void는 반환값이 없는 함수이기 때문에 함수의 내용을 확인했을 때에 return이 없으면 그냥 void 구나.. 이렇게 인식 하기 때문에

굳이 Void를 넣지 않아도 된다는 것을 알고 넘어가자.

 

 

그럼 반대로 생각해서 함수에는 꼭 매개변수가 필요한것인가?

그렇지 않다. 그럼 매개변수를 받지 않고, 값을 리턴하거나 매개변수도 안받고 값도 리턴하지 않는 그런 함수를 만들어보자.

 

< 매개변수가 없어도 되는 함수>

위의 이미지에서 sayHello2는 매개변수는 없고, return만 있는 함수이다. 

간단하게 "hi"가 return 되도록 만들었다.

그리고 이미지에서 아래의 ppnumbers는 매개변수도 없고, 리턴도 없다.

 

이런식으로 매개변수, 즉 함수 호출시의 파라미터가 없이 만들수도 있다.

 

굳이 값 없이 그냥 실행만 되게 하는 내용으로 많이 쓰이는 부분이다.

 

그럼 이제 그전에 배웠던 컬렉션 타입에 관련된 내용도 같이 한번 써보도록 하자.

 

배열이 함수에 들어갈 수 있냐? 맞다. 

당연히 들어갈 수 있으며, 그렇지 않으면 코딩을 하는 의미가 없기때문에..

 

우선적으로 내용을 확인해보자.

 

< 가변 매개변수 >

이미상에도 필자가 주석으로 처리를 해두었지만, 가변 매개변수 관련된 내용이다.

 

가변매개변수로 지정이 되어 있으면, 여러개의 문자열을 넘길 수 있다. 

가변매개변수로 지정이 되어있으면 쉽게 말해 원하는 양의 배열을 넘겨 받을 수 있다고 생각하면 된다.

 

sayHello4라는 함수를 만들었고, 이를 통해서 name이라는 String 매개변수와 others 라는 String 가변 매개변수를 가지도록 함수를 만들었다.

 

가변으로 매개변수를 사용하려면 ... 이것처럼 3개의 점이 연속으로 적혀 있으면 된다.

 

위의 이미지 상에는 다 와일드카드로 작성을 하여, 함수 호출시에 파라미터에 매개변수가 없지만, 순서대로 알아서 인식을 잘 해서 들어간다.

 

필자가 위에서 언급했다 싶이 이렇게 다 와일드카드로 만들 경우에는 코드가 단순하면 상관이 없지만 복잡하면 이처럼 제대로 들어갔는지 쉽게 확인이 안됨으로 전달인자 작성은 어느정도는 해주도록 하자.

 

 

그럼 이제 배열을 만들어서 배열을 함수에 넣고 진행을 해보도록 하자.

 

< 배열 선언 후 함수 진행 >

기존에 othername이라는 배열을 만들었고, 이후에 sayHello5 함수에 배열을 받도록 진행했다.

배열을 받을 경우에도 동일하게 데이터 타입에 [] 대괄호를 넣어서 진행하면 된다.

 

그럼 이제 함수에 대해서 대략적으로 알아봤다. 

 

함수 활용에 대해서는 무궁무진 하지만 Swift에 대해서 코딩을 하려면 이정도면 충분할 것이기 때문에 우선적으로 함수는 넘어가도록 하겠다.

 

다들 활용을 열심히 해서 공부를 열심히 하기를 바라며, 다음에는 조건문에 대해서 다룰 예정이다.

 

 

반응형

'APPLE > Swift 문법' 카테고리의 다른 글

[ 기초 문법 ] 옵셔널  (0) 2022.08.08
[기초 문법] 반복문  (0) 2022.08.05
[기초 문법] If문과 Switch 구문  (0) 2022.08.05
[기초 문법] 컬렉션 타입  (0) 2022.08.04
[기초 문법]상수와 변수 / 데이터 타입  (0) 2022.08.02