본문 바로가기

programmer '프로그래머'

struct, class 와 예시

Swift에서 class와 struct는 객체지향 프로그래밍에서 중요한 역할을 하는 두 가지 데이터 타입입니다. 둘 다 여러 속성(properties)과 메서드(methods)를 포함할 수 있지만, 메모리 관리와 사용 방식에서 차이가 있습니다. 아래에 class와 struct의 사용 예시를 각각 보여드리겠습니다.

'struct'

struct Person {
    var name: String
    var age: Int
    
    // 메서드 추가
    func greet() {
        print("Hello, my name is \(name) and I am \(age) years old.")
    }
    
    // 속성 값 수정 메서드
    mutating func haveBirthday() {
        age += 1
    }
}

// 구조체 인스턴스 생성
var person1 = Person(name: "John", age: 25)
person1.greet() // "Hello, my name is John and I am 25 years old."

// 속성 값 수정
person1.haveBirthday()
print(person1.age) // 26

// 값 타입 특성: person2는 person1의 복사본
var person2 = person1
person2.name = "Jane"
person2.age = 30

print(person1.name) // "John"
print(person2.name) // "Jane"

'struct'는 값 타입(value type)이기 때문에 person1 person2는 서로 독립적으로 존재합니다. 즉, person2의 값을 수정해도 person1에 영향을 주지 않습니다.

'class' 사용 예시

class Car {
    var model: String
    var year: Int
    
    // 클래스의 생성자
    init(model: String, year: Int) {
        self.model = model
        self.year = year
    }
    
    // 메서드 추가
    func displayDetails() {
        print("Car model: \(model), year: \(year)")
    }
}

// 클래스 인스턴스 생성
let car1 = Car(model: "Tesla Model S", year: 2023)
car1.displayDetails() // "Car model: Tesla Model S, year: 2023"

// 참조 타입 특성: car2는 car1의 참조
let car2 = car1
car2.model = "Tesla Model 3"
car2.year = 2024

print(car1.model) // "Tesla Model 3"
print(car2.model) // "Tesla Model 3"

'class'는 참조 타입(reference type)이므로 car1과 car2는 동일한 인스턴스를 참조합니다. 따라서 car2의 값을 수정하면 car1에도 동일하게 반영됩니다.

'struct' 'class'의 주요 차이점

값 타입 vs 참조 타입: struct는 값 타입이고, class는 참조 타입입니다. 값 타입은 복사되어 독립적인 인스턴스가 생성되며, 참조 타입은 동일한 인스턴스를 참조합니다.

상속: class는 상속을 지원하지만, struct는 상속을 지원하지 않습니다.

디이니셜라이저: class는 소멸자(deinitializer)를 지원하지만, struct는 지원하지 않습니다.

이러한 차이점을 바탕으로, 필요한 기능에 맞게 'struct' 또는 'class' 를 선택하여 사용할 수 있습니다.

 

'programmer '프로그래머'' 카테고리의 다른 글

UILabel 속성  (0) 2024.09.04
UITextField 속성  (0) 2024.09.03
옵셔널 사용한 예시  (0) 2024.08.30
Array 를 사용하는 예시 코드  (0) 2024.08.29
'if-else' 문에 대한 예시 코드  (0) 2024.08.28