• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

불변 컬렉션의 구현체와 관련돼 질문이 있습니다.

22.07.16 16:03 작성 조회수 187

1

강의 내용 중 변경 가능한 컬렉션들의 구현체에 대해서는 말씀을 해주셨었는데 그럼 불변 컬렉션의 구현체는 무엇인거지? 라는 궁금증이 생겼습니다.

  • Set의 구현체
    • 가변 Set : LinkedHashSet
    • 불변 Set : LinkedHashSet
  • Map의 구현체
    • 가변 Map : LinkedHashMap
    • 불변 Map : LinkedHashMap

이렇게 불변과 가변 구현체 둘 다 같은 것으로 유추를 했는데 그 근거가 아래와 같습니다.

이처럼 불변 컬렉션 생성되는 과정을 따라가보니 LinkedHashSet 인 것을 보고 유추를 해보았습니다.

이것이 맞는지가 우선 첫 번째로 궁금합니다.

그리고 toSet()의 중간에 1 -> setOf(this[0]) 이 코드도 무슨 의미인지가 알고 싶습니다!..

 

두번째로 HashSet이나 HashMap관련해서 질문이 있습니다.

  • hashSetOf, hashMapOf로 만든 컬렉션들은 전부 가변컬렉션인지
  • hashSet이나 hashMap은 자주 사용을 하지 않아서 따로 설명을 안해주신 것인지 아니면 시간 제약상 일부로 Linked만 말씀해주신 것인지 알고 싶습니다!

답변 1

답변을 작성해보세요.

0

안녕하세요 지훈님!! 와~~ 너무너무 좋은 질문이십니다!! ㅎㅎㅎㅎ

우선 하나씩 답변 드려보겠습니다!

 

1) setOf와  mapOf 등 불변 컬렉션의 기본 구현체가 LinkedHashSet / LinkedHashMap이 맞나요?!!

--> 넵넵 맞습니다!!! 물론, 원소 개수에 따라 다른 구현체를 갖기도 합니다! (가령 mapOf() 라고만 쓰시면 EmptyMap을 구현체로 갖게 되어요! 이런 부분은 저 역시 지훈님께서 잘 해주신 것처럼 필요에 따라 라이브러리를 열어 확인하는 편입니다!)

 

2) toSet() 중간의 1 -> setOf(this[0])의 의미

--> 이것은 when expression 입니다!! 관련된 강의는 5강에 있는데요~
expression 앞에 return을 붙여주어 when 결과를 바로 반환하게 되어 있고,
when (size) 를 통해 들어온 size 값이 0이면 emptySet()
1이면 setOf(this[0])
0도 아니고 1도 아니면 toCollection(LinkedHashSet<T>(mapCapacity(size)))를 반환하게 되어 있는 것입니다 ㅎㅎㅎㅎ

충분한 설명일지 잘 모르겠네요! 혹시 어려운 부분 있으시면 더 질문 주세요~!!! 🙏

 

 

3) hashSetOf, hashMapOf로 만든 컬렉션은 '가변 컬렉션'인가

--> 네 맞습니다!! 저도 사실 외우고 있지는 않아 확인해보니 지훈님께서 잘 찾아주신것처럼 가변 컬렉션이 맞습니다!!! 역시 지훈님~~ 👍

 

4) 강의에서 HashSet / HashMap 설명이 빠진 이유

--> 아~ 이 부분은 몇 가지 측면이 있습니다!! 먼저, 말씀해주신 것처럼 mutableSetOf 혹은 mutableMapOf를 상대적으로 자주 사용하다보니 hashSetOf 혹은 hashMapOf를 잘 쓰지 않는 것도 있고요! Set 또는 Map의 구현체가 무엇인지를 말씀드리게 되면, 자연스럽게 구현체별 특징과 차이도 설명드려야 해야 하는데 이 경우는 Kotlin 언어 강의보다는 자료구조 강의에 적합하다보니 배제한 것도 있습니다 ㅎㅎㅎㅎㅎ 좋은 포인트 짚어주셔서 감사합니다!!

 

질문 주신 내용에 대해 나름의 답변을 드려보았는데요!! 혹시라도 이런 부분에 대해서 추가적인 답변이 필요하시다면 편하게 말씀해주세요~~ 감사합니다!!! 😊

 

 

 

이지훈님의 프로필

이지훈

질문자

2022.07.17

2번에 1 -> setOf(this[0])  해당 문장이 size값이 1일 때 -> setOf(this[0])로 이해를 하고 있었는데 this[0]가 무엇을 말하는거지? 가 순간 이해가 안가서 질문드렸던건데 답변 덕분에 이해가 갔습니다! set의 size가 1이고 그 값이 this[0]을 갖고 있는 set을 반환하는 것 이였군요!..

 

그리고 1번, 3번, 4번 답변도 감사합니다 이해가 잘 됐습니다! 주말인데도 답변해주시고 감사합니다!

아하~~ 맞습니다!!! 이해하신것처럼 이 부분이 코틀린의 '확장함수'라는 문법인데, 확장함수 내에서 this를 사용하게 되면 수신객체라 불리는 확장함수 대상 Class의 인스턴스를 의미하게 됩니다!!

즉, 이 경우는 this가 Array 본인 자신이 되게 되지요!!

다음 강의인 16강에서 자세한 문법적인 내용 설명드리게 됩니다 ㅎㅎㅎㅎ  감사합니다!!

이지훈님의 프로필

이지훈

질문자

2022.07.17

네 알겠습니다! 추가적인 정보까지 감사합니다~