반응형
Greensky0026
삽질러의 대환장 공사판
Greensky0026
전체 방문자
오늘
어제
  • 분류 전체보기 (241)
    • Language (56)
      • JAVA (13)
      • Swift (38)
      • Kotlin (4)
      • Dart (0)
      • PHP (0)
      • JavaScript (1)
    • IDE & Framework (92)
      • Spring (10)
      • Android (48)
      • iOS (8)
      • NodeJS (1)
      • CodeIgniter (3)
      • Flutter (1)
      • 분류중 (18)
    • Infra (8)
    • Database (12)
    • VCS (4)
    • Debug Log (34)
      • java (7)
      • swift (3)
      • Android (9)
      • Web (7)
      • 삽질기 (7)
    • Others (19)
      • 코딩테스트 풀이 (0)
      • IT 이야기 (18)
    • 쉼터 (2)
    • 개발공부 (14)
      • Network (1)
      • 자료구조와 알고리즘 (2)
      • Code design (8)
      • ETC (1)
      • 아카이브 (1)

블로그 메뉴

    공지사항

    • 프로그래머스 코딩 테스트 관련글 비공개 처리

    인기 글

    태그

    • level1
    • map
    • reduce
    • 개발
    • IT
    • ios
    • 프로그래밍
    • kotlin
    • 예제
    • JSP
    • 코딩테스트
    • 프로그래머스
    • 공부
    • Android
    • 타입
    • swfit
    • xcode
    • Java
    • 구축
    • swift

    최근 댓글

    최근 글

    티스토리

    hELLO · Designed By 정상우.
    Greensky0026

    삽질러의 대환장 공사판

    Swift 사용자 정의 타입 - 값타입과 참조 타입 [추가정리]
    Language/Swift

    Swift 사용자 정의 타입 - 값타입과 참조 타입 [추가정리]

    2021. 3. 11. 18:58
    반응형

    사용자 정의 타입에서 나온 3가지 종류 기억하시나요?

    구조체, 클래스, 열거형 세 종류입니다.

    이 세 종류를 타입으로 분류하면 다음과 같습니다.

     

     

    값 타입 : 구조체, 열거형

    참조 타입 : 클래스

     

    그리고 참조타입은 값 타입과 달리,

    상속이 가능하고 deinit 및 참조횟수 계산이 가능합니다.

    더불어 인스턴스에 타입 캐스팅이 가능합니다.

     

    그리고 차이점을 추가로 더 서술해 보겠습니다.

    struct One{
    	var value = 1
    }
    
    let str = One()
    var str2 = str
    str2.value = 2
    
    print(str) // 1
    print(str2) // 2
    class One{
    	value = 1
    }
    
    let cla = One()
    let cla2 = cla
    cla2.value = 2
    
    print(cla.value) //2
    print(cla2.value) //2

    구조체와 클래스의 차이가 보이시나요?

     

     구조체의 경우 str2가 str을 복사했지만, 별도의 메모리에 할당된 값입니다.

    하지만, 클래스의 경우 cla2는 cla를 참조하게 되기 때문에 값이 같이 변경되는 것이죠.

     

     풀어서 설명하자면, 구조체는 각자 다른집에 사는 사람이 같은 가구를 산 것이고,

    클래스의 경우는 cla와 cla2가 같은 집에 사는데 cla2가 가구를 하나 들여온 거라 할 수 있겠네요.

     

     

     애플 공식 문서에 나와있는 내용도 발췌하겠습니다.

    다음중 하나이상의 조건에 해당하면 클래스 대신 구조체 사용을 권장한다고 합니다.

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

     

     

    공부하다가 아리송해서 별도로 작성해 보았습니다 ^^

     


    공부에 도움을 준 사이트들

     

    전반적인 공부 가이드라인

    yagom.net

     

    야곰닷넷 - yagom.net

    iOS 개발자들의 놀이터, 배움터, 모임터, 기록보관소 야곰닷넷입니다.

    yagom.net

    애플 공식 스위프트 언어 가이드 번역사이트

    jusung.gitbook.io/

     

    https://app.gitbook.com/@jusung/s/rxswift/

     

    app.gitbook.com

     

    반응형

    'Language > Swift' 카테고리의 다른 글

    Swift 프로퍼티 타입들  (0) 2021.03.12
    Swift 클로저  (0) 2021.03.11
    Swift 사용자 정의 타입 - enum  (0) 2021.03.11
    Swift 사용자 정의 타입 - Class  (0) 2021.03.11
    Swift 사용자 정의 타입 - Struct  (0) 2021.03.11
      'Language/Swift' 카테고리의 다른 글
      • Swift 프로퍼티 타입들
      • Swift 클로저
      • Swift 사용자 정의 타입 - enum
      • Swift 사용자 정의 타입 - Class
      Greensky0026
      Greensky0026
      점이 모여 선이 된다. 내 삽질도 언젠간 거대한 지하 도시가 되겠지!

      티스토리툴바