2주차 정리
✅ 함수(Function)
1️⃣ 아규먼트 레이블(Argument Lable)
- 사용 안 하면 파라미터 이름이랑 아규먼트 레이블이랑 같음.
- 장점 : 더 명확하게 무엇을 요구하는지 알 수 있음
- 와일드카드 패턴 : 생략해서 사용 가능, 너무나도 명확한 경우에 생략
2️⃣ 가변 파라미터
- 파라미터의 개수가 정해지지 않은 경우
- 아규먼트가 배열 형태로 전달된 것
- Ex) 평균을 구하는 경우
3️⃣ 파라미터에 기본값 정하기
- print(
items: Any...
, separator: " "
, terminator: "\n"
)
items: Any...
: 가변 파라미터가 쓰이고 있음.
- 즉, 기본값이 이미 설정되어 있어서 생략한 개념
3️⃣ 파라미터는 상수
- 함수 내부에서 변경할 수 없음
- 바꾸고 싶으면 다시 선언해서 할당해주기
4️⃣ return type이 없는데 작성한 경우
5️⃣ 중첩 함수
- 함수 안에 함수
- 해당 함수 안에서만 사용 가능, 범위 제한적
6️⃣ 표기법
- why ? 함수를 지칭할 때 사용하기 위함. 가리키기 위함.
var some = doSomething
some()
numberPrint(n:)
chooseStepFunction(backward:value:)
addPrintFunction(_:_:)
7️⃣ 함수도 타입이 있다
var function1: (Int) -> () = numberPrint(n:)
var function2: (Int, Int) -> () = addPrintFunction(_:_:)
function2(3, 5)
8️⃣ 오버로딩
- 왜 편할까? 하나의 함수에 여러 개를 대응시켜서 개발자가 쓰기 쉽게 만든 것
9️⃣ 함수실행의 메모리 구조
- 함수 실행이란 스택프레임을 만드는 것
- 데이터와 힙 영역은 공유하는 영역, 스택에서 언제든지 접근 가능
- 조건문과 반복문은 스택프레임을 만드는 행위가 아님. 새로운 메모리 영역을 만드는 것이 아님. cpu에서 동작하는 것.
✅ 암시적 추출 옵셔널
- 실제 앱 구현시 IUO타입은 개발자가 실수할 가능성을 낮춰주는 역할
class MyViewController: UIViewController {
@IBOutlet weak var imageView: UIImageView!
@IBOutlet weak var mainLabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
imageView.image = UIImage(systemName: "pencil")
mainLabel.font = UIFont.boldSystemFont(ofSize: 18.0)
}
}
✅ Hashable
- 딕셔너리에서 설명
- 어떤 타입이 Hashable이라는 뜻은 해당 타입을 해시함수의 input값으로 사용가능하다는 뜻
- 어떤 숫자/글자 등을 input -> output : 고정된 길이의 숫자 or 글자이면서 유일한 값
- 같은 input에 대해 항상 같은 output
- 딕셔너리 키를 다른 값으로 볼 수 있는 이유도 이 hash함수 덕분임