티스토리 뷰
Swift(스위프트)는 여러 가지 프로그래밍 패러다임을 차용한 다중 패러다임 프로그래밍 언어입니다.
명령형과 객체지향 프로그래밍 패러다임을 기반으로 한 함수형 프로그래밍 패러다임과 프로토콜 지향 프로그래밍 패러다임을 지향합니다.
결과적으로 스위프트에서 가장 강조하는 부분은 함수형 프로그래밍 패러다임과 프로토콜 지향 프로그래밍 패러다임입니다.
기존의 C언어는 명령형 프로그래밍 패러다임을 차용하고 C++, Java는 명령형 프로그래밍 패러다임과 객체지향 프로그래밍 패러다임을 동시에 차용한 다중 프로그래밍 패러다임 언어입니다.
스위프트는 여기에 함수형 프로그래밍 패러다임과 프로토콜 지향 프로그래밍 패러다임을 더한 언어입니다.
먼저, 현대 프로그래밍 언어에서 대부분 차용하고 있는 객채지향 프로그래밍 패러다임에 대해 알아보겠습니다.
객체지향 프로그래밍 패러다임
객체지향 프로그래밍은 컴퓨터 프로그램을 명령어 목록으로 보는 명령형 프로그래밍 패러다임에서 벗어나, 여러 개의 독립된 단위인 객체의 모임으로 파악합니다.
객체지향 프로그래밍의 장점은 다음과 같습니다.
- 프로그램을 유연하고 쉽게 변경 가능
- 소프트웨어 개발, 유지보수가 간편함
- 직관적인 코드 분석이 가능함
객체지향에서 가장 중요한 개념은 클래스와 객체입니다.
클래스는 기본 사용자 정의 데이터 타입이고, 객체는 클래스의 인스턴스입니다.
인스턴스는 실제로 메모리에 할당되어 동작하는 것을 의미합니다.
함수형 프로그래밍 패러다임
함수형 프로그래밍 패러다임은 프로그램이 상태 변화 없이 데이터 처리를 수학적 함수 계산으로 취급합니다.
객체지향 프로그래밍에서 함수를 실행하면 파라미터 이외에도 객체의 프로퍼티 값 또는 메모리 참조 값이 변경될 수 있고 내부 처리에도 영향을 끼칠 수 있습니다.
하지만 함수형 프로그래밍은 순수하게 파라미터 값에만 영향을 줍니다.
따라서 어떤 상황에서 프로그램을 실행하더라도 일정하게 같은 결과를 도출할 수 있습니다.
프로그램이 동작하는 흐름에서 값이 변하지 않으면 함수 호출이 각각 배타적으로 실행되므로 병렬처리할 때 부작용*이 거의 없습니다.
즉, 함수형 프로그래밍의 최대 장점은 대규모 병렬처리가 쉽다는 것입니다.
* 부작용 : 프로세스 혹은 스레드별로 특정 값을 참조하기 위해 락을 걸거나 대기하는 것
또 다른 특징은, 함수를 일급 객체로 다룬다는 점입니다.
다음 조건을 모두 만족해야 일급 객체가 될 수 있습니다.
- 파라미터로 전달할 수 있다.
- 동적 프로퍼티 할당이 가능하다.
- 변수나 데이터 구조 안에 담을 수 있다.
- 반환 값으로 사용할 수 있다.
- 할당할 때 사용된 이름과 관계없이 고유한 객체로 구별할 수 있다.
함수가 일급 객체가 된다는 의미는 다양한 종류의 함수를 호출, 전달, 반환하는 동작만으로도 프로그램을 구현할 수 있음을 의미합니다.
프로토콜 지향 프로그래밍 패러다임
프로토콜 지향 프로그래밍 패러다임은 참조타입인 인스턴스보다 값 타입을 더 효율적으로 사용합니다.
스위프트에선 구조체, 열거형에 기존의 클래스에서 구현 가능했던 캡슐화, 추상화, 접근 제어 등의 기능을 모두 구현할 수 있습니다.
더불어 프로토콜에 익스텐션을 활용할 수 있습니다.
이는 참조 문제에서 자유로울 수 있고, 다중상속이 불가능한 한계를 뛰어넘을 수 있으며, 더 나은 추상화 메커니즘을 구현할 수 있다는 이야기입니다.
프로토콜 지향 프로그래밍에 대해선 추후에 더 자세히 다루겠습니다.
'Dev.iOS > Swift' 카테고리의 다른 글
[iOS Swift] MVC 패턴 (2) | 2019.12.14 |
---|---|
[iOS Swift] CocoaPods 설치 및 사용 방법 (Xcode) (5) | 2019.11.19 |
[Swift] 컬렉션형 - Set(세트) (0) | 2019.10.13 |
[Swift] 컬렉션형 - Dictionary(딕셔너리) (3) | 2019.10.13 |
[Swift] 컬렉션형 - Array(배열) (0) | 2019.10.12 |
- Total
- Today
- Yesterday
- ios
- datastructure
- 이진트리
- SummerCoding
- 백준
- 스위프트
- dfs
- Swift
- c++
- 프로그래머스
- dp
- 호제법
- 자료구조
- 서머코딩
- 삼성역량테스트
- ec2
- 컬렉션
- 알고리즘
- aws
- algorithm
- 깊이우선탐색
- 코딩테스트
- 시뮬레이션
- BFS
- Collection
- Xcode
- count
- 구슬탈출
- Programmers
- isempty
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |