class vs struct

torinunna·2023년 7월 28일

Swift

목록 보기
1/2

✅ 공통점

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

🔖 클래스(Class)

  • 참조 타입: 같은 클래스의 인스턴를 여러 개의 변수를 할당한 뒤 값을 변경시키면 모든 변수에 영향
  • ARC(Automatic Reference Counting)로 메모리 관리: heap에 저장
  • 상속 가능
  • 타입 캐스팅을 통해 런타임에서 클래스 인스턴스의 타입 확인
  • deinit을 사용하여 클래스 인스턴스의 메모리 할당 해제 가능
  • 같은 클래스 인스턴스를 여러 개의 변수에 할당한 뒤 값을 변경 시키면 모든 변수에 영향을 줌(메모리가 복사 됨)
class SomeClass {
    var count: Int = 0
}

var class1 = SomeClass()
var class2 = class1
var class3 = class1

class3.count = 2
class1.count       //2
class2.count       //2
class3.count       //2

❗️ 클래스를 사용하는게 좋은 경우

  • Objective-C와 상호 운용이 필요

🔖 구조체(Struct)

  • 값 타입
  • stack에 저장 -> ARC 관리 X
  • 상속 불가
  • 구조체 변수를 새로운 변수에 할당할 때마다 새로운 구조체 할당
  • 즉 같은 구조체를 여러 개의 변수에 할당한 뒤 값을 변경시키더라도 다른 변수에 영향을 주지 않음(값 자체를 복사)
struct SomeStruct {
    var count: Int = 0
}

var struct1 = SomeStruct()
var struct2 = struct1
var struct3 = struct1

struct2.count = 3
struct3.count = 4

struct1.count       //0
struct2.count       //3
struct3.count       //4

❗️ 구조체를 사용하는게 좋은 경우

  • 연관된 간단한 값의 집합을 캡슐화가 목적
  • 값을 참조하는 것보다 복사하는 것이 합당
  • 상속받거나, 상속할 필요가 X
profile
ios가 궁금해!

1개의 댓글

comment-user-thumbnail
2023년 7월 28일

많은 도움이 되었습니다, 감사합니다.

답글 달기