(편의상 편한 말투로 작성하는 점 이해 부탁드립니다.😅)
(부정확한 정보가 있을 수 있습니다. 지적 환영🤩)
iOS 개발을 시작한지는 벌써 2년이 조금 넘어가지만 왜 이제야 블로그를 쓰냐!! 하면 사실 github.io를 활용해 블로그처럼 운영하고 있었는데 스스로 그동안 단순히 공부했던 내용을 정리해서 포스팅하는 행위였다는 생각이 들었다....
블로그를 작성하는 이유는 다른 사람들에게 내가 알고 있는 것들을 전달하면서 상호적으로 성장할 수 있기 때문이라고 생각하게 되어 새로 작성하는 겸 많은 편의성이 제공되는 티스토리로 재단장을 하려고 한다!
복습도 할 겸 기초부터 포스팅하려고 한다.
Swift란 무엇인가??
Apple 플랫폼의 어플리케이션을 개발하기 위해 Apple에서 만든 언어다! (WWDC14에서 발표!)
그렇다면 Apple은 왜 다른 기존 언어를 쓰지 않고 직접 언어를 만들었을까?
Apple은 Swift를 직관적이고 배우기 쉬운 언어라고 말한다.
Swift의 언어적 특징은 크게 아래 세가지로 나뉜다.
1. Safe
Swift는 안전한 프로그래밍을 지향한다고 한다.
왜 안전해야 하는데? 프로그램이 개발자의 실수로 갑자기 죽어버리거나 실행되지 않는 상황을 피하기 위해서라고 생각한다 ㅎ
그럼 어떻게 안전하게 만들어 주는데?? 엄격한 문법을 통해 개발자가 실수하는 것을 미연에 방지하게 해준다고 한다.
개발자 입장에서는 너무 강제적인 거 아니야? 라고 생각할 수 있지만, 그렇게 해서 실수나 버그가 덜 발생한다면 땡큐지!
예를 들면 어떤 인스턴스나 프로퍼티에 nil이 들어있을 수 있는 옵셔널의 경우, 옵셔널바인딩을 통해 옵셔널을 해제해야한다. 옵셔널 인스턴스에 nil이 들어있을 때 바인딩하지 않고 사용하려고 하면 앱이 죽어버리는 경우를 피하기 위해서 이런 과정이 필요하다.
2. Fast
Swift는 C언어 기반의 언어들(C#, C++, Objective-C)을 대체하기 위해 만들어진 언어라고 한다.
그래서 Swift는 성능 예측 및 실행속도의 최적화 뿐만 아니라 컴파일러의 업데이트를 통해 더 발전하고 있는 언어이다.
3. Expressive
세상에는 다양한 프로그래밍 언어가 있다. C, Java, Python 등등 정말 많은 프로그래밍 언어들이 있는데 Swift는 이런 언어들의 장단점을 참고하여 사용하기 편하고 보기 좋은 문법을 구성하기위해 지속적으로 발전하고 있다.
그렇기 때문에 Swift는 다양한 언어의 패러다임을 합친 다중 패러다임 프로그래밍 언어이다.
명령형과 객체지향 프로그래밍 패러다임이 기반인 함수형 프로그램 패러다임과 프로토콜 지향 프로그래밍 패러다임을 지향한다.
그렇다면 명령형, 객체지향, 함수형, 프로토콜 지향 프로그래밍 패러다임이 뭘까?
명령형 프로그래밍 패러다임
명령형과 반대되는 패러다임은 선언형 프로그래밍 패러다임이다.
명령형은 프로그래밍 상태를 변경하는 구문의 관점에서 연산을 설명하는 패러다임이고, 선언형은 프로그램이 '무엇'이라는 개념을 설명하고 있는 프로그래밍이다.
집으로 돌아가는 상황을 예로 들어보자.
- 명령형: 100미터 앞에서 우측으로 돌아 다시 400미터를 이동한다.
- 선언형: OOO주소
이렇게 보면 당연히 선언형이 좋은 거 아니야? 라고 생각한다. 그렇기 때문에 최근에 나온 SwiftUI는 선언형UI를 지원한다.
객체지향 프로그래밍 패러다임
객체지향 프로그래밍 패러다임은 현재 대다수의 언어에서 사용되고 있는 패러다임이다. 객체지향이 아닌 목록형 패러다임을 지원하는 언어는 대표적으로 C언어가 있다.
그럼 객체지향과 목록형은 무엇이냐??
객체지향은 여러개로 나누어진 객체들의 모임이라고 생각하면 되고 목록형은 실제로 명령어 순서대로 실행되는 프로그래밍 패러다임이다.
그렇다면 왜 굳이 객체 단위로 나누어 개발하는게 좋을까? 객체 단위로 나누어 개발하면 각 객체를 통해 어떤 기능을 위한 코드인지 알기 쉽고 때문에 유지보수에도 많은 도움이 되기 때문이다.
소프트웨어의 질을 높이기 위해서는 강한 응집력과 약한 응집력을 지향해야 한다.
- 강한 응집력: 클래스에 하나의 목적을 위한 데이터 및 메서드를 모아 응집력을 강화
- 약한 응집력: 각 클래스를 독립적으로 디자인하여 응징력을 약화
객체지향의 특징
- 추상화: 불필요한 정보는 숨기고, 중요한 정보만 보여주어 프로그램을 간단하게 만든다.
- 상속: 새로운 클래스가 기존의 클래스의 자료와 기능을 사용할 수 있게 한다.
- 다중상속: 하나의 클래스가 여러개의 클래스를 상속하여 많은 기능들을 수행할 수 있지만 그만큼 복잡해질 수 있기 때문에 주의해야한다.
- 다형성: 하나의 요소에 다양한 개념을 넣어 놓은 것으로, 오버라이딩/오버로딩을 의미한다.
- 동적바인딩: 실행 중 변경될 수 있는 바인딩. 이게 처음에는 무슨 말인지 잘 이해가 안됐지만 컴파일 시점과 런타임 시점에 참조하는 함수가 다를 수 있다. 라고 생각하면 될 것 같다.
클래스와 객체
- Class(클래스): 하나의 문제를 해결하기 위해 모인 집단이라고 생각하면 된다.
- Object(오브젝트): 클래스의 인스턴스를 말한다. 실제로 메모리에 할당되는 부분이다. 객체는 고유한 속성을 가지고 클래스에서 정의한 행위를 할 수 있다. 여기서 객체의 행위는 클래스의 행위를 공유하여 메모리를 효율적으로 사용한다. (Swift에서는 객체라는 말을 쓰지 않고 Class의 인스턴스 라는 표현을 사용한다.)
- Method/Message(메서드/메세지): 클래스의 인스턴스를 사용하는 방법이다. 인스턴스간 통신은 메세지를 통해 이루어진다.
함수형 프로그래밍 패러다임
함수형 프로그래밍은 자료 처리를 수학적 함수의 계산으로 취급하고 상태와 가변 데이터를 멀리하는 프로그래밍 패러다임이다.
수학적 함수는 같은 입력 값을 넣으면 항상 같은 값이 출력되야 하며 상태의 영향을 받지 않는다.
함수형 프로그래밍의 가장 큰 장점은 대규모 병렬처리가 굉장히 쉽다는 것이다. 왜냐하면 상태가 변하지 않으면 함수들이 서로 간섭 없이 배타적으로 실행되기 때문에 병렬처리를 할 때 부작용이 없고, 필요한 만큼 함수를 나누어 스케일업할 수 있기 때문이다.
함수형 프로그래밍에서 함수는 일급 객체로 다뤄야 한다. 일급 객체란 아래 조건들을 충족하는 객체를 말한다.
- Argument로 전달할 수 있다.
- 동적 프로퍼티를 할당할 수 있다.
- 변수나 데이터 구조 안에 담을 수 있다.
- 반환 값으로 사용할 수 있다.
- 할당할 때 사용된 이름과 관계없이 고유한 객체로 구별할 수 있다.
함수형 프로그래밍의 장점
- 다양한 연산 처리 작업이 동시에 일어나는 프로그램을 만들기 쉽다.
- 멀티 코어를 사용하는 시스템에서 효율적인 프로그램을 만들기 쉽다.
- 상태변화에 따른 부작용에서 자유롭기 때문에 순수하게 기능 구현에 초점을 맞춰 설계할 수 있다.
프로토콜 지향 프로그래밍 패러다임
Apple이 WWDC에서 프로토콜 지향 프로그래밍을 발표할 때 참조 타입인 클래스의 인스턴스보다 값 타입을 더 효율적으로 사용하고 오류를 줄일 수 있다고 말했다. 이를 통해 Swift는 참조 타입의 참조 문제에서 더욱 자유로워졌고 다중상속의 한계를 넘었으며 더 나은 추상화 메커니즘을 구현할 수 있게 되었다.
프로토콜이란? 특정 역할을 하기 위한 메소드, 프로퍼티, 기타 요구사항 등을 위한 틀이라고 생각하면 될 것 같다.
'Swift' 카테고리의 다른 글
[Swift] 반복문 정리 (0) | 2023.03.16 |
---|---|
[Swift] 조건문(if-else, switch)과 삼항연산자, if let, guard let (0) | 2023.03.08 |
[Swift] Functions(함수) 정리 (0) | 2023.03.07 |
[Swift] Collection Type? (0) | 2023.03.05 |
[Swift] 기본 데이터 타입과 상수, 변수 (0) | 2023.03.04 |