일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 그래프탐색
- 1939백준
- 구현
- 그래프 탐색
- 최장증가수열
- 분할정복
- 깊이 우선 탐색
- parametric search
- 백준 1464
- union find
- DP
- 뒤집기 3
- 백준 뒤집기 3
- 결정 문제
- 이분 탐색
- 비트마스킹
- 2493 백준
- boj 1464
- 패스트캠퍼스
- 그래프 이론
- 그래프이론
- 이분탐색
- 브루트포스
- 재귀
- 최장길이바이토닉수열
- 서로소 집합
- disjoint set
- 결정문제
- Lis
- bfs
- Today
- Total
알고리즘 문제풀이
[1] Swift 시작 본문
아래 문서는 스위프트 공식 문서 를 바탕으로 제작되었습니다.
Author. joonamin44
2021.12.22(수)
Swift 의 언어적 특성
1. Safe(안전성)
스위프트는 Secure Coding Guide 에 따른 방어적 프로그래밍 기법을 강제화하여 프로그래머의 실수로 인한 Defect의 발생을 미연에 방지합니다. CWE, CVE 등에 기재되어있는 Weakness 중 프로그래머의 실수 등으로 가장 빈번하게 일어나는 취약점들에 대한 Mitigation을 언어적 차원에서 지원한다고 생각하시면 편할 것 같습니다.
그 예시로,
- Type Casting에 대한 엄격한 검사 : Implicit Type Casting 이 이루어지지 않는다.
- Integer Overflow 체크 : Trap(동기적 이벤트에 대한 인터럽트)으로 처리
- Null pointer Referenced: Optional 타입으로 엄격하게 null(=nil) 값을 관리
- Uninitialized Local Variable : 초기 값이 할당되지 않는 변수에 대하여 nil 값 처리
등이 있습니다.
2. Fast(신속성)
스위프트는 C언어를 기반으로 만들어진 언어입니다. C를 베이스로 하여 만들어진 Modern Programming Language 들은 많지만, 특히나 Swift는 C언어의 이점 중 하나인 "속도"를 최대한 살리고자 노력하였습니다.
실행 속도의 최적화 뿐만 아니라 지속적으로 컴파일러를 개선하므로서 빌드 성능을 증가시키고 있습니다.
3. Expressive(표현성)
스위프트는 Modern Programming Language에서 사용되는 현대식 문법등을 사용하여 더 직관적인 이해가 가능합니다. 이해를 돕기 위하여 가벼운 예제들을 몇 가지 소개하겠습니다.
- 변수 선언 시, 데이터 형을 변수명 뒤에 선언하는 방식이러한 방식에 대한 의견은 여러가지로 갈리지만, 가장 설득력 있는 주장은 "타입 추론에 의한 데이터 형의 생략 가능성을 고려"하여 이러한 문법을 채택 하였다는 것 입니다.
var kangminjun = "My name is Minjun Kang" // Type Inference
- 추후 포스팅에서 다루겠지만, Swift를 포함한 여러 Modern Programming Language에서는 컴파일러단에서 타입 추론(type inference)을 지원합니다. 그 결과로서 아래와 같은 변수 선언도 가능합니다.
var kangminjun: String = "My name is Minjun Kang" // Type Annotation
- ; 의 생략 및 () 의 생략 가능위와 같은 규칙으로 인하여, 프로그래머의 입장에서는 보다 더 자유롭게 코드를 작성할 수 있다는 이점이 있겠지만, 오히려 여러 스타일이 결합되면 가독성을 해칠 수 있으므로 여러 사람들이 함께 참여하는 환경에서는 Coding Rule 등을 정해서 일관되게 코드를 작성하는 것이 좋아보입니다.
/* type 1 */ if id == "joonamin44"{ print(id) // ; 생략가능 print("Hello!"); } //////////// /* type 2 */ if(id == "joonamin44"){ ... }
- 스위프트에서는 아래와 같이 거의 모든 문법에서 소괄호와 세미콜론의 생략이 가능합니다.
- 등등..
+ 부가적인 특징
- 스위프트 ARC(Auto Reference Counting)을 활용하여 메모리를 자동으로 관리해줍니다. Java를 써보신 분이라면 Garbage Collector와 비슷한 기능을 해준다고 생각하면 되겠습니다.
- 이와 관련된 내용은 추후에 포스팅 할 예정입니다.
- C언어에서 사용되던 원시 데이터 형(ex: int, double, char, ...)등을 Struct로 관리합니다.
- Naming Convetion에 따라 Int, Double, Char 등으로 데이터 형을 명시합니다.
- 관련된 좋은 글
Swift 프로그래밍 패러다임
스위프트는 각각의 프로그래밍 패러다임의 장점을 모두 차용한 다중 프로그래밍 패러다임 언어입니다.
명령형 프로그래밍 패러다임
- 절차지향 프로그래밍 : 루틴, 메소드, 함수 등의 프로시저를 중심으로 이벤트를 기술하는 방식
- 객체지향 프로그래밍 : 특정 기능을 하는 객체를 중심으로 이벤트를 기술하는 방식
선언형 프로그래밍 패러다임
- 함수형 프로그래밍: Side Effect가 없는 순수 함수를 조합하여 프로그래밍을 만드는 방식
- 순수 함수의 이점으로 인하여, 병렬 처리에 용이하다.
- 순수함수? : x = y -> f(x) = f(y) 을 보장, 결정론적
- 참고
- 순수 함수의 이점으로 인하여, 병렬 처리에 용이하다.
프로토콜 지향
Protocol-Oriented Programming in Swift
문자열 보간법
\(상수) 및 \(변수)
형태로\()
내부의 값을 문자열로 치환하여 삽입할 수 있음- CustomStringConvertible 프로토콜을 준수하는 description 프로퍼티로 구현
- 이것을 확장시키기 위해서 CustomStringConvertible 프로토콜을 준수하는 description 프로퍼티를 구현.
주석
일반적으로 다른 언어에서 사용되는 주석을 사용할 수 있음.
- //
- /* */
또한, Xcode 에서 퀵헬프 기능(option 누르고 클릭
)을 사용하기 위한 문서화 주석 기능을 따로 제공
퀵헬프 기능을 이용하기 위하여 주석은 마크업 언어 형식으로 작성하면 된다.
- 한줄 주석 : ///
- 두 줄 이상 주석 : /** **/