swift
1. 스위프트 언어의 특성
코코넛딩
2023. 9. 10. 16:35
- 스위프트가 갖는 프로그래밍 패러다임
- 프로그래밍 패러다임 이란?
- 프로그램을 설계하는 데 사용할 방법론
- 왜 알아야 하는가?
- 패러다임에 맞는 코드를 설계할 수 있다.
- 함수형 프로그래밍을 채택 했으므로 함수 내에서 프로퍼티를 변경할 수 없게 해야한다.
- 문제 해결을 어떻게 해결해 나갈 것인지 힌트를 얻을 수 있다.
- 동시성 - 함수형 프로그래밍
- 코드 재사용성 - 객체지향 프로그래밍
- 패러다임에 맞는 코드를 설계할 수 있다.
- 객체지향 프로그래밍 패러다임
- 명령형 프로그래밍 패러다임 : 컴퓨터 프로그램을 명령어의 목록으로 본다.
- 객체지향 프로그래밍
- 명령형 프로그래밍에 속한다.
- 컴퓨터 프로그램을 여러개의 독립된 단위인 객체의 모임으로 파악하고자하는 시각, 각각의 객체는 서로 메세지를 주고 받고 데이터를 처리할 수 있습니다.
- 특징
- 유연하고 쉽게 변경가능하여 대규모 소프트웨어 개발에 사용
- 개발과 유지보수가 쉽다.
- 직관적으로 코드를 분석할 수 있다.
- 소프트웨어의 질을 향상시키려면 강한 응집력(strong cohesion)과 약한 결합력(weak coupling)을 지향해야합니다.
- 객체 지향 프로그래밍은 클래스에 하나의 문제 해결을 위한 데이터와 메서드를 모아 놓는 방식으로 응집력을 강화 시킵니다. 각 클래스는 독립적이 되도록 디자인해 결합력을 약화합니다.
- 클래스, 객체
- 객체지향프로그래밍에서 중요한 내용이다.
- 클래스라는 설계도를 가지고 객체라는 물건을 생산해서 사용한다.
- 주요 특징
- 자료 추상화, 상속, 다형성, 동적 바인딩
- 함수형 프로그래밍 패러다임
- 정의
- 메소드에서 데이터 처리를 할 때 상태 변화가 없는 것
- 특징
- 객체 지향 프로그래밍 패러다임이나 명령형 프로그래밍 패러다임은 값이나 상태의 변화를 중요하게 여기지만 함수형 프로그래밍 패러다임은 함수 자체의 응용을 중요하게 여깁니다.
- 객체 지향 프로그래밍은 함수 실행 시 함수가 전달받은 전달인자, 포인터, 프로퍼티, 메모리 참조 값등이 변경될 수 있고 함수 내부의 처리에도 영향을 줄 수 있다.
- 하지만 함수형 프로그래밍은 순수하게 함수에 전달된 인자 값만 결과에 영향을 주므로 상태 값을 갖지 않고 순수하게 함수로만 동작한다. 즉 일정하게 같은 결과를 도출할 수 있다.
- 상태 값이 변화하지 않으면 함수 호출이 각각 간섭없이 실행되므로 병렬처리할 때 side effect가 없다.
- 프로세스 혹은 스레드 별로 특정 값을 참조하기위해 락을 걸거나 대기할 필요가 없다.
- 또한 필요한 만큼 함수를 나누어 처리할 수 있도록 스케일업할 수 있기 때문에 대규모 병렬처리에 큰 강점이 있다. ??
- 함수를 일급 객체로 다룬다.
- 일급객체의 조건
- 전달 인자로 전달할 수 있어야함
- 동적 프로퍼티 할당이 가능
- 변수나 데이터 구조 안에 담을 수 있음
- 반환 값으로 사용 가능
- 할당할 때 사용된 이름과 관계없이 고유한 객체로 구별할 수 있습니다.
- 함수가 일급객체가 된다는 의미는 다양한 종류의 함수를 호출하고, 전달하고, 반환하는 동작만으로도 프로그램을 구현할 수 있다.
- 일급객체의 조건
- 기능
- 모나드, 함수객체(Functor),필터, 맵, 플랫맵, 리듀스
- 정의
- 프로토콜 지향
- 프로토콜 익스텐션이 스위프트가 프로토콜 지향하는데 큰 도움을 줬다
- 프로토콜 지향 프로그래밍은 참조 타입인 클래스의 인스턴스 보다 값 타입을 더 효율적으로 사용하며, 오류를 줄일 방안이라고 소개했습니다.
- 스위프트에서는 구조체와 열거형에 기존의 클래스에서 구현할 수 있었던 캡슐화, 추상화, 접근제어등의 기능을 모두 구현할 수 있습니다.
- 프로토콜의 익스텐션을 활용할 수 있기 때문에 프로토콜 지향 프로그래밍이 가능해졌습니다.
- 이는 참조 타입의 참조 문제에서 더 자유로울 수 있고 다중 상속이 가능한 한계를 뛰어 넘을 수 있으며 더 나은 추상화 메커니즘을 구현할 수 있다는 이야기이다.
- 프로그래밍 패러다임 이란?
명령형 프로그래밍 | 함수형 프로그래밍 | |
프로그래머가 초점을 두는 곳 | 작업 수행 알고리즘?? 상태의 변경 추적 |
원하는 정보?? 필요한 변환 |
상태 변경 | 중요 | 없음 |
실행 순서 | 중요 | 낮은 중요도?? |
주요 흐름 제어 | 제어 구문(반복문,조건문 등) 함수 호출 |
순환(재귀)함수 호출등의 함수 호출로 제어?? |
주요 조작 단위 | 클래스나 구조체의 인스턴스 | 함수 |