Swift/기초

Swift 기초 다지기 - 구조체 (Struct) 그리고 클래스와의 차이점

박신혁 2024. 10. 7. 20:20

구조체 (Struct)

연관된 데이터(프로퍼티)와 기능(메서드)을 하나의 구조로 묶어 관리할 수 있는  타입

 

struct Person {
    
    //프로퍼티
    var name: String
    var age: Int
    
    // 메서드
    func introduce(){
        print("안녕하세요, 제 이름은 \(name) 이고, \(age)살 입니다.")
    }
}

// 인스턴스 생성 (철수 17세 라는 인스턴스)
let person1 = Person(name: "철수", age: 17)
person1.introduce() // 안녕하세요, 제 이름은 철수 이고, 17살 입니다.

 

struct 키워드로 선언, 기본값을 지정 안 해도 됨

프로퍼티 - 구조체 내에서 정의된 변수나 상수

메서드 - 구조체 내에서 정의된 함수


값 타입

인스턴스를 다른 변수나 상수에 할당하면 값이 복사되어 각각 독립적인 복사본이 생성

따라서 한 곳에서 값을 변경해도 다른 곳에는 영향을 주지 않음

 

// 인스턴스 생성 (철수 17세 라는 인스턴스)
let person1 = Person(name: "철수", age: 17)
person1.introduce() // 안녕하세요, 제 이름은 철수 이고, 17살 입니다.

var person2 = person1
person2.name = "영희"

person2.introduce() // 안녕하세요, 제 이름은 영희 이고, 17살 입니다.
person1.introduce() // 안녕하세요, 제 이름은 철수 이고, 17살 입니다.

 

person2의 name을 "영희"로 변경해도 person1의 name은 "철수"로 영향받지 않은걸 확인할 수 있다.

 

참조 타입인 클래스 와의 가장 큰 차이


그 외에 클래스와의 차이점

클래스는 상속을 지원한다.

구조체는 상속을 지원하지 않는다.

 

클래스는 힙 메모리에 저장됨

구조체는 스택 메모리에 저장됨

 

클래스는 기본 생성자가 지원되지 않고 모든 프로퍼티가 초기화 돼야 한다.

구조체는 자동으로 기본 생성자를 제공하고 기본값을 제공하지 않아도 된다.

 

클래스는 소멸자를 가질 수 있다, 메모리 해제등을 처리

구조체는 소멸자를 가질 수 없다.

 

728x90