1.1 스위프트의 언어적 특성
Safe, Fast, Expressive
(1) 안전성(Safe)
- 스위프트는 안전한 프로그래밍을 지향한다.
- 프로그래밍하는 중에 프로그래머가 저지를 수 있는 실수를 엄격한 문법을 적용해 미연에 방지하고자 노력함.
- 버그를 수정하거나 실수를 찾아내는 시간을 절약할 수 있다.
- 옵셔널, guard 구문, 오류처리, 강력한 타입 통제 등을 활용
(2) 신속성(Fast)
- 아직 미흡한 부분도 있지만 스위프트는 C 언어 수준과 동등한 성능을 일정한 수준으로 유지하는 데 초점을 맞춰 개발되었다.
- 실행 속도의 최적화뿐만 아니라 컴파일러를 지속적으로 개량해 더 빠른 컴파일 성능을 구현해 나가고 있다.
(3) 더 나은 표현성(Expressive)
- 스위프트는 좀 더 사용하기 편하고 보기 좋은 문법을 구현하려 노력했다.
- 개발자들이 원하던 현대적이고 세련된 문법을 구사할 수 있다.
스위프트는 여러 가지 프로그래밍 패러다임을 차용한 다중 패러다임 프로그래밍 언어이다. 명령형과 객체지향 프로그래밍 패러다임을 기반으로 한 함수형 프로그래밍 패러다임과 프로토콜 지향 패러다임을 지향한다.
1.1.1 객체지향
객체지향 프로그래밍 패러다임
객체지향 프로그래밍은 컴퓨터 프로그램을 명령어의 목록으로 보는 기존의 명령형 프로그래밍 패러다임의 시각에서 벗어나 여러 개의 독립된 단위의 객체의 모임으로 파악하고자 하는 시각이다. 각각의 객체는 서로 메시지를 주고받고 데이터를 처리할 수 있다.
프로그램을 유연하고 쉽게 변경할 수 있도록 작성할 수 있어 대규모 소프트웨어 개발에 많이 사용된다. 또한 소프트웨어 개발과 유지보수를 간편하게 할 수 있으며, 직관적으로 코드를 분석할 수 있다는 장점이 있다.
클래스와 객체
- 클래스(Class) : 같은 종류의 집단에 속하는 속성과 행위를 정의한 것이다. 객체지향 프로그램의 기본 사용자 정의 데이터 타입이라고 할 수 있다. 클래스는 다른 클래스 또는 외부 요소와 독립적으로 디자인되어야 한다.
- 객체(Object) : 클래스의 인스턴스(실제로 메모리에 할당되어 동작하는 모양을 갖춘 것)이다. 객체는 자신 고유의 속성이 있으며 클래스에서 정의한 행위를 할 수 있다.
- 메서드(Method) 또는 메시지(Message) : 객체가 클래스에 정의된 행위를 실질적으로 하는 함수. 메서드를 통해 객체에 명령을 전달할 수 있다. 객체 간에 명령 전달 또는 데이터 전달은 메서드를 통해 이루어진다.
1.1.2 함수형
함수형 프로그래밍 패러다임
함수형 프로그래밍 패러다임의 가장 큰 장점은 대규모 병렬처리가 굉장히 쉽다는 점이다.
함수형 프로그래밍 패러다임은 프로그램이 상태의 변화 없이 데이터 처리를 수학적 함수 계산으로 취급하고자 하는 패러다임이다. 기존 객체지향 프로그래밍 패러다임이나 명령형 프로그래밍 패러다임에서는 프로그램에서 값이나 상태의 변화를 중요하게 여기지만 함수형 프로그래밍 패러다임은 함수 자체의 응용을 중요하게 여긴다.
수학적 함수를 이용하는 함수형 프로그래밍은 순수하게 함수에 전달된 인자 값만 결과에 영향을 주므로 상태 값을 갖지 않고 순수하게 함수만으로 동작한다. 따라서 어떤 상황에서 프로그램을 실행하더라도 일정하게 같은 결과를 도출할 수 있다.
프로그램이 동작하는 흐름에서 상태(값)가 변하지 않으면 함수 호출이 각각 상호 간섭 없이 배타적으로 실행되므로 병렬 처리할 때 부작용이 거의 없다. 프로세스 혹은 스레드 별로 특정 값을 참조하기 위해 락을 걸거나 대기할 필요가 없기 때문이다. 또한 필요한 만큼 함수를 나누어 처리할 수 있도록 스케일업할 수 있기 때문에 대규모 병렬 처리에 큰 강점이 있다.
또 다른 큰 특징은 함수를 일급 객체(First-class Citizen)로 다룬다는 점이다. 다음 조건을 모두 충족해야 일급 객체가 될 수 있다.
- 전달인자(Argument)로 전달할 수 있다.
- 동적 프로퍼티 할당이 가능하다.
- 변수나 데이터 구조 안에 담을 수 있다.
- 반환 값으로 사용할 수 있다.
- 할당할 때 사용된 이름과 관계없이 고유한 객체로 구별할 수 있다.
함수가 일급 객체가 된다는 의미는 다양한 종류의 함수를 호출하고, 전달하고, 반환하는 등의 동작만으로도 프로그램을 구현할 수 있다는 뜻이다.
순수하게 함수형 프로그래밍 패러다임으로 프로그램을 작성하면 다음 장점이 있다.
- 여러 가지 연산 처리 작업이 동시에 일어나는 프로그램을 만들기 쉽다.
- 멀티 코어 혹은 여러 개 연산 프로세서를 사용하는 시스템에서 효율적인 프로그램을 만들기 쉽다.
- 상태변화에 따른 부작용에서 자유로워지므로 순수하게 기능 구현에 초점을 맞추어 설계할 수 있다.
1.1.3 프로토콜 지향
스위프트에서는 구조체와 열거형에 기존의 클래스에서 구현할 수 있었던 캡슐화, 추상화, 접근 제어 등의 기능을 모두 구현할 수 있다. 더불어 프로토콜에 익스텐션을 활용할 수 있기 때문에 프로토콜 지향 프로그래밍이 가능해졌다. 이는 참조 타입의 참조 문제에서 조금 더 자유로울 수 있고, 다중 상속이 불가능한 한계를 뛰어넘을 수 있으며, 더 나은 추상화 메커니즘을 구현할 수 있다는 이야기다.
'iOS > SWIFT' 카테고리의 다른 글
[Swift] Chapter 06. 흐름 제어 (0) | 2021.10.08 |
---|---|
[Swift] Chapter 05. 연산자 (0) | 2021.10.08 |
[Swift] Chapter 04. 데이터 타입 고급 (0) | 2021.10.08 |
[Swift] Chapter 03. 데이터 타입 기본 (0) | 2021.10.08 |
[Swift] Chapter 02. 스위프트 처음 시작하기 (0) | 2021.10.08 |
댓글