Properties – stored property

2 답변 글타래를 보이고 있습니다
  • 글쓴이
    • nobleidea
      참가자
      • 글작성 : 5
      • 답글작성 : 8

      안녕하세요! 고귀한 생각을 가진 개발자입니다.
      오늘은 Swift의 Properties 개념과
      Stored Properties에 대해서 배워보고 공유하고자 합니당.

      [공식 가이드 문서]를 통해 개념을 숙지가 제일 중요합니다.
      그럼 애플 가이드 문서부터 확인해보시죠
      애플 공식 가이드 문서 – Properties

      Properties

      Properties associate values with a particular class, structure, or enumeration. Stored properties store constant and variable values as part of an instance, whereas computed properties calculate (rather than store) a value.

      Computed properties are provided by classes, structures, and enumerations.
      Stored properties are provided only by classes and structures.

      Stored and computed properties are usually associated with instances of a particular type. However, properties can also be associated with the type itself. Such properties are known as type properties.

      요약하자면,
      프로퍼티는 특정 클래스(class), 구조체(struct), 열거형(enum)에 값을 연결합니다.

      종류

      • Stored Properties (저장 프로퍼티)
      • Computed Properties (연산 프로퍼티)
      • Type Properties (타입 프로퍼티)

      정의>

      Stored Properties는 상수와 변수값을 인스턴스의 일부분으로써 저장합니다.

      Computed Properties는 저장이라기 보다는 값을 연산합니다.

      Type Properties는 타입자체와 연결하는 프로퍼티입니다.

      연결타입

      • Stored Properties는 클래스와 구조체에서만 연결합니다.
      • Computed Properties는 클래스와 구조체 그리고 열거형과 연결합니다.
      • Type Properties는 타입 그자체와 연결합니다.

      애플 공식문서로 큰 흐름부터 파악해보았습니다.
      아직은… 생소하고… 잘 와닿지 않습니다.
      설명을 덧붙여 다같이 이해해보도록 합시다 !
      먼저, Stored Properties에 예제를 통해 상세히 알아보도록 하겠습니다.

      struct FixedLengthRange {
          var firstValue: Int
          let length: Int
      }
      var rangeOfThreeItems = FixedLengthRange(firstValue: 0, length: 3)
      // 0,1,2 범위를 표현
      
      rangeOfThreeItems.firstValue = 6
      
      //6,7,8 범위를 표현
      

      FixedLengthRange는 변수저장프로퍼티와 상수저장프로퍼티를 가지는 변수타입의 struct 인스턴스 입니다.
      그리고 인스턴스가 만들어졌을 때, 초기값을 통해 저장프로퍼티가 설정됩니다.

      struct FixedLengthRange {
          var firstValue: Int
          let length: Int
      }
      let rangeOfThreeItems = FixedLengthRange(firstValue: 0, length: 3)
      // 0,1,2 범위를 표현
      
      rangeOfThreeItems.firstValue = 6
      
      // 여기서 에러가 난다, firstValue가 변수저장프로퍼티 일지라도!
      

      위 예시와는 차이점이 딱 한가지입니다.
      letvar의 차이 —> 비록 저장프로퍼티들이 변수일지라도 구조체의 타입이 상수이기때문에
      구조체의 상수, 변수 저장프로퍼티는 절대 변경할 수 없습니다.
      이 부분은 구조체에서 배우겠지만 구조체는 value type이기 때문입니다.

      예를 들어보자면… 자물쇠가 달린 상자에 병이 있습니다.
      * 자물쇠 : let
      * 상자 : struct
      * 병의상태 : 변수저장프로퍼티 (병이 따져있는냐 안따져있느냐 상태값이라고 생각하시면 될 것 같습니다.)
      * 병 : 상수저장프로퍼티 (변하지 않는 것)

      병을 어떻게든 따고 싶지만(상태값을 바꾸고 싶지만) 상자는 자물쇠(let)가 채워져있기때문에 아무리 딸 수 있는 상태여도(변경될 수 있는 속성이어도) 상태를 변경할 수 없는것이지요…

      이해가 되시나요? 예시가 올바르다고 생각하진 않지만..ㅎㅎ
      누군가에게 더욱 쉽게 설명드리기 위해, 공부한 것을 더 남기기 위해 작성해보았습니다..ㅎㅎ

      다음에는 다른 프로퍼터에 대해 더욱 알아보겠습니다.

      감사합니다.

      • 이 게시글은 nobleidea에 의해 4 years, 7 months 전에 수정됐습니다.
      • 이 게시글은 nobleidea에 의해 4 years, 7 months 전에 수정됐습니다.
    • nobleidea
      참가자
      • 글작성 : 5
      • 답글작성 : 8

      출처)
      책, 스위프트 프로그래밍 – 저자 야곰
      블로그,
      https://zeddios.tistory.com/243 (Zedd님 블로그)

    • 야곰
      키 마스터
      • 글작성 : 37
      • 답글작성 : 579

      ‘값을 연결한다’는 표현이 좀 오해의 소지가 있는것 같다는 생각이 듭니다.
      ‘프로퍼티는 특정 클래스(class), 구조체(struct), 열거형(enum)에 연관된 값을 뜻한다’는 표현이 좀 더 알맞지 않을까합니다 🙂

      좋은 글 고맙습니다!

2 답변 글타래를 보이고 있습니다
  • 답변은 로그인 후 가능합니다.

logo landscape small

사업자번호 : 743-81-02195
통신판매업 신고번호 : 제 2022-충북청주-1278 호
고객센터 : 카카오톡채널 @yagom