대메뉴 바로가기 본문 바로가기

데이터 기술 자료

데이터 기술 자료 상세보기
제목 스위프트 활용 : 스위프트 언어의 문법-함수와 활용
등록일 조회수 4716
첨부파일  

스위프트 활용

스위프트 언어의 문법-함수와 활용



스위프트 언어를 좀 더 잘 사용하기 위해서 알아야 하는 문법들을 살펴보도록 하겠다. 새로운 프로그램 언어에 효과적으로 접근하기 위한 방법으로 문법과 응용방법에 대해 자세히 알아보자.



이번 글에서는 스위프트 언어에서 함수의 사용법을 알아보겠다. 함수는 입력 값과 출력 값을 가지고 있게 되며, 여러 가지 타입의 선언형식을 가지게 된다. 어떠한 동작이 필요할 때 불리게 된다. 또한 함수는 사용될 때 용도에 따라 파라미터를 가지게 된다. 스위프트에서는 하나의 함수가 다른 함수를 포함하는 네스티드 형식도 지원하고 있다.



함수의 정의

함수를 정의할 때는 이름을 정하고 선택적으로 입력 값과 출력 값의 형태를 지정하고 반환하도록 하면 된다. <그림 1>의 코드는 입력값이 없는 형태로 작성해 본 함수이다. 함수의 이름은 ‘Helloworld’다. 스위프트에서 “스위프트의 헬로월드”라는 문자열을 ‘String’타입으로 출력하도록 했다. 출력값은 ‘->’ 기호를 사용해서 타입을 정의할 수 있다. 입력값이 있도록 함수를 작성하려면 함수의 이름을 정의할 때 타입을 괄호안에 정의해 주면 된다. <그림 2>의 예는 String 타입으로 값을 입력받아서 출력하는 형태다.





함수의 값을 반환할 때는 별도의 상수를 정의해서 사용하지 않고 직접 반환되는 문장을 기술해도 된다. 다소 길어지는 단점은 있지만 짧게 작성할 수 있는 장점이 있다.





파라미터와 반환값

스위프트에서 함수의 파라미터의 타입을 정의할 때 다른 언어와 같이 다중으로 정의할 수 있다. 다만, 반환값도 다중으로 정의할 수 있다는 점이 특징이다. <그림4>의 코드는 처음과 끝에 해당되는 값을 범위를 출력하는 코드다.



함수는 반환값(return)이 없이 정의될 수도 있는데 이것은 빈번하게 호출되는 값이 있을 때 사용하면 된다. 반환값이 없는 함수를 정의할 때는 반환값의 타입을 의미하는 ‘->’ 기호도 생략된다. <그림5>의 코드는 반환값이 없는 함수로 정의한 경우다. 이번에는 파라미터의 타입을 Int 형으로 변환해서 반환값의 글자수를 세는 함수를 작성해 보겠다. 스위프트에서 글자수를 세는 함수는 countElements라는 것이 있다. 스위프트 프레임워크에 다음과 같이 정의돼 있다.

func countElements< T : _CollectionType>(x: T) -> T.Index.Distance



<그림 6>의 예제에서 입력값으로 작성된 값의 글자수를 각각 9와 7로 출력하는 것을 알 수 있다.





다음으로 다중 반환값의 의미를 알아보자. <그림8>의 예제는 배열로 숫자를 입력받아서 그 숫자의 최고값과 최소값을 출력하는 예제다. 여기서 입력되는 값과 출력되는 값은 정수 형태로 했다. ‘minMaxValue’라는 함수는 배열형태로 값을 입력 받아서 min, max 값을 출력하도록 하는 Tuple 형태로 정의된 함수다.



다음으로 ‘bounds’라는 상수를 사용해서 최고값과 최소값을 출력하는 예제도 작성해 봤다. ‘bounds.min’이라는 값으로 최소값을 표시하고, ‘bounds.max’로 입력된 값 중에서 최대값을 구해봤다.





파라미터의 활용

함수의 파라미터는 함수를 처음 정의할 때 미리 지정하는 값에 해당한다. 함수의 내부에서만 사용할 것인지 외부에서도 사용되게 할 것인지를 정할 수 있다. 지금 까지 예제에서 사용했던 파라미터들은 함수 내부에서만 사용하게 되는 경우를 가정해서 작성해본 것들이었다. 이 경우에는 함수의 내부에서만 사용할 목적으로 작성하였으므로 별도로 타입을 정의할 필요가 없었다. 그런데 함수 외부에서도 사용하게 하기 위해서는 파라미터의 타입을 명시적으로 표시해 표현한다.

<그림 10>의 예제를 살펴보자. 외부에서 함수를 호출해 사용할 때 파라미터의 타입을 변수명 앞에 붙여서 정의했다. 외부 파라미터를 사용해서 함수를 정의했다면, 함수를 호출할 경우 반드시 외부 파라미터의 타입을 사용한 후에 호출해야 한다. 만약 파라미터 타입을 적이 주지 않는다면 <그림 11>과 같이 에러가 발생한다.





다음으로 내부/외부 파라미터를 같은 이름으로 사용해 코드의 가독성을 높이고 비슷한 역할을 하는 변수들의 이름을 동일하게 가져가고 싶을 때가 있을 것이다. 이럴 경우 ‘#’ 를 사용해서 두 개의 파라미터를 같은 이름으로 정의해 사용할 수가 있다. <그림 12>의 예제 코드에서 보면 같은 이름의 파라미터를 ‘#’ 기호를 사용해서 표현했다. 이와 같이 해서 같은 이름의 파라미터를 내부/외부 동시에 쓸 수 있게 된다.





파라미터의 기본값

일반적으로 어떤 함수를 정의할 때 기본으로 적용할 수 있는 값이 있다면 파라미터에 기술해주고, 나중에 그 함수를 사용할 때 파라미터 없이 호출될 경우, 처음에 함수를 정의할 때 반영한 값을 사용한다. 이런 경우를 대비해서 함수를 정의할 때 기본값을 가지는 파라미터는 뒤쪽에 정의하는 것이 좋다.

<그림 13>의 예제에서 join이라는 함수는 3가지 문자열 파라미터를 가진다. withJoiner라는 파라미터에 아무런 문자열 값이 없는 “ ”를 기본값으로 지정했다. 이것은 함수를 호출할 때 첫번째와 두번째 파라미터에는 반드시 값??지 않으면 기본적으로 정의해 둔 “ ”의 문자열이 기본값으로 출력된다는 것이다.





외부 파라미터 이름

함수를 호출할 때 기본값을 가지고 있는 파라미터는 각각의 외부 파라미터 값을 주어서 기본값이 호출되도록 한다. 이렇게 하면 함수를 호출할 때 좀 더 분명하게 값을 줄 수 있기 때문이다. 그러나, 이때 기본값이 있는 파라미터라면 굳이 외부 파라미터를 써주지 않아도 스위프트에서는 자동적으로 값을 반영한다.



마치며

이번 글에서는 스위프트에서 함수를 정의하고 사용하는 방법에 대해서 알아보았다. 스위프트도 다른 언어와 마찬가지로 함수를 정의할 때, 파라미터를 정의할 때 기본값을 생성하고 입력하는 방식을 유사하게 사용한다. 다만 함수의 기본값을 정의할 때 “타입:값”의 형태로 사용하는 것이 다른 언어와 다른점이고 외부 파라미터를 정의할 때 내부에서 이것에 대한 값도 자동으로 반영할 수 있다는 점이 다르다.



출처 : 마이크로소프트웨어 4월호

제공 : 데이터전문가 지식포털 DBguide.net