Swift

[Swift] 구조체(Struct)란?

Hatchling.dev 2023. 6. 8. 02:51

(편의상 편한 말투로 작성하는 점 이해 부탁드립니다.😅)

(부정확한 정보가 있을 수 있습니다. 지적 환영🤩)

 

오늘은 Swift의 구조체(Struct)에 대해 알아보겠습니당!
구조체란 Swift가 제공하는 타입으로 프로그래머가 프로퍼티나 메서드를 용도에 맞게 캡슐화하여 사용할 수 있습니다. 사실 이렇게 말하면 Class랑 뭐가 다른거지... 생각할 수 있지만 꽤 많은 부분이 다르답니다?!?! 이 부분은 다음에 깊게 살펴보도록 하고 오늘은 구조체에 대해 알아봅시당

 

구조체 특징

  1. 구조체는 상속이 불가능합니다. (하지만 프로토콜을 사용하여 요구사항을 정의할 수 있습니다!)
  2. 구조체는 값타입입니다. (Class는 참조타입! 이 둘의 차이는 다음에 이어서 하도록 하겠습니다!)
  3. Swift은 대부분 구조체로 구현되어 있습니다. (애플에서도 꼭 Class가 필요한 상황이 아니라면 구조체 사용을 권장하고 있습니다.)
  4. Swift의 데이터타입은 구조체로 구현되어 있습니다. (String, Int, Collection 등)

구조체를 사용하는 경우

  1. 하나 이상의 데이터를 하나의 데이터 타입으로 표현하고 싶을 때
  2. 객체를 복사하거나 전달할 때 참조 복사가 아닌 값 복사가 필요할 때
  3. 상속을 받거나 상속해주는 경우가 없을 때

구조체의 장점

  1. Stack 메모리에 저장되기 때문에 Heap에 저장되는 Class보다 속도가 빠르다. (구조체여도 Heap에 저장되는 경우도 있습니다! ex.String, Collection 등 가변길이타입)
  2. COW(Copy On Write)기법으로 복사하기 때문에 메모리를 효율적으로 관리할 수 있다.
  3. 값 자체를 복사하기 때문에 복사한 후에 값을 변경하더라도 원본에 영향을 주지 않는다.

사용 예시

struct 키워드를 사용하여 생성

구조체 이름은 대문자 카멜케이스를 사용

struct Student {
    var name: String
    var age: Int
	
    func introduce() {
        print("안녕하세요. 저는 \(name)이며 \(age)세 입니다.")
    }
}

var student = Student(name: "woo", age: 20)
print(student)    // Student(name: "woo", age: 20)
print(student.name)    // woo
print(student.age)    // 20
student.introduce()    // 안녕하세요. 저는 woo이며 20세 입니다.

 

오늘은 구조체에 대해 알아보았습니당!

구조체랑 클래스는 공통점도 많고 차이점도 많기 때문에 같이 포스팅할까 생각도 했지만 그렇게 되면 내용이 너무 길어질 것 같아 나누어 포스팅하기로 결정했습니다!

하지만 그렇다보니 내용이 조금 빠진 느낌도 들고 그러네요ㅠㅠ 다음에는 클래스에 대해 알아보고 그 후에 구조체와 클래스의 공통점, 차이점에 대해 알아보도록 하겠습니다!