TIL - 2024.04.15 월요일

· 성취/개선/학습한 내용 🏆

 오랜만에 SwiftUI를 학습하였다. SwiftUI는 막상 처음 코드를 구현할 때는 쉬워 보이지만, 구성 요소를 뜯어보면 생각보다 어려운 것들이 많았다. 예를 들자면 Opaque Type이라든지, body 프로퍼티를 some View 형태로 타입을 선언하는 이유라든지, body 프로퍼티에서 변수를 바로 수정할 수 없는 이유가 뭔지 등이 있다.

 우선 OpaqueType은 불투명한 타입으로 '역 제네릭 타입'이라고 생각하면 된다. 제네릭 타입은 구현할 때엔 타입을 모르지만 메서드를 호출할 때 타입을 지정하는 특징을 가지고 있다. 이와 반대로 역 제네릭 타입은 구현할 때 타입을 알지만, 사용할 때는 숨겨서 알 수는 것이 불투명한 타입이다.

 또 body 프로퍼티를 some View 형태로 선언하는 이유는 body에 들어가는 뷰들의 타입을 하나하나 고려해서 구체 타입으로 만들어서 선언하기 어렵기 때문이다.  이때 some은 OpaqueType으로 some 덕분에 구체 타입들을 일일이 명시하지 않아도 되는 것이다. 예를 들어 some View 형태를 구체 타입으로 바꿔본다면 VStack <TupleView<(Text, Text)>> 과 같이 바꿀 수가 있다. 그런데 추가적인 뷰들이 늘어난다면 저 타입은 더 길어지고 엄청나게 복잡해질 것이다. 그래서 이를 OpaqueType을 사용하여 컴파일 타임에 코드 내부에서 구체적인 타입을 추론해 내도록 하는 것이다. 이 덕분에 뷰를 구성하는 데 있어서 유연하고 좀 더 편리하게 할 수 있게 된다. 

 마지막으로 body 프로퍼티에서 변수를 수정할 수 없는 이유는 구조체 채택한 프로토콜 때문이다. body 프로퍼티는 연산 프로퍼티인데 구조체가 채택한 프로토콜인 View 프로토콜 내에서 body는 mutating get이 아닌 get으로 선언되어 있기에, mutating get으로 바꿔주면 에러가 발생하게 된다. (프로토콜을 준수하지 않고 있기 때문) 따라서 이런 부분을 해결하기 위해 SwiftUI에선 @State를 사용한다.!!

  • SwiftUI
    • Opaque Type(역 제네릭 타입)
    • some
    • ViewProtocol
      • body
    • mutating func / mutating get
  • Git commit Convention

· 어려웠던 내용 😵😵‍💫

  • Opaque Type이 조금 어려웠다. 역 제네릭 타입 즉, 실제 타입을 함수 외부에서는 알 수 없고, 내부에서 결정 짓는다는게 처음엔 와닿지 않았다.

· 궁금한 내용과 부족한 내용 ⁉️🤔

  • 내가 그동안 커밋한 Git 기록들을 보자면 정말 뒤죽박죽이기도 하고, 가독성도 무척이나 떨어진다는 것을 알게 되었다. Git을 커밋할 때도 단순히 저장한다, 기록한다의 의미를 넘어서 다른 사람이 봐도 쉽게 파악할 수 있는 '가독성'이 필요하다는 것을 깨닫게 되었다. 향후 깃 커밋을 할 때엔 정해진 규칙대로, 작업을 나눠서 진행해야겠다는 생각이 들었다. 하나의 팁을 주자면 깃모지(https://gitmoji.dev/)라는 사이트를 참고해서 항상 정해진 이모티콘을 사용해도 좋다고 한다. 

 

 

'# TIL (Today I Learned)' 카테고리의 다른 글

TIL - 2024.04.17 수요일  (0) 2024.04.17
TIL - 2024.04.16 화요일  (0) 2024.04.16
TIL - 2024.04.12 금요일  (0) 2024.04.13
TIL - 2024.04.11 목요일  (0) 2024.04.11
TIL - 2024.04.09 화요일  (0) 2024.04.09