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을 통해 상속을 통한 단점을 상쇄하며 반복 코드의 작성도 줄일 수 있음
참조
야곰의 핑크책(스위프트 프로그래밍: 한빛 미디어)