[iOS 2주차] Swift: class vs struct

DoyleHWorks·2024년 10월 28일
0

classstruct는 개념은 비슷하지만 메모리 측에서는 동작하는 방법이 다르기 때문에 헷갈리는 개념이라고 한다.
심화 강의에서 더 자세하게 배울 예정이지만, 지금까지 배운 것을 토대로 간단히 차이점과 공통점을 정리해보는 게 좋을 것 같다.

class vs struct

공통점

  • 프로퍼티메소드로 구성되어 있다.
  • 인스턴스를 생성하여 사용할 수 있다. (비유: 붕어빵틀과 붕어빵, 자동차 설계도와 자동차)
  • 데이터타입으로 사용할 수 있다.

차이점

classstruct
초기화 (init)직접 초기화해줘야됨 (모든 프로퍼티가 Default 값 정해졌거나 Optional인 경우 제외)직접 초기화도 가능하지만, 하지 않더라도 자동 초기화됨 (memberwise initializer)
이니셜라이저convenience initializermemberwise initializer
인스턴스 타입Reference TypeValue Type
프로퍼티함수에 class의 인스턴스를 전달하고 프로퍼티를 변경하면 원본도 변경됨struct의 인스턴스는 값이 복사되므로, 서로 다른 값으로 처리됨
인스턴스를 let으로 선언 시프로퍼티 변경 가능프로퍼티 변경 불가능
상속가능 (참조: 객체지향프로그래밍)불가능
소멸자 (deinit)class에서만 사용 가능struct에는 없음
mutatingclass에서는 딱히 쓰지 않아도 됨 (없는 듯?)프로퍼티를 변경하는 함수 앞에는 꼭 붙여줘야 함 (안그럼 오류남)

인사이트

  • 계산기 과제에서 class와 class끼리 관계를 맺어야 한다는 말이 이해가 잘 안되었는데, 객체지향프로그래밍이란 걸 살펴봐야겠다.
    • 근데 상속은 하위클래스랑 상위클래스의 관계가 있는 것 같은데, class와 class의 관계라는 게 꼭 그런 것만 있는지 잘 모르겠다.
    • Double이나 String 이런 것도 클래스니까.. 이미 일종의 상속을 받고 있는건지?? 모르겠다.. 더 배우자;
  • 사용법은 비슷한데 생각보다 다른 점들이 많다.
    • 레퍼런스 타입은 class의 구조를 그대로 가져가 메모리 어딘가에 참조를 시키는 것이고, 밸류 타입은 똑같은 것을 복사해서 그대로 선언해버리는 건가??
    • 이렇게 생각하면 알듯말듯 납득이 가는데, 자세한 건 더 공부해야겠다.
    • 만약에 이 추측이 맞다면, 공통점에 쓴 비유(붕어빵틀과 붕어빵)가 struct에는 미묘하게 안 맞는 것 같다.
      • 추가(2024-11-04): 레퍼런스 타입은 코드에 고정된 설계도를 가져와서 인스턴스를 선언하면, 그 인스턴스에 주소값이 부여된다. 이 주소값을 기준으로 인스턴스는 !! 밸류 타입이 오히려 붕어빵에 가까운 것 같다. (링크)
profile
Reciprocity lies in knowing enough

0개의 댓글