함수

2020. 5. 6. 22:49Swift

Function

- 독립적으로 실행할 수 있는 코드 블럭

- 함수를 실행(call)하면 독립적인 메모리 공간이 하나가 할당 되고 그 안에서 필요한 데이터들을 저장하고,

수행이 끝나면 할당된 메모리 공간을 소멸시키고 호출한 곳으로 돌아감(return)

이 때 사용되는 메모리 자료 구조가 stack이라 보통 함수가 할당 받은 메모리를 Stack이라고 함.

- 이 스택의 크기를 넘어서 저장 => stack overflow

지금은 stack크기 조절 가능

- 함수는 클래스나 인스턴스에 소속되지 않은 것을 의미하고 클래스나 인스턴스에 소속된 함수는 메소드라고 함

- 메시지가 오면 리시버가 셀럭터를 호출, 메시지 = 이벤트, 리시버 = 메소드를 호출하는 대상(클래스, 인스턴스) 셀렉터 = 호출되는 함수

함수형 프로그래밍 언어: 함수를 클래스나 객체 안에 만들지 않고 외부에 별도로 작성이 가능

- 기능만 필요한 경우 굳이 클래스를 만들지 않고 함수만 만들어서 배포하는 것이 가능

 

2) 매개변수 생략 - 기본값을 설정

- 매개변수를 생략할 수 있게 하려면 반드시 매개변수의 자료형을 기재해야 함

func 함수이름(매개변수이름: 자료형 = 기본값)

- 위의 매개변수는 생략하면 기본값이 설정됨.

- 생략은 뒤에서부터 해야함.

- 앞 매개변수를 생랴갛고 뒤의 매개변수를 대입하는 구조는 안됨.

 

3) varargs

- 매개변수의 개수를 가변으로 입력하는 구조

func 함수이름(매개변수 : 자료형 ...)

- 내부적으로 처리할 때는 묶어서 배열로 간주

- 이 방식이 디비 연동 프레임워크에서 PreparedStatement 구조를 만들 때 ?를 사용하는 경우 ?에 값을 대입할 때 이용되는 경우와 출력하는 함수에 이용

 

print("Hello")

print("Jello","world")

print("hello","world","swift")

 

4) Call by Value & Call by Reference

- Call by Value: 매개변수의 자료형이 일반 데이터인 경우

값을 복사해서 대입하는 형태가 돼서 호출하는 곳의 데이터를 함수가 변경할 수 없다

자바에서 메소드에게 값을 넘겨주었으면 절대 값이 변경되지 않음

 

5) 복사

- 저장하고 있는 데이터를 그냥 대입

- weak copy: 참조하고 있는 데이터를 복사 - 재귀적 복사 x

- deep copy: 참조하고 있는 데이터를 복사 - 재귀적 복사 o

 

참조형 -> 참조형 -> 일반값: weak copy는 일반값을 복제하지 않고 두번째 있는 참조형의 데이터만 복제하고, 거기서 다시 한번 찾아가서 일반값 복사

deep copy는 일반 값이 나올 때까지 재귀적으로 찾아가서 값을 복사

 

- Call by Reference: 매개변수의 자료형이 참조형인 경우

저장하고 있는 값이 참조라서 참조를 복사해서 대입하는 형태가 돼서 호출하는 곳의 데이터를 함수가 변경할 수 있다.

자바에서 메소드에게 참ㅈ도를 넘겨주었으면 값이 변경될 수 있다

 

함수는 일급 객체 -> 다른 함수의 매개변수로써 전달하기 위해서 자주 사용

 

 

 

- 매개변수에 기본값을 미리 지정해둘수 있음

   (기본값 매개변수는 뒤쪽에 위치하는것이 좋음)

- swift에서 함수는 객체의 하나

 

func 함수이름(매개변수 이름: 매개변수 타입, ... 매개변수 이름: 타입 = 기본값){}

ex) func(a:int, b:int, str:String ="default var"){

    print()

}

default인자에 다른 값도 전달 가능
전달인자 레이블

전달인자 레이블

- 함수 호출시 매개변수의 역할을 명확히 하기 위함.

- 오버로딩 가능(정확히 오버로딩의 개념인지는 모르겠지만 오버로딩과 비슷)

 

가변 매개변수(String...)

가변 매개변수

- 매개변수의 개수를 정확히 정하기 어려울때 사용.

- 매개변수 타입 뒤에 <...> 붙임

 

함수타입 사용

 

 

'Swift' 카테고리의 다른 글

반복문  (0) 2020.07.07
Dictionary, Set  (0) 2020.05.06
Swift 변수, 상수  (0) 2020.04.20