2020. 5. 6. 22:49ㆍSwift
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()
}
전달인자 레이블
- 함수 호출시 매개변수의 역할을 명확히 하기 위함.
- 오버로딩 가능(정확히 오버로딩의 개념인지는 모르겠지만 오버로딩과 비슷)
가변 매개변수
- 매개변수의 개수를 정확히 정하기 어려울때 사용.
- 매개변수 타입 뒤에 <...> 붙임
함수타입 사용
'Swift' 카테고리의 다른 글
반복문 (0) | 2020.07.07 |
---|---|
Dictionary, Set (0) | 2020.05.06 |
Swift 변수, 상수 (0) | 2020.04.20 |