[swift] 구조체 데이터 타입과 관련된 Swift의 기능

Swift는 객체 지향 프로그래밍 언어이며, 클래스와 구조체를 사용하여 데이터를 모델링하고 관리할 수 있습니다. 이번 블로그에서는 구조체 데이터 타입과 관련된 Swift의 기능에 대해 살펴보겠습니다.

구조체란?

구조체는 관련된 데이터를 그룹화하는 데 사용되는 일종의 데이터 타입입니다. 클래스와 마찬가지로 속성과 메서드를 가질 수 있습니다. 하지만 구조체는 값(Values) 타입이기 때문에 참조(Reference) 타입인 클래스와는 다른 특징을 갖고 있습니다.

구조체의 장점

구조체는 다음과 같은 장점을 갖고 있습니다.

1. 값 복사

구조체는 값 복사를 통해 동작하기 때문에, 새로운 인스턴스를 만들 때마다 원래의 데이터를 복사하기 때문에 원본 데이터가 변경되지 않습니다. 이는 데이터의 예측 가능성과 안정성을 높여줍니다.

2. 상속 불가능

구조체는 상속이 불가능하기 때문에 복잡한 상속 계층구조를 걱정할 필요가 없습니다. 상속이 필요하지 않은 간단한 데이터 구조를 설계할 때 유용합니다.

기능

1. 속성 (Properties)

구조체는 속성을 가질 수 있으며, 속성은 저장형 속성과 연산형 속성으로 구분됩니다. 저장형 속성은 값을 저장하는데 사용되며, 연산형 속성은 값을 계산하거나 다른 속성에 의존하는 연산을 수행하는데 사용됩니다.

struct Person {
    var name: String
    var age: Int
    
    var isAdult: Bool {
        return age >= 18
    }
}

2. 메서드 (Methods)

구조체는 메서드를 가질 수 있으며, 메서드는 특정 작업을 수행하기 위해 사용됩니다. 메서드는 구조체 내에서 값을 수정할 수 있습니다.

struct Rectangle {
    var width: Double
    var height: Double
    
    func area() -> Double {
        return width * height
    }
}

let rect = Rectangle(width: 10, height: 5)
let area = rect.area() // 50.0

3. 이니셜라이저 (Initializer)

구조체는 이니셜라이저를 사용하여 인스턴스를 초기화할 수 있습니다. 일반적으로 속성을 초기화하는 이니셜라이저가 자동으로 생성되지만, 필요에 따라 사용자 정의 이니셜라이저를 작성할 수도 있습니다.

struct Point {
    var x: Double
    var y: Double
    
    init(x: Double, y: Double) {
        self.x = x
        self.y = y
    }
}

let point = Point(x: 3, y: 4)

4. 확장 (Extensions)

구조체에는 확장(Extension)을 통해 기능을 추가할 수 있습니다. 이를 통해 구조체를 기존 코드와 함께 확장하거나 외부 라이브러리의 기능을 추가할 수 있습니다.

extension Rectangle {
    func isSquare() -> Bool {
        return width == height
    }
}

let square = Rectangle(width: 5, height: 5)
let isSquare = square.isSquare() // true

위의 예제에서는 Rectangle 구조체에 isSquare 메서드를 확장하여 정사각형인지 체크하는 기능을 추가했습니다.

결론

구조체는 Swift에서 중요한 데이터 모델링 도구입니다. 값 복사, 상속 불가능, 속성, 메서드, 이니셜라이저, 확장 등 다양한 유용한 기능들을 제공합니다. 적절히 활용하여 코드를 간결하고 유지보수하기 쉽게 작성할 수 있습니다.

더 많은 자세한 내용은 Swift 공식 문서를 참고하시기 바랍니다.