본문 바로가기
TIL (Today I Learned)

[Swift] Swift란?

by Bokoo14 2024. 2. 12.

[참고]

더보기

 

📝 Swift란?

Swift는 Apple이 개발한 프로그래밍 언어

‘신속한, 재빠른’이라는 뜻의 영단어로 iOS, macOS, watchOS 같은 다양한 플랫폼 애플리케이션을 개발할 때 사용함

 

Swift의 가장 큰 특징 중 하나가 문법이다.

이전의 프로그래밍 언어들은 불필요한 세미콜론(;)이나 괄호를 사용했으나 Swift는 전부 생략하고 가독성을 높이도록 설계되었음. 함수와 메소드의 이름도 그 용도를 바로 알 수 있게 직관적으로 짓는 등, 사람이 읽기 쉽고 간결하다. 

컴파일 시간에 오류를 잡아내기 때문에 런타임 오류가 줄어들면서 앱의 버그나 크래시가 줄어든다.

 

대표적 특성

- ARC (Automatic Reference Counting, 자동 참조 카운팅) 지원

- Objective-C의 동적 객체 모델과 매개변수 형식 도입

- 컴파일 언어

 

📝 Objective-C?

예전에 Apple은 iOS와 macOS를 지원하는 주 언어로 Objective-C를 사용했음.

Swift는 Objective-C보다 나은 현대 프로그래밍 언어가 가진 기능을 포함하여 보완되었다. Swift는 컴파일 시에 미리 타입 안전성을 체크하기 때문에 Objective-C보다 코드 실행 속도가 빠름.

 

Optional 타입은 상수와 변수 사용을 정확히 구분하여 메모리 관리를 용이하게 하다.

ARC 강력한 메모리 관리 기능을 가지고 있음. 개발자가 신경 쓰지 않아도 버그로부터 일정 수준 안전성과 메모리 성능을 유지할 수 있다는 게 큰 장점.

 

예전에 Objective-C로 개발된 앱들이 거의 Swift로 넘어온 추세이지만, 예전부터 서비스하던 앱들은 아직 프로젝트에 Objective-C와 Swift를 혼용하여 사용하고 있기도 하다.

(기존에 사용하던 언어이기 때문에 지원할 뿐, 현재 Apple에서는 Swift를 밀고 있기 때문에 상당수 라이브러리나 프레임워크들이 Swift로만 나오고 있다. 현재 신규 프로젝트는 Swift를 주력 언어로 사용함)

 

📝 Swift의 특징

Safe(안전성), Fast(신속성), Expressive(더 나은 표현성)

 

Safe(안전성) 

스위프트는 안전한 프로그래밍을 지향한다.

  • 옵셔널: 변수 또는 상수의 값이 nil일 수 있는 상황을 명시하여 값이 없을 경우에도 안전한 코드를 작성할 수 있음
  • guard 구문: 조건을 충족하지 않을 경우 코드의 실행을 중단시키는 역할을 수행하여, 조건을 충족하지 않는 상황에서 불필요한 코드 실행을 방지할 수 있음
  • 오류 처리: throws 키워드와 do-catch 구문을 사용하여 오류를 처리함으로써 프로그램의 안정성을 높일 수 있음
  • 강력한 타입 통제: 변수와 상수의 타입을 명확하게 지정하여 타입 불일치로 인한 오류를 사전에 방지할 수 있음

이러한 기능들을 활용하여 스위프트는 안정성과 신뢰성을 높인 코드 작성할 수 있음

 

 Fast(신속성) 

스위프트는 C언어를 기반으로 한 C++, Objective-C와 같은 프로그래밍 언어를 대체하려는 목적을 가진다.

현재 실행 속도의 최적화, 그리고 더 빠른 컴파일러 성능을 구현해 나가고 있다.

 

Expressive(더 나은 표현성) 

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

 

📝 Swift의 프로그래밍 패러다임

💡 프로그래밍 패러다임

  • 명령형 ("어떻게" 할 것인가)
    • 객체 지향 ✅
    • 프로토콜 지향
    • 절차 지향
  • 선언형 ("무엇을" 할 것인가)
    • 함수형

 

스위프트는 다중 패러다임 프로그래밍 언어이다.

명령형 프로그래밍 패러다임
객체지향 프로그래밍 패러다임
함수형 프로그래밍 패러다임
프로토콜 지향 프로그래밍 패러다임

 

명령형과 객체지향을 기반으로, 함수형, 프로토콜 프로그래밍 패러다임을 지향한다.

  • 애플의 프레임워크 대부분은 객체지향 프로그래밍 패러다임을 기반으로 설계된 수많은 클래스로 구성되어있음.
  • 애플의 프레임워크에서 사용될 언어라면, 객체지향 프로그래밍 패러다임을 수용해야만 할 것이다.
  • 또, 스위프트는 함수형 프로그래밍 패러다임을 강조한다. (애플 프레임워크를 벗어나 다른 영역에서 스위프트를 사용했을 때, 순수하게 함수형 프로그래밍 패러다임으로 프로그램을 작성할 수 있기 때문이다.)

 

✔️ 명령형 프로그래밍 패러다임 

명령형 패러다임은 선언형 패러다임과 대비되는 패러다임. 프로그램의 상태를 변경하는 구문의 관점에서 연산을 설명하는 패러다임.

연산이 프로그램의 상태를 변화시키는데, 연산들(명령) 컴퓨터가 작업을 어떻게 처리할지를 표현 것이다.

따라서 명령형 프로그램은 컴퓨터가 수행할 명령들을 순서대로 써놓은 이다.

 

✔️ 객체지향(OOP, Object Oriented Programming) 프로그래밍 패러다임 

현대 프로그래밍 언어 대부분에서 차용하고 있는 패러다임

프로그램을 명령어의 목록으로 보는 시각이 아닌 여러 개의 독립된 객체들의 모임으로 보는 것

객체들의 상호작용으로 서술하는 프로그래밍 기법

OOP는 4가지 특징을 갖고 있다. (캡슐화, 상속, 추상화, 다형성)

OOP는 SOLID원칙을 따라야 한다. (단일책임 원칙, 개방-폐쇄 원칙, 리스코프 치환 원칙, 인터페이스 분리 원칙, 의존 역전 원칙)

 

OOP에 관한 자세한 내용은 ..

📎 클릭

 

✔️ 함수형 프로그래밍 패러다임 

최근 떠오르는 패러다임의 대세로, 애플에서 특히나 강조하는 패러다임이다.

대규모 병렬처리를 쉽게 한다는 특징이 있고, 상태변화보다는 함수 자체의 응용을 중요하게 여긴다.

그리고 이 함수형 프로그래밍 패러다임의 가장 큰 특징은 함수를 일급 객체(First-class Citizen)으로 다룬다는 것이다.

(함수를 호출, 전달, 반환하는 동작만으로도 프로그램 구현이 가능하다는 의미!)

 

이렇게 함수형 프로그래밍 패러다임으로 프로그램을 작성하면 병렬처리를 쉽게 하고,

또 상태 변화에 따른 부작용에서 자유로워진다는 특징이 있기 때문에 순수하게 기능의 구현에 초점을 맞춰 설계가 가능해진다.

 

✔️ 프로토콜 지향 프로그래밍 기법 

15년도 2.0 버전이 발표되면서 프로토콜 익스텐션이 추가되면서, 프로토콜 지향 프로그래밍이 가능해졌다.

프로토콜 지향 프로그래밍이 가능해졌다는 의미는, 참조 타입의 참조 문제에서 좀 더 자유로워질 수 있고, 다중상속이 불가능한 한계를 뛰어넘을 수 있으며, 더 나은 추상화 메커니즘의 구현이 가능해진다는 것이다.

확실히 프로토콜 익스텐션의 기능은 스위프트의 프로토콜 지향 프로그래밍 기법의 완성을 도왔고, 강력하게 해주었다.

 

'TIL (Today I Learned)' 카테고리의 다른 글

[Swift] ARC (Automatic Reference Counting)  (0) 2024.02.16
[CS] 객체지향 프로그래밍(OOP)이란?  (0) 2024.02.12
[CS] 메모리 구조  (1) 2024.02.10
[Swift] Class vs Struct  (0) 2024.02.10
[Swift] 메모리 관리  (1) 2024.02.08