구조체와 클래스

박형석·2021년 12월 13일
0

Swift

목록 보기
13/20
post-thumbnail

공통점

  • 값을 저장하기 위해 프로퍼티 정의
  • 기능 실행을 위해 메서드 정의
  • 프로퍼티에 접근하도록 서브스크립트 정의
  • 이니셜라이저 정의(구조체는 멤버와이즈)
  • 익스텐션 확장 가능
  • 프로토콜 채택 및 준수 가능

차이점

  • 구조체 상속 X
  • 타입캐스팅은 클래스 인스턴스만 허용
  • 디이니셜라이즈는 클래스에만 활용
  • ARC도 클래스에만 활용

값 타입 vs 참조 타입

이 둘의 가장 큰 차이는 "무엇이 전달되느냐"이다.

  • 값 타입은 전달될 값이 복사
    • 값 타입 데이터를 함수 파라미터로 전달하면 메모리에 전달인자를 위한 인스턴스가 새로 생성, 값이 복사되어 들어간다.
  • 참조 타입은 참조(주소)가 전달
    • 기존 인스턴스의 참조만 전달한다. 변수에 할당 될 때도 마찬가지다.
    • 클래스 인스턴스끼리 참조가 같은지 비교할 때는 식별 연산자(===, !==)

구조체와 클래스 선택

  • 다음 조건 중 하나 이상에 해당한다면 구조체를 사용하는 것을 권장
    • 연관된 간단한 값의 집합을 캡슐화하는 것만이 목적일 때
    • 캡슐화한 값을 참조하는 것보다 복사하는 것이 합당할 때
    • 구조체에 저장된 프로퍼티가 값 타입이며, 참조하는 것보다 복사하는 것이 합당할 때
    • 다른 타입으로 상속받거나 자신을 상속할 필요가 없을 때
  • 대다수 사용자 정의 타입은 클래스로 구현할 일이 많다.
profile
IOS Developer

0개의 댓글