[iOS] Swift - Struct

김말이·2023년 8월 13일
0

✏️구조체

구조체란 사용자가 정의하여 사용하는, 사용자 정의 자료형으로 하나 이상의 변수들을 그룹화하여 새로운 자료형을 만드는 것이다.

스위프트에서의 구조체 형태

struct 이름 { 내용 }

예시

구조체 안의 변수 : "속성(property)"
구조체 안의 함수 : "메소드(method)"

// 구조체
struct Sample{
	var mutableProperty: Int = 100 // 가변 프로퍼티
    let immutableProperty: Int = 100 // 불변 프로퍼티
    
    static var typeProperty // 타입 프로퍼티
    
    func instanceMethod() { } // 인스턴스 메소드
    static func typeMethod() { } // 타입 메소드
    
}
// 사용예시
var exampleStruct : Sample = Sample()
print(exampleStruct.mutableProperty)
exampleStruct.instanceMethod()

✏️클래스와 구조체의 차이

💡클래스와 구조체의 차이점을 알고 적절하게 사용할 수 있어야 한다

공통점

  • 값을 저장할 프로퍼티를 선언할 수 있다
  • 함수적 기능을 하는 메서드를 선언 할 수 있다
  • 내부 값에. 을 사용하여 접근할 수 있다
  • 생성자를 사용해 초기 상태를 설정할 수 있다
  • extension을 사용하여 기능을 확장할 수 있다
  • Protocol을 채택하여 기능을 설정할 수 있다

차이점

Class (클래스)

  • 참조 타입이다 (Reference Type)
    • Reference 값을 공유하며 같은 리소스를 향하는 Shallow Copy가 일어남
  • ARC로 메모리를 관리한다
  • 같은 클래스 인스턴스를 여러 개의 변수에 할당한 뒤 값을 변경시키면 할당한 모든 변수에 영향을 준다 (메모리만 복사)
  • 상속을 할 수 있다
  • 타입 캐스팅을 통해 런타임에서 클래스 인스턴스 타입을 확인할 수 있다
  • deinit을 사용하여 클래스 인스턴스의 메모리 할당을 해제할 수 있다

Struct (구조체)

  • 값 타입이다 (Value Type)
    • 새로운 Struct에 이미 존재하는 Struct를 할당하면 독립된 공간을 사용하고 값만 같은 Deep Copy가 일어남
  • 상속을 받는 것, 시키는 것이 불가능하다
  • 구조체 변수를 새로운 변수에 할당할 때마다 새로운 구조체가 할당된다
    • 같은 구조체를 여러 개의 변수에 할당한 뒤 값을 변경시키더라도, 값 자체를 복사했기 때문에 다른 변수에 영향을 주지 않음
  • 한 번 생성되면 변경할 수 없다. 값을 바꾸려면 새로운 struct를 생성해야 한다

Struct는 언제 사용하는 것이 좋을까.

  • 연관된 간단한 값의 집합을 캡슐화하는 것만이 목적일 경우
  • 캡슐화한 값을 참조하는 것보다 복사하는 것이 합당할 때
  • 구조체에 저장된 프로퍼티가 값 타입일 때
  • 다른 타입으로부터 상속받거나, 자신을 상속할 필요가 없을 때

💡기본적으로 Struct를 사용하고, 상속이 필요한 경우에만 Class로 바꾸는 방법을 애플에서 공식적으로 장려한다.

Struct가 유연성은 부족하지만, Class보다

  • 간단하고 더 빠르다
  • True immutability를 지원한다
  • Memory leak이 적다
  • thread safety를 더 보장한다
profile
공부해서 남주자

1개의 댓글

comment-user-thumbnail
2023년 8월 13일

정보 감사합니다.

답글 달기