Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[레벨 1] 14주차 14. Swift의 옵셔널과 관련된 함수에는 어떤 것들이 있나요? #28

Open
longlivedrgn opened this issue Jul 10, 2024 · 1 comment
Assignees
Labels

Comments

@longlivedrgn
Copy link
Contributor

  • map()과 flatMap()의 차이점을 설명해주세요.
  • compactMap()은 어떤 경우에 사용하나요?
  • 옵셔널 체이닝을 사용할 때 주의할 점은 무엇인가요?
@longlivedrgn longlivedrgn self-assigned this Jul 10, 2024
@ueunli
Copy link

ueunli commented Jul 16, 2024

map과 flatmap

  • map은 주어진 클로저를 각 요소에 적용한 후, '새 컬렉션에 담아' 반환함
    ⇒ 기존 컬렉션을 수정한 게 아님
  • flatmap은 주어진 클로저를 각 요소에 적용한 '후', 평평하게 만들어 반환함
    ⇒ [1, 2].flatmap { [$0, $0+10] } == [1, 11, 2, 12]
  • map vs flatmap
    • flatmap은 옵셔널(ex. Int?)에도 적용 가능(결과는 여전히 옵셔널)
    • 둘 다 새 컬렉션을 반환, flatmap은 map과 달리 '평평하게 만드는' 과정이 추가됨

compactMap

  • 컬렉션 내 nil, 조금 더 엄밀히는 클로저 연산의 결과값이 nil인 경우를 제외한 것들만 새 컬렉션이 담아 반환하고 싶을 때 사용
  • 변환(map), nil 제거(filter)를 한번에 수행하고 싶을 때 사용

옵셔널 체이닝 주의사항

  • 중간에 nil이 발생하면 그 뒤의 부수작업은 진행되지 않으므로, 수행할 동작 자체도 옵셔널(해도 되고 안 해도 되는)할 때 사용해야 함
  • 정확히 어느 지점에서 nil이 발생했는지 알기 어려우므로 디버깅 하기 곤란함
  • 때로는 적절한 기본값을 부여해줄 필요가 있음

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants