[iOS] 2주차 정리

Zoe·2022년 6월 7일
0

iOS

목록 보기
3/39

2주차 정리


✅ 함수(Function)

1️⃣ 아규먼트 레이블(Argument Lable)

  • 사용 안 하면 파라미터 이름이랑 아규먼트 레이블이랑 같음.
  • 장점 : 더 명확하게 무엇을 요구하는지 알 수 있음
  • 와일드카드 패턴 : 생략해서 사용 가능, 너무나도 명확한 경우에 생략

2️⃣ 가변 파라미터

  • 파라미터의 개수가 정해지지 않은 경우
  • 아규먼트가 배열 형태로 전달된 것
  • Ex) 평균을 구하는 경우

3️⃣ 파라미터에 기본값 정하기

  • print(items: Any..., separator: " ", terminator: "\n")
  • items: Any... : 가변 파라미터가 쓰이고 있음.
  • 즉, 기본값이 이미 설정되어 있어서 생략한 개념

3️⃣ 파라미터는 상수

  • 함수 내부에서 변경할 수 없음
  • 바꾸고 싶으면 다시 선언해서 할당해주기

4️⃣ return type이 없는데 작성한 경우

  • 함수를 벗어난다는 의미

5️⃣ 중첩 함수

  • 함수 안에 함수
  • 해당 함수 안에서만 사용 가능, 범위 제한적

6️⃣ 표기법

  • why ? 함수를 지칭할 때 사용하기 위함. 가리키기 위함.
// 1) 파라미터가 없는 경우, ()를 삭제

var some = doSomething
some()

// 2) 아규먼트 레이블이 있는 경우, 아규먼트 레이블까지를 함수의 이름으로 봄

numberPrint(n:)        //  "numberPrint n 함수이다."

// 3) 파라미터가 여러개인 경우, 콤마없이 아규먼트이름과 콜론을 표기

chooseStepFunction(backward:value:)

// 4) 아규먼트 레이블이 생략된 경우, 아래와 같이 표기

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함수 덕분임
profile
iOS 개발자😺

0개의 댓글