[Swift] Method Dispatch

Method Dispatch


매서드 디스패치

  • 클래스, 프로토콜의 메서드가 실행되는 방식

Direct Dispatch (직접 / Static)

  • 컴파일 시점에 코드 자체에 함수의 메모리 주소 삽입 또는 함수의 명령 코드를 해당 위치에 코드를 심음 (in-line)
  • 가장 빠른 속도 (0.0 - 2.13ns)
  • 밸류 타입(구조체/열거형)에 사용
  • 상속 / 다형성의 장점을 누릴 수 없음

```swift struct MyStruct { func method1() { print(“Struct - Direct method1”) } // 90~99 메모리 주소에 저장 func method2() { print(“Struct - Direct method2”) } // 100~109 메모리 주소에 저장 }

Continue reading

[Swift] Closure

Closure


클로저

클로저와 함수는 기능은 완전히 동일한데, 형태만 다르다고 생각하면 됨
(파이썬의 lambda / C언어의 Block)

  • 함수 : 이름이 있는 코드 묶음 -> 다른 코드가 함수 이름으로 호출하기 위함
    func myFunction() -> Int {
      // function
      return ...
    }
    
  • 클로저 : 이름이 없는 코드 묶음 -> 굳이 이름이 없어도 호출할 수 있는 형태로 사용 가능
    {() -> Int in
      // closer
      return ...
    }
    // 보통 컴파일러의 타입 추론이 가능한 경우 리턴형에 대한 표기를 생략하여 많이 사용한다.
    

스위프트는 함수를 일급 객체로 취급 (함수는 타입의 형태)

  • 함수를 변수에 할당할 수 있음
  • 함수를 호출할 때, 함수를 파라미터로 전달할 수 있음
  • 함수에서 함수를 반환할 수 있음

Continue reading

[Swift] Protocol

Protocol


프로토콜

  • 특정 기능에 필요한 메소드, 프로퍼티 등을 정의만 해놓은 것
  • 클래스와 상속의 단점
    • 하나의 클래스만 상속 가능 (스위프트에서는 다중 상속 불가능)
    • 기본적인 상위 클래스의 메모리 구조를 따라갈 수 밖에 없음 (필요하지 않은 속성/메서드도 상속)
    • 클래스(레퍼런스 타입)에서만 가능
  • 스위프트는 프로토콜 지향 언어 (Protocol-Oriented Language)
    • 스위프트 표준 라이브러리를 보면 대부분 구조체로 기본 타입이 구현되어있음
    • 클래스와는 달리 상속이 불가능한 구조체로 다양한 공통 기능을 가질 수 있는 이유는 Protocol, Extension, Generic 때문

```swift class Bird { var isFemale = true func layEgg() { if isFemale { print(“새가 알을 낳는다.”) } } func fly() { print(“새가 하늘로 날아간다.”) } }

Continue reading

[Swift] Type Casting

Type Casting


타입 캐스팅

  • 인스턴스 사용시에 어떤 타입으로 사용할지(속성/메서드) 메모리구조에 대한 힌트를 변경하는 것
  • 메모리의 값을 수정하는 것이 아니라 단순히 해당 타입의 인스턴스인 것처럼 취급하려는 목적

is 연산자 : 인스턴스 타입을 검사
as 연산자 : 클래스 계층 상의 타입 변환

is 연산자 (type check operator)

Continue reading

Pagination


© 2021. by hminkim