반응형

 Swift를 제대로 사용하기 위해 함수에 대해서 알아보자.

프로그래밍 언어에서 함수는 특정한 작업을 수행하는 코드들의 모임이다.

어떤 프로그램에서 코드들이 쭉 있다면 그중 일부분을 떼어와서 그룹화 시키고 그 그룹에 이름을 붙여주는 것과 같다.

매번 똑같은 코드를 복붙하는건 귀찮고 비효율적이기 때문에 간단하게 함수명만으로 코드들을 호출하는 것이다.

(항상 말하지만 결국은 프로그래머 좋으라고...ㅎㅎ)


 예전에는 함수를 그날 기분에 따라 함수 또는 메서드로 불렀는데 사실 함수와 메서드는 엄밀히 따지자면 조금 다르다.

함수가 메서드의 상위 개념이고, 보통 전역으로 사용하는 함수를 "함수" 라고 부르고 객체지향 언어에서 클래스,구조체 등의 내부에서 사용하는 함수를 메서드라 부른다. 즉 메서드는 멤버함수를 의미한다.

(메서드를 항상 메소드라 적었는데 표기법도 찾아 봤더니 국립국어원 표준국어대사전에 따르면 "메서드"가 올바른 표기법이라 한다.)




Swift의 함수


 다른 프로그래밍 언어의 함수와 비교하자면 Swift의 함수는 기본적인 형태는 자바나 다른 프로그래밍 언어와 

비슷하지만 함수의 자유도가 비교적 높은 편이다.

자유도가 높다고 한 이유는 함수의 중요한 요소인 매개변수와 리턴 타입 등을 다양한 형태로 사용할 수 있고, 

함수 자체를 매개변수나 리턴 타입으로 사용 하는 등 함수를  다양하게 정의할 수 있기 때문이다.

또한 기본적으로 함수의 오버라이드(재정의), 오버로드(중복 정의)를 모두 지원한다.

Swift는 함수를 선언할 때 func 이라는 키워드를 사용한다.  

리턴타입은 -> 를 사용하고, 리턴은 말그대로 return 이라는 키워드를 사용한다.




Swift의 기본적인 함수 사용법


기본적인 함수 형태는 다음과 같다. 


func 함수명 (매개변수...) -> 리턴 타입

//코드작성

return 리턴 값 

}


이 형태를 기본으로 다양하게 활용이 가능하다. 

다만 리턴 타입이 없는 경우에는 생략해도 되고 [ -> Void ] 를 넣어줘도 된다.




함수의 매개변수 이름과 전달인자 레이블


 Swift 의 함수는 매개변수 이름을 지정해주는 것 뿐만 아니라 전달인자 레이블 이라는 것도 지정해 줄 수 있다.

매개변수 이름은 함수내에서 매개변수를 호출할 때 사용하고, 전달인자 레이블은 함수를 호출해서 사용할 때 변수들을 쉽게 구분하기 위한 용도 정도로 사용한다. 

자바 처럼 함수를 호출하여 매개변수를 넣을 때 별다른 명칭없이 넣고 싶으면 와일드카드 식별자 ( _ ) 를 넣어주면 된다.

( 전달인자 레이블 명을 바꿔도 함수를 오버로드 하여 사용할 수 있다!)





함수의 매개변수 기본값


 Swift의 함수는 매개변수에 기본값을 줄 수 있다. 

그리고 기본값이 지정되어 있는 매개변수는 보통 앞쪽에 배치된다.





함수의 가변 매개변수


 코딩을 하다보면 매개변수가 유동적으로 들어가야하는 경우가 있는데 이 때 가변 매개변수를 사용하면 된다.

가변 매개변수는 함수마다 하나씩만 사용이 가능하고, 가변 매개변수는 배열처럼 사용이 가능하다.




함수의 입출력 매개변수


 프로그래밍 언어를 공부하다보면 call by value 와 call by reference 를 접하게된다. 

call by value 는 값을 복사해서 사용하는 형태이고 call by reference 는 참조로 객체를 전달하는 형태이다.

보통 매개변수는 call by value 로 값만 복사해서 사용하는데 C 언어의 포인터처럼 call by reference 로 참조하고 싶을 때

사용하는 것이 입출력 매개변수이다. 매개변수 타입 앞에 inout을 붙여주면 되고 함수를 호출할 때에는 참조했다는 표시로 

앰퍼샌드(&)를 붙여준다. 입출력 매개변수의 값을 변경하면 참조이기 때문에 할당한 참조의 값도 변경된다.

(애초에 참조가 아니면 함수에서 매개변수의 값을 변경하는게 불가능하다.)





함수 타입 


 Swift 에서 함수는 일급 객체로 함수 자체를 타입을 사용할 수 있다. 

함수를 데이터 타입 뿐만 아니라 매개변수 타입이나 리턴 타입으로도 사용이 가능하다.




 이외에도 함수 안에 함수를 중첩하여 사용하는 등 Swift 의 함수는 다양하게 사용이 가능하므로 

코딩을 하면서 조금씩 자기에게 필요한 형태의 함수를 찾아 사용하는게 좋겠다.






* 해당 포스팅은 스위프트(Swift)4  버전을 기준으로 하고 있습니다.

* 참고 : https://swift.org/ 






반응형

'IT 정보 로그캣 > Swift' 카테고리의 다른 글

[Swift 공부] 클로져 (Cloures) 란?  (0) 2019.01.13
[Swift 공부] 반복문  (0) 2018.11.11
[Swift 공부] 조건문  (0) 2018.11.10
[Swift 공부] 기본 연산자  (0) 2018.11.04
[Swift 공부] 컬렉션 타입이란 ?  (0) 2018.11.03

+ Recent posts