- inout 매개변수
- 가변 매개변수 (...) : 여러 개의 타입을 가변 매개변수로 사용 가능
## 반환값
- Implicit return / 생략 가능
- 반환값 없음 void, [], ()
- @discardableResult
- print vs return
- https://www.hackingwithswift.com/forums/swift/about-print-and-return-what-makes-them-different-from-each-other/1382
# 프로퍼티/메서드
- 인스턴스 : let var func
- 타입 : static, class - 메모리에 한번만 올라감, 앱 종료시까지 유지됨, 컬러/폰트 등에 사용, 처음 접근시에 올라감(지연 초기화 방식으로 동작)
# 프로퍼티
- 저장(stored) : 메모리에 공간 필요
- 연산(computed) : 메모리에 공간 불필요, 열거형에서 많이 보임, get/set 구문(set: newValue)
- 옵저버(observer) : willSet(newValue), didSet(oldValue)
### mutating
- 값 타입의 경우 기본적으로 수정이 불가능함
- 값을 변화시키고 싶을 때 mutating 키워드를 사용함
- https://velog.io/@wonhee010/mutating
# 클래스 vs 구조체
|클래스|구조체|
|:--|:--|
|참조 타입|값 타입|
|상속 o|상속 x|
|타입 캐스팅 가능|-|
|타입 캐스팅에서 에러가 발생하면 런타임 에러 발생||
|ARC||
||멤버와이즈 이니셜라이저|
## Dispatch
- static vs dispatch
- 메서드가 메모리에서 동작하는 방식
### Static Dispatch
- 성능 최적화와 관련
- final keyword (컴파일 타임에 확인할 것이 줄어듬, 범주 제한)
- class는 기본적으로 Dynamic Dispatch로 동작 (final class -> static dispatch로 동작하도록 변경)
- https://jcsoohwancho.github.io/2019-10-11-Dynamic-Dispatch%EC%99%80-%EC%84%B1%EB%8A%A5-%EC%B5%9C%EC%A0%81%ED%99%94/
함수
조건문의 사용
매개변수
// 오버로딩 가능 // greeting() // greeting(to:)