스위프트는 안전한 프로그래밍을 지향한다.
프로그래머가 저지를 수 있는 엄격한 문법을 적용해 미연에 방지하고자 노력했다.
때로는 강제적으로 느껴질 수 있지만, 실수를 줄이는 데 도움이 된다.
ex) 옵셔널 기능, guard구문, 오류처리, 강력한 타입 통제 등
스위프트는 C언어를 기반으로 한 C, C++, Objective-C와 같은 프로그래밍 언어를 대체 하려는 목적으로 만들어졌다.
아직은 미흡하지만 스위프트는 C언어 수준과 동등한 성능을 일정한 수준으로 유지한 데 초점을 맞춰 개발되었다.
실행속도의 최적화뿐만 아니라 컴파일러를 지속적으로 개량해 더 빠른 컴파일 성능을 구현해 나가고 있다.
스위프트는 좀 더 사용하기 편하고 보기 좋은 문법을 구현할 수 있다.
덕분에 개발자들이 원하던 현대적이고 세련된 문법을 구사할 수 있다.
스위프트는 계속된 업데이트를 통해 더욱 보기 좋고 쓰기 좋은 언어로 발전해 나갈 것이다.
1.명령형 프로그래밍 패러다임
2.객체지향 프로그래밍 패러다임
3.함수형 프로그래밍 패러다임
4.프로토콜 지향 프로그래밍 패러다임
알고리즘과 로직에 의거하여 단계 단계 밟아가며 문제를 해결하도록 짜는 프로그래밍 언어
객체지향 프로그래밍은 프로그램을 명령어의 목록으로 보는 기존의 명령형 프로그래밍 패러다임에서 벗어나 여러 개의 독립된 단위인 객체의 모임으로 파악하고자 하는 시각이다. 각각의 객체는 서로 메시지를 주고 받고 데이터를 처리할 수 있다.
장점
프로그램을 유연하고 쉽게 변경할 수 있도록 작성할 수 있어 대규모 소프트웨어 개발에 많이 사용된다.
소프트웨어 개발과 유지보수를 간편하게 할 수 있으며, 직관적으로 코드를 분석할 수 있다.
클래스에 하나의 문제 해결을 위한 데이터와 메서드를 모아놓은 방식으로 응집력을 강화한다.
클래스는 독립적이 되도록 디자인해 결합력을 약화시킨다.
주요특징
자료추상화, 상속, 다형성, 동적 바인딩 등이 있다.
객체지향 언어
스몰토크(smalltalk), Objective-C, C++, C#, 자바, 파이썬, 루비, 스위프트(swift)
클래스와 객체
클래스(Class)
같은 종류의 집단에 속하는 속성과 행위를 정의한 것, 객체지향 프로그램의 기본 사용자 정의 데이터 타입이라고 할 수 클래스는 다른 클래스 또는 외부 요소와 독립적으로 디자인되어야 한다.
객체(Object)
클래스의 인스턴스(실제로 메모리에 할당되어 동작하는 모양을 갖춘 것, instance)
객체는 자신의 고유의 속성이 있으며 클래스에서 정의한 행위를 할 수 있다.
스위프트에서는 '객체'라는 용어보다는 '클래스의 인스턴스'라는 표현을 사용한다.
객체와 인스턴스는 동의어가 아니다. 인스턴스는 구조체의 인스턴스도 있고, 열거형의 인스턴스도 있을 수가 있기 때문에 객체는 인스턴스 중에서도 클래스의 인스턴스만 가리키는 말로 좀 더 작은 의미로 쓰인다.
메서드(Method) 또는 메시지(Message)
객체가 클래스에 정의된 행위를 실질적으로 하는 함수이다.메서드를 통해 객체에 명령을 전달할 수 있다. 객체간에 명령 전달 또는 데이터 전달은 메서드를 통해 이루어지며 명령을 전달하거나 데이터를 전달하는 행위를 '메서드를 호출한다' 또는 '메시지를 전달한다'라고 표현한다.
함수형 프로그래밍 패러다임은 프로그램이 상태의 변화 없이 데이터 처리를 수학적 함수 계산으로 취급하고자 하는 패러다임이다. 기존 객체지향 프로그래밍 패러다임이나 명령형 프로그래밍 패러다임에서는 프로그램에서 값이나 상태의 변화를 중요하게 여기지만 함수형 프로그래밍 패러다임은 함수 자체의 응용을 중요하게 생각한다.
함수 실행 시 함수가 전달받은 전달인자(Argument)외에도 포인터, 레퍼런스 값 등 객체의 상태 값(프로퍼티 값) 또는 메모리 참조 값 등이 변경될 수 있으며 함수 내부의 처리에도 영향을 미칠 수 있다.
순수하게 함수에 전달된 인자 값만 결과에 영향을 주므로 상태 값을 갖지 않고 순수하게 함수만으로 동작한다.
따라서 어떤 상황에서 프로그램을 실행하더라도 일정하게 같은 결과를 도출할 수 있다.
또한 필요한 만큼 함수를 나누어 처리할 수 있도록 스케일업할 수 있기 때문에 대규모 병렬처리가 굉장히 쉽다.
다른 큰 특징으로 함수를 일급객체로 다룬다는 점이다.
일급객체의 조건은 아래와 같다.
전달인자로 전달할 수 있다.
동적 프로퍼티 할당이 가능하다.
변수나 데이터 구조 안에 담을 수 있다.
반환 값으로 사용할 수 있다.
할당할 때 사용된 이름과 관계없이 고유한 객체로 구별할 수 있다.
스위프트의 함수는 위의 조건을 모두 충족할 수 있어 함수를 일급 객체로 취급한다.
함수가 일급 객체가 된다는 의미는 다양한 종류의 함수를 호출하고, 전달하고, 반환하는 등의 동작만으로도 프로그램을 구현할 수 있다는 뜻이다.
순수하게 함수형 프로그래밍 패러다임으로 프로그램을 작성하면 다음과 같은 장점이 있다.
여러 가지 연산처리 작업이 동시에 일어나는 프로그램을 만들기 쉽다.
멀티 코어 혹은 여러 개 연산 프로세서를 사용하는 시스템에서 효율적인 프로그램들을 만들기 쉽다.
상태변화에 따른 부작용에서 자유로워지므로 순수하게 기능 구현에 초점을 맞추어 설계할 수 있다.
객체지향과 함수형 프로그래밍을 적절히 섞어 프로그램을 작성한다면 필요한 기능에 맞게 최적의 성능을 발휘할 수 있고, 생산성도 극대화할 수 있는 프로그램을 만들 수 있다.
2015년 swift2.0버전이 발표되면서 프로토콜 익스텐션이 추가되어 강력한 프로토콜 지향 언어가 되었다.
프로토콜 지향 프로그래밍은 참조 타입인 클래스의 인스턴스보다 값 타입을 더 효율적으로 사용하며, 오류를 줄일 수 있다.
스위프트에서는 구조체와 열거형에 기존의 클래스에서 구현할 수 있었던 캡슐화, 추상화, 접근제어 등의 기능을 모두 구현할 수 있다. 더불어 프로토콜 익스텐션을 활용할 수 있기 때문에 참조 타입의 참조 문제에서 조금 더 자유로울 수 있고, 다중상속이 불가능한 한계를 뛰어넘을 수 있으며, 더 나은 추상화 메커니즘을 구현할 수 있다.