TIL 07

오늘 한 일 / 배운점

  • Swift 문법 강의 수강
    → 스위프트에서 옵셔널(Optional)이라는게
    값이 있을 수도 없을 수도 있다는 걸 나타내서 안전하다는 건 알겠다.
    근데 이걸 쓰면 도대체 뭐가 좋길래 써야 하는가..! 에 대한 의문이 항상 있었다.

    6bde7af11eb0fb93d72d4f73e08cc628
    뭐 어련히 좋은 게 있으니까 쓰겠거니 했는데 그 궁금증이 오늘 야곰 스위프트 강의를 보다가 풀렸다
    옵셔널이 없는 언어들 같은 경우에는 nil이 들어가는지 아닌지 설명을 하려면
    주석을 달거나 어디에 따로 문서를 작성해놓던가 하는 게 일반적이겠지만
    스위프트는 옵셔널을 사용해서 코드 하나로 표현이 가능하다는 것..! ㄴㅇㄱ
    지금보면 너무 당연한 말인데.. 조금만 생각해 보면 알 수 있는 사실을 나는 몰랐다..

  • 팀 내 코드 리뷰
    → 오늘도 SC님 코드에서 신기한걸 많이 발견했다

    • CaseIterable(케이스 이터러블) :
      enum 열거형의 값들을 배열 컬렉션과 같이 순회할 수 있도록 해주는 프로토콜

    • typealias(타입 앨리어스) :
      기존에 선언되어 있는 유형에 새로운 유형의 별칭을 사용하여 코드를 더 읽기 쉽도록, 깔끔하게

    • extension(익스텐션) :
      기존 클래스,구조체 열거형 타입에 새로운 프로퍼티 메서드, 이니셜라이저 등 추가하여 확장

    • protocol(프로토콜) :
      구조체, 클래스 열거형등에서 프로토콜을 채택하면 프로토콜의 요구대로 구현해야함.

  • 팀 과제 Lv.2~3 코드 작성

과제

  • 오늘 배운 새로운 것들 내 코드에도 적용해보기

느낀점

오늘 코드 리뷰에서 프로토콜 얘기하면서 프로토콜 오리엔티드 프로그래밍(Protocol-Oriented Programming, POP) 이런 것도 찾아보면 좋다고 해서 찾아봤다.

지난번 객체 지향 프로그래밍의 특징이라면 상속의 개념이라면,
이번 프로토콜 지향 프로그래밍은 말 그대로 프로토콜을 정의해서 프로토콜에 맞춰가는 것으로
프로토콜을 통해 처리의 공통화? 하는 게 특징인 것 같다. 상속을 사용하게 되면 부모 클래스의 변경이 자식 클래스에게까지 영향을 미치는데 프로토콜을 이용하는 경우 확장에 더 유연하다고..

게다가 스위프트는 대부분 struct로 이루어져 있기 때문에
상속되지 않는 구조체로 확장을 해나가기 위해서 익스텐션이나 프로토콜로 해야 하기 때문에
스위프트에 있어서 이 프로토콜 지향 프로그래밍이 더더욱 중요한 것 같다

이전에 스위프트가 다중 패러다임 프로그래밍 언어라는 이야기는 들었는데 스위프트가 차용한 프로그래밍 패러다임은 OOP, POP 외에도

  • 객체지향 프로그래밍 패러다임
  • 프로토콜 프로그래밍 패러다임
  • 명령형 프로그래밍 패러다임
  • 함수형 프로그래밍 패러다임

이렇게 4가지나 된다고 한다
즉 명령형과 객체지향을 기반으로 한 함수형, 프로토콜 프로그래밍 패러다임
뭔가 재밌는 것 같으면서도 오늘 여기서 더 집어넣으면 다 까먹을 것 같아서.. 나머지 프로그래밍 패러다임에 대해서는 차차 공부해 봐야겠다 - 끝-