Swift란?

Swift?

iOS, macOS, watchOS, tvOS 등 Apple의 제품 개발에 활용하고자 새 프로그래밍 언어인 Swift를 만들었습니다.

Swift의 언어적 특성

  • Safe : 안전성을 뜻하는 Safe는 Swift가 안전한 프로그래밍을 지향한다는 것을 뜻합니다. 이는 프로그래머가 저지를 수 있는실수를 미연에 방지하고자 하는 노력입니다. 옵셔널, guard구문, 타입 통제 등을 통해 Swift는 안전성을 추구합니다.
  • Fast : 신속성을 뜻하는 Fast는 Swift 가 C언어를 기반으로 한 프로그래밍 언어를 대체하려는 목적으로 만들어져 C언어의 수준과 동등한 성능을 일정한 수준으로 유지하는데 초점을 맞춰 개발, 구현되어 나가고 있습니다.

  • Expressive : 표현을 뜻하는 Expressive는 Swift가 다양한 언어의 문법적 장단점을 참고하여 좀 더 사용하기 편하고 보기 좋은 문법을 구현하려 노력하는 것입니다.

  • 그 외에도 C언어는 명령형 프로그래밍 패러다임(절차적 프로그래밍 패러다임)

    C++, JAVA등의 언어는 명령형 프로그래밍 패러다임과 객체지향 프로그래밍 패러다임을 동시에 사용한 다중 프로그래밍 패러다임

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

    객체지향?

    클래스와 객체

    • 클래스 : 같은 문제 해결을 위한 집단에 속하는 속성과 행위를 정의한 것. 객체지향 프로그램의 기본 사용자 정의 데이터 타입. 하나의 클래스는 다른. 클래스 또는 외부 요소와 독립적으로 디자인.

    • 객체 : 클래스의 인스턴스 (설계도를 바탕으로 실제 소프트웨어 세계에 구현된 구체적인 실체). 하나의 객체는 자신 고유의 속성이 있으며 클래스에서 정의한 행위를 할 수 있다. Swift에서는 '클래스의 인스턴시'라는 표현을 사용.

    • 메소드 or 메시지 : 객체가 클래스에 정의된 행위를 실질적으로 하는 함수. 메소드를 통해 객체에 명령, 데이터 전달. 전달하는 행위를 '메소드 호출'이라고 한다.

    import Foundation
    
    class imClass {
       let imOne: Any = 1
    
    
  • 객체지향 프로그래밍(Object-Oriented Programming, OOP)란 기존의 명령형 프로그래밍 패러다임에서 벗어나 여러개의 독립된 단위인 객체의 모임으로 파악하고자 하는 시각입니다. 개체끼리는 서로 데이터를 주고받고 처리할 수 있음. 하나의 클래스에 하나의 문제 해결을 위한 데이터를 메소드를 모아둠. 주요 특징으로 자료 추상화, 상속, 다형성, 동적 바인딩 등 (C++, Object-C, JAVA, Swift등에서 사용)
    func imMethod() {
        print("I'm Method!!")
    }
}
let imInstance: imClass = imClass()
// imClass 라는 이름의 클래스의 이니셜라이저를 호출합니다.
// imInstance라는 이름의 상수에 할당합니다.

// 클래스의 이니셜라이저를 통하여 메모리에 할당하고 초기화한 객체를 인스턴스라고 부릅니다. (imInstance)
print(imInstance.imOne) // 1 (클래스 안의 값)
imInstance.imMethod() // I'm Method!! (메소드 호출!)
```

객체지향 프로그래밍 패러다임을 사용한 언어는 필수로 명령형 프로그래밍 패러다임을 사용합니다.

함수형?

함수형 프로그래밍 패러다임의 가장 큰 장점은 대규모 병렬처리가 굉장히 쉽다. 함수형 프로그래밍 패러다임은 프로그램이 상태의 변화 없이 데이터 처리를 수학적 함수 계산으로 취급하고자 하는 패러다임.

명령형 함수를 이용하는 객체지향 프로그래밍은 절차지향 프로그래밍 패러다임이 포함되어 있다. 그래서 함수 실행 시 함수가 전달받은 객체의 상태 값 또는 메모리 참조값 등이 변경될 수 있으며 함수 내부의 처리에도 영향을 미칠 수 있다.

수학적 함수를 이용하는 함수형 프로그래밍은 순수하게 함수에 전달된 인자 값만 결과에 영향을 준다. 따라서 어떤 상황에서 프로그램을 실행하더라도 일정하게 같은 결과를 도출할 수 있다. 이 때문에 병렬처리 시 부작용이 없으며 필요한 만큼 함수를 나누어 처리할 수 있도록 스케일업 할 수 있기 때문에 대규모 병렬처리에 강점.

또한 다음 조건을 만족하면 함수를 일급 객체(First-Class Citizen)로 다루는데..

  • 전달인자로 전달할 수 있다.

  • 동적 프로퍼티 할당이 가능.

  • 변수나 데이터구조 안에 담을 수 있다.

  • 반환 값으로 사용할 수 있다.

  • 할당할 때 사용 된 이름과 관계없이 고유한 객체로 구별.

    Swift의 함수는 이 모든 조건을 모두 충족할 수 있기에 함수를 일급 객체로 취급! -> 다양한 종류의 함수를 호출하고 전달하고 반환하는 등의 동작만으로도 프로그램 구현 가능.

    //명령형 프로그래밍 패러다임
    import Foundation
    
    func func1() {
     print("I'm Func1")
    }
    func func2() {
     print("I'm Func2")
    }
    func callAll() {
     func1()
     func2()
    }
    callAll()
    //함수형 프로그래밍 패러다임
    import Foundation
    
    func func1() {
     print("I'm Func1")
    }
    func func2() {
     print("I'm Func2")
    }
    
    func callAll(tasks: [() -> Void]){
     for task in tasks {
         task()
     }
    }
    callAll(tasks: [func1,func2]) // 함수를 직접 인자값으로 사용 가능.

    순수하게 함수형 프로그래밍 패러다임으로 프로그램을 작성했을때 장점

  • 여러 가지 연산 처리 작업이 동시에 일어나는 프로그램을 만들기 쉽다.

  • 멀티 코어 또는 여러 개 연산 프로세서를 사용하는 시스템에서 효율적.

  • 상태변화에 따른 부작용에서 자유로워짐.

    프로토콜?

    참조 타입의 참조 문제에서 조금 더 자유롭고, 다중상속이 불가능한 하나계를 뛰어넘음. 더 나은 추상화 메커니즘 구현 가능.

  • Swift에서는 구조체와 열거형에 기존의 클래스에서 구현할 수 있었던 것들과 더불어 프로토콜에 익스텐션을 활용할 수 있기 때문에 프로토콜 지향 프로그래밍이 가능합니다.

https://github.com/elddy0948/Swift_Programming

'Swift > Programming' 카테고리의 다른 글

Swift ) 기본적인 DataType  (0) 2020.02.13

+ Recent posts