iOS 개발 기록

Swift의 특징과 프로그래밍 패러다임 본문

Swift

Swift의 특징과 프로그래밍 패러다임

택꽁이 2022. 5. 31. 17:56
728x90

📝 Swift의 특징은? 

애플이 발표한 스위프트의 언어적 특성은 총 세 가지로, Safe(안전성), Fast(신속성), Expressive(더 나은 표현성)이다.

 

Safe(안전성)  

 : 스위프트는 안전한 프로그래밍을 지향한다. 이는 실수를 줄이는 데에 큰 공헌을 한다!

안정성에 대한 대표적인 예가 바로 옵셔널이다. 이는 변수 또는 상수의 값이 nil일 수 있다는 것을 명시적으로 표현해 문법적으로 프로그래밍의 유연성과 안정성을 담보한다.

그리고 그 외에도 guard 구문, 오류처리, 강력한 타입 통제 등으로 안전성을 확보한다.

 

  Fast(신속성) 

스위프트는 C언어를 기반으로 한 C++, Objective-C와 같은 프로그래밍 언어를 대체하려는 목적을 가진다. 현재 실행 속도의 최적화, 그리고 더 빠른 컴파일러 성능을 구현해 나가고 있다.

 

  Expressive(더 나은 표현성) 

다양한 프로그래밍 언어들은 모두 각각의 장단점을 가지지만, 스위프트는 이러한 점들을 모두 참고하여 좀 더 편하고 보기 좋은 문법을 구현하려고 보완한다. 덕분에 현재 스위프트는 현대적이고 깔끔한 문법 구사를 할 수 있게 되었으며, 계속 발전하고 있다.

 



 

📝 프로그래밍 패러다임

스위프트는 다중 패러다임 프로그래밍 언어이다. 크게 명령형 프로그래밍 패러다임, 객체지향 프로그래밍 패러다임, 함수형 프로그래밍 패러다임, 프로토콜 지향 프로그래밍 패러다임을 차용했다.

 

 

 

📍객체지향 프로그래밍 

정의 : 프로그래밍에서 필요한 데이터를 추상화시켜 상태와 행위를 가진 객체를 만들고, 그 객체들 간의 유기적인 상호작용을 통해 로직을 구성하는 프로그래밍 방법 

 

장점 

  • 코드의 재사용 : 상속을 통해 이미 만들어진 기능을 사용하기 용이하다.
  • 유지보수가 쉬움 : 캡슐화를 통해 다른 코드에 영향이 적어 유지보수에 유리하다. 
  • 생산성 향상 : 클래스 단위로 모듈화 시켜 개발할 수 있으므로 대형프로젝트에 유리하며 업무분담이 쉽다.

단점 

  • 실행속도가 느리다 : 절차지향형에 비해 처리 속도가 느린편이다.
  • 개발속도가 느리다 : 객체를 처리하는 것에 정확한 이해가 필요해 설꼐단계부터 많은 시간이 소모된다.

 

 

객체지향 프로그래밍의 주요 키워드

  • 클래스와 인스턴스 : 클래스를 이용해 집단에 속하는 속성을 변수와 메서드로 정의한다. 이를 사용하기 위해 메모리에 올린 데이터를 객체(인스턴스) 라고 한다.  
  • 추상화 : 객체의 공통적인 속성과 기능을 묶어 정의하는 과정을 말한다. 즉, 공통의 속성이나 기능을 가지고 클래스를 설계하는 것.
  • 캡슐화 : 코드를 재수정 없이 재활용 하고, 데이터와 코드의 형태를 외부로부터 보호하도록 캡슐 형태로 만드는 방법. private로 데이터를 보호하고, 이를 getter나 setter등의 메서드로 간접적으로 접근할 수 있도록 한다. 코드 수정 시 영향 범위를 수월하게 예측하는데 도움을 준다.
  • 상속 : 기존의 상위 클래스의 기능을 재활용 하면서 동시에 하위 클래스에 새로운 기능을 추가할 수 있도록 하는 것. Swift에서는 다중상속은 불가능하다. 
  • 다형성 : 한 객체가 상속을 통해 기능을 확장하거나 변경하여 다른 객체로 재구성 되는 것. 이 경우 인터페이스를 유지하고, 메서드 이름을 낭비하지 않으며 코드의 재사용성을 늘려주는 이점이 있다. 다형성의 예로는 오버라이드와 오버로드가 있다. 
    오버라이딩 : 부모 클래스의 메서드를 원하는대로 재정의하여 사용하는 것.
    오버로딩 : 같은 이름의 메서드지만 매개변수나 타입을 다르게하여 사용하는 것. 

 

 

 

 

 

 

📍함수형 프로그래밍 

함수형 프로그래밍이 주목받게 된 배경 : 

어떤 함수의 동작에 의해 프로세스 내 특정 상태가 변경되는 부작용이 발생하는 문제를 해결하기 위해 함수형 프로그래밍이 주목받게 됨. 
함수형 프로그래밍은 함수의 동작에 의한 변수의 부수적인 값 변경을 원천 금지함으로 그런 종류의 문제를 방지하는 방법. 외부 변수를 사용 할 때에 인자에 사본으로 넣어 작업한다. 이를 통해 멀티 쓰레드, 멀티 코어 프로그레밍에 안정적인 프로그래밍이 가능하다.

  • Input과 Output이 있음.
  • 외부 환경으로부터 철저히 독립적.  각 함수는 각자의 역할만 담당.
  • 위의 두개의 결과로 같은 Input에 언제나 같은 Output을 생산함.

 

함수평 프로그래밍의 대표적 특징 

  • 선언형 : 함수형 프로그래밍의 순수 함수들은 Input에 따른 Output 값을 장담할 수 있다. 때문에 'O는 OO다'라고 표현할 수 있다. 
  • 함수를 값으로 다룸 
  • 고차함수 : 함수를 값으로 볼 수 있기 때문에 함수를 인자로 넣을 수도, 함수의 값으로 함수를 반환할 수도 있다. 프로그램이 동작하는 도중에 함수가 만들어지므로 유연한 프로그래밍이 가능하다.

 

 

 

📍프로토콜 지향 프로그래밍 

정의 : 프로토콜은 특정 기능에 필요한 메서드, 프로퍼티를 정의만 해 놓은 것을 뜻한다. 프로토콜 지향 프로그래밍은 필요한 부분만을 프로토콜로 분리하여 프로그래밍 하는 것을 말한다. 객체지향 프로그래밍의 다음 단점들을 해결하기 위해 주목받고 있는 기법이다. 

 

 

객체지향 프로그래밍의 단점 

  • Super Class에 종속적 : sub class 불필요한 변수와 함수를 상속받아야 하며, super class의 코드를 알고있어야 한다.
  • value 타입을 사용할 수 없음 : 값 타입 모델들을 굳이 참조타입으로 정의해야 한다.

 

Extension 

프로토콜은 필요한 메서드와 프로퍼티를 정의만 한다. 공통적으로 사용해야 하는 기능이 있다면 extension을 통해 초기 기능을 구현할 수 있다. 객체 구현시 초기 구현과 다른 기능을 원한다면 프로토콜의 요구사항을 재정의 하면 된다. 

 

 

 

프로토콜 지향 프로그래밍의 장점

  • Super Class에 독립적
  • 값 타입 사용 가능
  • 불필요하나 기능 외에 프로토콜로 정의한 기능만 가져올 수 있음.
  • 기능의 모듈화가능