ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Swift 5.6 Structures and Classes
    기술/iOS 2022. 3. 20. 17:44

    Structures and Classes

    다른 프로그래밍 언어와 달리 Swift 는 사용자 정의 구조체와 클래스에 대해 별도의 인터페이스와 구현 파일을 만들 필요가 없습니다. Swift 에서 단일 파일로 구조체 또는 클래스를 정의하면 해당 클래스 또는 구조체에 대한 외부 인터페이스가 자동으로 다른 코드에서 사용할 수 있습니다.

    Comparing Structures and Classes

    Swift 에서 구조체와 클래스는 공통점이 많습니다. 둘다 아래의 내용이 가능합니다.

    • 값을 저장하는 프로퍼티 정의
    • 기능 제공을 위한 메서드 정의
    • 서브 스크립트 구문을 사용하여 값에 접근을 제공하는 서브스크립트 정의
    • 초기화 상태를 설정하기 위한 초기화 정의
    • 기본 구현을 넘어 기능적 확장을 위한 확장
    • 특정 표준 기능을 제공하는 프로토콜 준수

    클래스는 구조체에 없는 추가적 기능이 있습니다.

    • 상속을 할 수 있습니다.
    • 타입 캐스팅을 사용하면 런타임에 클래스 인스턴스의 타입을 확인하고 해석할 수 있습니다.
    • 초기화 해제 구문을 사용하면 인스턴스가 할당된 리소스를 해제할 수 있도록 합니다.
    • 참조 카운팅은 하나 이상의 클래스 인스턴스 참조를 허락합니다.

    클래스가 지원하는 추가 기능은 복잡성이 증가합니다. 일반적 지침으로는 추론하기 쉬운 구조체를 선호하고 적절하거나 필요할 때 클래스를 사용합니다. 실질적으로 정의하는 대부분의 사용자 정의 데이터 타입이 구조체와 열거형이라는 것을 의미합니다.

    Definition syntax

    struct Resolution {
        var width = 0
        var height = 0
    }
    class VideoMode {
        var resolution = Resolution()
        var interlaced = false
        var frameRate = 0.0
        var name: String?
    }
    

    Structure and Class Instances

    인스턴스 생성 구문은 구조체와 클래스 모두 유사합니다.

    let someResolution = Resolution()
    let someVideoMode = VideoMode()
    

    Accessing Properties

    Memberwise Initializers for Structure Types

    모든 구조체는 새로운 구조체 인스턴스의 멤버 프로퍼티를 초기화할 때 사용할 수 있는 자동적으로 생성된 멤버별 초기화 구문을 가지고 있습니다.

    let vga = Resolution(width: 640, height: 480)
    

    구조체와 반대로 클래스 인스턴스는 멤버별 초기화를 받지 않습니다.

    Structures and Enumerations are Value Types

    값 타입은 변수 또는 상수에 할당될 때나 함수에 전달될 때 복사되는 값인 타입입니다.

    Classes are Reference Types

    값 타입과 반대로 참조 타입은 변수 또는 상수에 할당될 때나 함수로 전달될 때 복사되지 않습니다. 복사본 대신에 존재하는 같은 인스턴스에 대한 참조가 사용됩니다.

    Identity Operators

    클래스는 참조 타입이기 때문에 클래스의 단일 인스턴스에 참조하는 여러개의 상수와 변수가 가능합니다. 2개의 상수 또는 변수가 클래스의 같은 인스턴스를 참조하는지 확인하기 위해서 2가지 식별자를 제공합니다.

    • 동일 인스턴스 ( === )
    • 동일하지 않은 인스턴스 ( !== )

    '기술 > iOS' 카테고리의 다른 글

    Swift 5.6 Methods  (0) 2022.03.20
    Swift 5.6 Properties  (0) 2022.03.20
    Swift 5.6 Enumerations  (0) 2022.03.20
    Swift 5.6 Closures  (0) 2022.03.20
    Swift 5.6 Functions  (0) 2022.03.20

    TAG

    댓글 0

Designed by Tistory.