서론
Swift의 언어적 특성에 대하여 공부하고 정리해보았다.
본론
◎ Safe (안전하고), Fast(빠르며), Expressive(표현하기 좋은) 언어
스위프트는 여러가지 프로그래밍 패러다임을 차용한 다중 패러다임 언어로서 명령형 프로그래밍 패러다임, 객체지향 프로그래밍 패러다임, 함수형 프로그래밍 패러다임, 프로토콜 지향 프로그래밍 패러다임을 차용하였다. 명령형과 객체지향 프로그래밍 패러다임을 기반으로한 함수형 프로그래밍 패러다임과 프로토콜 지향 프로그래밍 패러다임을 지향하는 언어다.
◎ 객체지향 프로그래밍 패러다임?
객체지향 프로그래밍 패러다임은 기존의 프로그래밍이 명령어의 목록으로 보는 한계에서 벗어나 여러개의 독립된 단위인 객체의 모임으로 보는 시각이며 각각의 객체는 서로 메시지를 주고 받으며 데이터를 처리할 수 있다.
강한 응집력과 약한 결합력은 소프트웨어의 질을 향상시키는 기준인데 객체지향 프로그래밍의 경우 하나의 클래스에 특정 문제를 해결하기 위하여 데이터와 메서드를 모아놓은 방식으로 응집력을 강화시키고 각 클래스를 독립적으로 디자인하여 결합력을 약화시킨다. 객체지향의 특징으로는 자료의 추상화, 상속, 동적바인딩, 캡슐화 등등..
객체지향에서의 클래스는 같은 종류의 집단에 속하는 속성과 행위를 정의한것으로 객체지향 프로그램의 기본 사용자 정의 데이터 타입이며 클래스는 다른 클래스 혹은 외부 요소와 독립적으로 디자인되어야 한다.
객체는 클래스의 인스턴스 이며 여기서 말하는 인스턴스(instance)란 객체 지향 프로그래밍(OOP)에서 클래스(class)에 소속된 개별적인 객체를 말한다. 예를 들어, 사용자(user)라는 클래스를 정의하고 홍길동(hong)이라는 객체를 생성할 경우, hong이라는 객체는 user라는 클래스의 인스턴스가 된다. 하나의 클래스를 사용하여 유사한 성질을 가진 수많은 인스턴스를 생성할 수 있다. 이 때 추상적인 개념인 클래스에서 실제 객체를 생성하는 것을 인스턴스화(instantiation)한다고 말한다. 즉, 클래스의 이니셜라이저를 통해 메모리에 할당되고 초기화한 객체를 인스턴스라 한다.
메서드는 객체가 클래스에 정의된 행위를 실제 행하는 함수
◎ 함수형 프로그래밍 패러다임?
함수형 프로그래밍 패러다임은 프로그램이 상태의 변화 없이 데이터 처리를 수학적 함수 계산으로 취급하는 패러다임이다. 기존의 객체지향이나 명령형이 프로그램에서 값이나 상태 변화를 중요하게 여긴데 반해 함수형 프로그래밍 패러다임은 함수 자체의 응용을 중요하게 여긴다. 어떤 상황에서 프로그램을 실행해도 일정한 결과를 도출할 수 있는데 이는 프로그램이 동작하는 흐름에서 상태가 변하지 않고 함수 호출이 상호 간섭없이 실행되기 때문에 병렬처리시 부작용이 거의 없다. (프로세스 또는 스레드별 특정값 참조를 위해 락을 걸거나 대기할 필요 없기 때문)
함수형 프로그래밍의 가 장 큰 특징 -> 함수를 일급객체(First Class Citizen)로 다룬다
일급객체의 조건
1. 전달인자로 전달할 수 있으며
2. 동적 프로퍼티 할당이 가능하며
3. 변수나 데이터 구조안에 담을 수 있으며
4. 반환 값으로 사용 가능하여야 하고
5. 할당할 때 이름과 관계없이 고유한 객체로 구별 가능하여야한다.
나중에 클로저에서 다시 언급할거지만 일급객체에서는 함수 그 자체를 전달하고 호출하고 반환할 수 있다.
함수형 프로그래밍 패러다임의 장점은 여러가지 연산 처리 작업이 동시에 일어나는 프로그램을 만들기 쉬우며 멀티코어를 사용하는 시스템에서 효율적인 프로그램을 만들기 쉽고 순수한 기능 구현에만 집중하여 설계할 수 있다. 이는 함수형 프로그래밍 패러다임이 상태변화에 따른 부작용이 최소화되는 특성을 지녔기 때문
◎ 프로토콜 지향?
프로토콜 익스텐션은 스위프트가 강력한 프로토콜 지향언어임이 된 결정적 계기였으며, 프로토콜 지향 프로그래밍은 참조 타입인 클래스의 인스턴스 보다 값타입을 더 효율적으로 사용하고 오류를 줄일 수 있는 방법으로 애플은 소개한다.
구조체(struct)와 열거형(enum)에서 캡슐화와 추상화 접근제어등의 기능을 모두 구현가능하다. Protocol에 Extension을 활용할 수 있기 때문에 프로토콜 지향 프로그래밍이 가능해졌다. 참조 타입의 참조문제에서 더 자유로워질 수 있고 다중상속이 불가능한 한계를 뛰어넘는것이 가능해졌으며, 향상된 추상화 매커니즘의 구현이 가능해졌다.
결론
Swift는 빠르고, 안전하고, 표현하기 좋은언어로 명령형과 객체지향 프로그래밍 패러다임을 기반으로한 함수형 프로그래밍 패러다임과 프로토콜 지향 프로그래밍 패러다임을 지향한다. 객체지향 프로그래밍은 응집력↑ 결합력↓, 함수형 프로그래밍 패러다임의 가장 큰 주제는 함수를 일급객체(First Class Citizen)로 다루며 프로토콜 익스텐션의 추가로 인해 참조 타입인 클래스의 인스턴스 보다 값타입을 더 효율적으로 사용하고 오류를 줄일 수 있게되었다.
◇ 요약 ◇
① Swift는 Fast, Safe, Expressive한 언어
② 객체지향 프로그래밍은 응집력↑ 결합력↓
③ 함수형 프로그래밍 함수 그 자체는 일급객체로 다룸
④ 프로토콜 익스텐션의 추가는 스위프트를 프로토콜 지향언어로 바꾼 계기
참고자료
http://wiki.hash.kr/index.php
https://docs.swift.org/swift-book/
https://gmlwjd9405.github.io/2018/07/05/oop-features.html
'■ 문법 ■ > Swift' 카테고리의 다른 글
03. Swift와 데이터 타입 (1) | 2021.03.10 |
---|---|
#02. Swift의 명명규칙과 마크업 문법을 활용한 문서화 주석 (0) | 2021.03.05 |
03 Swift 익명함수 (0) | 2019.11.29 |
Swift 에러 정리 [최종 업데이트 19.11.28] (0) | 2019.11.28 |
02 옵셔널 변수, 데이트 피커, 델리게이트(delegate) (0) | 2019.11.28 |
댓글