알고리즘 문제풀이

[1] Swift 시작 본문

IOS 개발/Swift

[1] Swift 시작

JoonDev 2021. 12. 22. 19:36

아래 문서는 스위프트 공식 문서 를 바탕으로 제작되었습니다.

Author. joonamin44

2021.12.22(수)

Swift 의 언어적 특성

1. Safe(안전성)

스위프트는 Secure Coding Guide 에 따른 방어적 프로그래밍 기법을 강제화하여 프로그래머의 실수로 인한 Defect의 발생을 미연에 방지합니다. CWE, CVE 등에 기재되어있는 Weakness 중 프로그래머의 실수 등으로 가장 빈번하게 일어나는 취약점들에 대한 Mitigation을 언어적 차원에서 지원한다고 생각하시면 편할 것 같습니다.

그 예시로,

  1. Type Casting에 대한 엄격한 검사 : Implicit Type Casting 이 이루어지지 않는다.
  2. Integer Overflow 체크 : Trap(동기적 이벤트에 대한 인터럽트)으로 처리
  3. Null pointer Referenced: Optional 타입으로 엄격하게 null(=nil) 값을 관리
  4. Uninitialized Local Variable : 초기 값이 할당되지 않는 변수에 대하여 nil 값 처리

등이 있습니다.

2. Fast(신속성)

스위프트는 C언어를 기반으로 만들어진 언어입니다. C를 베이스로 하여 만들어진 Modern Programming Language 들은 많지만, 특히나 Swift는 C언어의 이점 중 하나인 "속도"를 최대한 살리고자 노력하였습니다.

실행 속도의 최적화 뿐만 아니라 지속적으로 컴파일러를 개선하므로서 빌드 성능을 증가시키고 있습니다.

3. Expressive(표현성)

스위프트는 Modern Programming Language에서 사용되는 현대식 문법등을 사용하여 더 직관적인 이해가 가능합니다. 이해를 돕기 위하여 가벼운 예제들을 몇 가지 소개하겠습니다.

  1. 변수 선언 시, 데이터 형을 변수명 뒤에 선언하는 방식이러한 방식에 대한 의견은 여러가지로 갈리지만, 가장 설득력 있는 주장은 "타입 추론에 의한 데이터 형의 생략 가능성을 고려"하여 이러한 문법을 채택 하였다는 것 입니다.
  2. var kangminjun = "My name is Minjun Kang" // Type Inference
  3. 추후 포스팅에서 다루겠지만, Swift를 포함한 여러 Modern Programming Language에서는 컴파일러단에서 타입 추론(type inference)을 지원합니다. 그 결과로서 아래와 같은 변수 선언도 가능합니다.
  4. var kangminjun: String = "My name is Minjun Kang" // Type Annotation
  5. ; 의 생략 및 () 의 생략 가능위와 같은 규칙으로 인하여, 프로그래머의 입장에서는 보다 더 자유롭게 코드를 작성할 수 있다는 이점이 있겠지만, 오히려 여러 스타일이 결합되면 가독성을 해칠 수 있으므로 여러 사람들이 함께 참여하는 환경에서는 Coding Rule 등을 정해서 일관되게 코드를 작성하는 것이 좋아보입니다.
    /* type 1 */
    if id == "joonamin44"{ 
    	print(id) // ; 생략가능 
        print("Hello!"); 
    } 
    //////////// 
    /* type 2 */ 
    if(id == "joonamin44"){
    	... 
    }
     
  6. 스위프트에서는 아래와 같이 거의 모든 문법에서 소괄호와 세미콜론의 생략이 가능합니다.
  7. 등등..

+ 부가적인 특징

  • 스위프트 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 프로퍼티를 구현.

주석

일반적으로 다른 언어에서 사용되는 주석을 사용할 수 있음.

  1. //
  2. /* */

또한, Xcode 에서 퀵헬프 기능(option 누르고 클릭)을 사용하기 위한 문서화 주석 기능을 따로 제공

퀵헬프 기능을 이용하기 위하여 주석은 마크업 언어 형식으로 작성하면 된다.

  • 한줄 주석 : ///
  • 두 줄 이상 주석 : /** **/
Comments