Swift 정리(2)
Taehyeon-Kim opened this issue · 0 comments
Taehyeon-Kim commented
함수
함수, 매개변수, 반환값
조건문의 사용
- 단락평가 (논리식에서 결과 도출에 필요한 최소한의 코드 조건만 실행하는 것)
- Short Circuit Evaluation
- https://velog.io/@din0121/Operator
매개변수
- 외부(argument label) : 함수 호출 시에 사용, argument : call 시에 실제 사용되는 값
- 내부(parameter) : 함수 안에서 사용
- https://eunjin3786.tistory.com/465
- 와일드 카드(_) 패턴 : 외부 매개변수 대체
- 매개변수의 기본값 : 전달되는 인자가 없을 때 기본적으로 사용되는 값
func greeting(to name: string = "손님")
// 오버로딩 가능
// greeting()
// greeting(to:)
- 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/