Swift에서의 "함수"는 일급객체이며, 다른 언어에서보다 훨씬 다양한 모습으로 작성할 수 있다.
따라서 협업자끼리 코딩 규칙을 정하는 것이 매우 중요하다!
- Swift는 오버로딩, 오버라이딩 모두 지원
- 전달인자 레이블 이름만 달라도 다른함수!! -> 오버로딩됨!!
- 매개변수 기본값은 다른 언어와 같은 방식으로 사용 가능 ( 기본값 있는건 뒷쪽에 사용!)
func 함수이름(전달인자 레이블 매개변수 이름: 매개변수 타입, ....) -> 반환형 { ... }
전달인자 레이블로 외부에서의 역할에 대한 명칭을 붙여줄 수 있다!
사용하고싶지 않으면, func 함수이름( 매개변수 이름: 매개변수 타입, ....) -> 반환형 { ... } 와 같이 와일드카드 사용하면 함수 외부, 내부에서 ( 내부 구현할 때와 외부에서 호출할 때 같은 이름으로 설정 가능)
- 0개 이상(0개 포함)의 가변매개변수를 받아 "배열"처럼 사용 가능- 함수마다 가변매개변수는 "하나" 가질 수 있다.
- C포인터와 유사. 함수 내부에서 참조하여 원래 값 변경!
- 데이터타입으로 사용 가능
- 전달인자
- 반환값이 될 수 있다.
Swift에서는 클래스 안의 클래스, 열거형 안의 열거형, 함수 안의 함수 등 다양한 중첩 패턴을 만들어 볼 수 있다.
##중첩함수
- 상위 함수 블록 내부에서만 사용 가능 ( 내부의 함수를 return해주어 밖에서 사용 가능하게 하는 방법도 있음 )
- 굳이 전역모듈로 사용할 필요 없는 함수 => 함수 안쪽으로 배치하여 중첩함수로 구현
- 함수의 사용범위를 명확, 깔끔 표현가능!
비반환 함수 = 종료되지 않는 함수의 return타입은 Never로 명시해주면 된다.
return값을 사용하지 않아도 경고가 뜨지 않는다!
Swift에서의 "Optional"은 안정성 (null safety)를 담보해주는 기능이다.
함수형 프로그래밍 패러다임에 자주 등장하는 Monad 개념과 일맥상통!
- nil은 옵셔널 변수 혹은 옵셔널 상수에만 사용 가능
## 어디서 옵셔널을 사용하는가?
- 값이 있을 수도, 없을 수도 있다는 의미
- 매개변수를 굳이 넘기지 않아도 된다는 뜻
- nil을 반환하여 오류가 있음을 알리는 용도
이처럼 하나의 기능으로 여러 의미를 내포하여 원활한 의사소통이 가능하다.
## 옵셔널은 제네릭이 적용된 열거형!!
- switch 구문을 통해 값이 있고 없음을 확인할 수 있다.
nil일 때는 none케이스가 되는 것,
값이 있을 때는 some케이스가 되며, 해당 값이 some케이스의 연관값인 Wrapped에 할당되는 것!
따라서 옵셔널 자체가 열거형이므로 switch구문을 통해 값의 유무를 확인하는 것
## 1. 강제 추출
- !사용하여 강제 추출하여 반환
- nil이라면 런타임오류 발생
- if문으로 체크하여 한 층 안전하게 처리 가능
ex) if a != nil { ~~~} else { ~~}
## 1. 옵셔널 바인딩
- if let 혹은 if var
- if, else if, else모두 가능
- 아래 코드의 str같은 임시 상수(혹은 변수)는 if블록 밖에서는 사용 불가!!
- 여러 변수 동시에 옵셔널 바인딩 가능 (but, 그 중 하나라도 nil이면 실행 X)
이외에도 var a: String! = "str..."과 같은 암시적 추출 옵셔널이 있지만 사용 비추..
Swift언어6 - 함수형 프로그래밍_클로저 (0) | 2022.10.01 |
---|---|
Swift언어 복습노트 5 - 구조체와 클래스 그리고 instance(작성중) (0) | 2022.09.10 |
Swift언어 복습노트 3 - 흐름제어 in Swift (0) | 2022.09.10 |
Swift언어 복습노트2 - 컬렉션 타입과 연산자 (0) | 2022.05.23 |
Swift언어 복습노트1 - data type (0) | 2022.05.21 |