swift class의 인스턴스를 상수(let)으로 선언해도 내부 프로퍼티 값을 변경할 수 있는 이유

1 답변 글타래를 보이고 있습니다
  • 글쓴이
    • qnm83
      참가자
      • 글작성 : 1
      • 답글작성 : 0
      1,070 포인트

      class의 인스턴스는 참조 타입이여서 상수로 선언해도 내부 프로퍼티 값을 변경할 수 있다고 하는데 

      조금 더 자세히 과정을 알고싶습니다!

    • rodxx
      참가자
      • 글작성 : 1
      • 답글작성 : 5
      1,320 포인트

      let으로 선언된 상수에 클래스의 인스턴스를 전달했을때 상수가 갖게 되는 값은 인스턴스의 메모리 주소입니다.

      상수가 값으로 주소를 갖는다는 것은 인스턴스의 실제 값(내부 프로퍼티)을 가지는 것과 다른 의미입니다.

      인스턴스의 실제 값들은 상수가 가리키고 있는 메모리에 저장이 돼있죠.

      그렇기 때문에 우리는 이 상수를 통해서 메모리에 있는 실제 값에 접근할 수 있는 것입니다.

      이런 이유로 인스턴스의 내부 프로퍼티 값을 변경하는 것이 상수에 저장된 값을 변경하는 것을 의미하지는 않습니다.

      상수에 저장된 값을 변경한다는 것은 “그 상수가 값으로 가지는 메모리 주소를 변경한다.”

      즉, 참조를 옮긴다는 의미입니다.

      따라서 내부 프로퍼티 값을 변경해도 상수가 가리키는 객체(메모리 주소)가 변경되지 않았으므로 문제가 없습니다.

      참조 타입의 인스턴스가 메모리에 저장되는 방식을 찾아보면 이해가 잘 되실겁니다.

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

logo landscape small

사업자번호 : 260-27-00477
통신판매업 신고번호 : 제 2020-충북청주-0663 호
고객센터 : 카카오톡채널 @yagom