TIL

[Swift] 스위프트 패러다임

Kim Roks 2025. 1. 9. 18:33

알아보게 된 계기

  • 사실 나는 스위프트로 프로그래밍을 접했기때문에 너무 당연하게 쓰고 있었던것들이었다.
  • 그 중 객체지향과 프로토콜 지향의 경우 특히나 많은 강조를 들어와서 비교적 학습을 많이했었다.
  • 제르시 면접 질문 관련 공부를 꾸준히 하다가 “함수형 프로그래밍(FP)에 이론적인 지식이 부족함을 알았다.

iOSInterviewquestions/oldREADME.md at master · JeaSungLEE/iOSInterviewquestions

머릿속 지식으로 대답할 수 없었던 질문 목록..

스위프트가 추구하는 방향

스위프트는 다중 패러다임 프로그래밍 언어다.

크게 바라보았을 때 명령형, 객체지향, 함수형, 프로토콜 지향을 채택하고 있다.

명령형과 객체지향으로 기반을 다지고 있으며, 스위프트에선 함수형과 프로토콜 지향을 크게 강조하고 있다고 합니다.

1. 객체지향(OOP)

  • 프로그램을 여러개의 독립된 단위의 객체의 모임으로 파악하고자 하는 패러다임
  • 각각의 객체는 역할과 책임을 갖고 서로 메시지를 주고 받고 데이터를 처리한다.
  • 유연하고 쉽게 변경 가능한 장점 → 대규모 프로젝트 작성에 유리
  • 완만한 학습곡선
  • 개발과 유지보수에 유리, 코드의 직관성이 좋음
  • 프로퍼티 변수등에 해당하는 메모리 값의 상태변화가 필연적이기 때문에 명령형 프로그래밍 채택 또한 따라옴

2. 함수형 프로그래밍(FP)

  • 상태의 변화없이 데이터처리를 수학적 함수 계싼으로 취급하고자 하는 패러다임
  • 함수를 일급 객체로 바라본다는 큰 특징
  • 함수가 일급객체로 취급된다는것은 다양한 종류의 함수를 호출하고 전달하고 반환하는등의 동작만으로 프로그램을 구현할 수 있다는 뜻
  • 상태의 영향은 받지않는다는것은 항상 같은 인풋에 대해 같은 아웃풋을 뱉는다는 것 (순수함수)
  • 함수 호출이 상호 간섭 없이 베타적으로 실행되므로 병렬처리시에 side effect가 거의 없다(가장 큰 장점)
  • 애플의 프레임워크를 벗어나 스위프트를 사용할 때 순수하게 함수형 프로그램을 작성할 수 있다는 장점
  • 여러가지 연산 처리 작업이 동시에 일어나는 프로그램을 만들기 쉬움
  • 멀티 코어 혹은 여러개 연산 프로세서를 사용하는 시스템에서 효율적인 프로그램을 만들기 쉬움

명령형 프로그래밍함수형 프로그래밍

프로그래머 초점을 두는 곳 작업 수행 알고리즘, 상태의 변경 추적 원하는 정보,필요한 변환
상태 변경 중요 없음
실행 순서 중요 낮은 중요도
주요 흐름 제어 제어 구문(반복문, 조건문 등) 호출, 함수 호출 재귀함수 호출등의 함수 호출로 제어
주요 조작 단위 클래스나 구조체의 인스턴스 함수

3. 프로토콜 지향(POP)

  • 참조 타입인 클래스의 인스턴스보다 값 타입을 더 효율적으로 사용하며 오류를 줄일 패러다임
  • 스위프트에선 프로토콜을 통해 값 타입(struct, enum)에서도 캡슐화 추상화 접근제어 다형성을 구현할 수 있게 됨
  • 프로토콜 extension을 통해 상속을 통한 단점을 상쇄하며 반복 코드의 작성도 줄일 수 있음

참조

야곰의 핑크책(스위프트 프로그래밍: 한빛 미디어)