swift

1. 스위프트 언어의 특성

코코넛딩 2023. 9. 10. 16:35
  1. 스위프트가 갖는 프로그래밍 패러다임
    1. 프로그래밍 패러다임 이란?
      1. 프로그램을 설계하는 데 사용할 방법론 
    2. 왜 알아야 하는가?
      1. 패러다임에 맞는 코드를 설계할 수 있다.
        1. 함수형 프로그래밍을 채택 했으므로 함수 내에서 프로퍼티를 변경할 수 없게 해야한다.
      2. 문제 해결을 어떻게 해결해 나갈 것인지 힌트를 얻을 수 있다.
        1. 동시성 - 함수형 프로그래밍
        2. 코드 재사용성 - 객체지향 프로그래밍
    3. 객체지향 프로그래밍 패러다임
      1. 명령형 프로그래밍 패러다임 : 컴퓨터 프로그램을 명령어의 목록으로 본다. 
      2. 객체지향 프로그래밍
        1. 명령형 프로그래밍에 속한다.
        2. 컴퓨터 프로그램을 여러개의 독립된 단위인 객체의 모임으로 파악하고자하는 시각, 각각의 객체는 서로 메세지를 주고 받고 데이터를 처리할 수 있습니다.
      3. 특징
        1. 유연하고 쉽게 변경가능하여 대규모 소프트웨어 개발에 사용
        2. 개발과 유지보수가 쉽다.
        3. 직관적으로 코드를 분석할 수 있다.
        4. 소프트웨어의 질을 향상시키려면 강한 응집력(strong cohesion)과 약한 결합력(weak coupling)을 지향해야합니다. 
        5. 객체 지향 프로그래밍은 클래스에 하나의 문제 해결을 위한 데이터와 메서드를 모아 놓는 방식으로 응집력을 강화 시킵니다. 각 클래스는 독립적이 되도록 디자인해 결합력을 약화합니다.
      4. 클래스, 객체
        1. 객체지향프로그래밍에서 중요한 내용이다. 
        2. 클래스라는 설계도를 가지고 객체라는 물건을 생산해서 사용한다.
      5. 주요 특징
        1. 자료 추상화, 상속, 다형성, 동적 바인딩
    4. 함수형 프로그래밍 패러다임
      1. 정의 
        1. 메소드에서 데이터 처리를 할 때 상태 변화가 없는 것
      2. 특징 
        1. 객체 지향 프로그래밍 패러다임이나 명령형 프로그래밍 패러다임은 값이나 상태의 변화를 중요하게 여기지만 함수형 프로그래밍 패러다임은 함수 자체의 응용을 중요하게 여깁니다.
        2. 객체 지향 프로그래밍은 함수 실행 시 함수가 전달받은 전달인자, 포인터, 프로퍼티, 메모리 참조 값등이 변경될 수 있고 함수 내부의 처리에도 영향을 줄 수 있다.
        3. 하지만 함수형 프로그래밍은 순수하게 함수에 전달된 인자 값만 결과에 영향을 주므로 상태 값을 갖지 않고 순수하게 함수로만 동작한다. 즉 일정하게 같은 결과를 도출할 수 있다.
        4. 상태 값이 변화하지 않으면 함수 호출이 각각 간섭없이 실행되므로 병렬처리할 때 side effect가 없다.
        5. 프로세스 혹은 스레드 별로 특정 값을 참조하기위해 락을 걸거나 대기할 필요가 없다.
        6. 또한 필요한 만큼 함수를 나누어 처리할 수 있도록 스케일업할 수 있기 때문에 대규모 병렬처리에 큰 강점이 있다. ??
        7. 함수를 일급 객체로 다룬다.
          1. 일급객체의 조건
            1. 전달 인자로 전달할 수 있어야함
            2. 동적 프로퍼티 할당이 가능
            3. 변수나 데이터 구조 안에 담을 수 있음
            4. 반환 값으로 사용 가능
            5. 할당할 때 사용된 이름과 관계없이 고유한 객체로 구별할 수 있습니다.
          2. 함수가 일급객체가 된다는 의미는 다양한 종류의 함수를 호출하고, 전달하고, 반환하는 동작만으로도 프로그램을 구현할 수 있다.
      3. 기능
        1. 모나드, 함수객체(Functor),필터, 맵, 플랫맵, 리듀스
    5. 프로토콜 지향
      1. 프로토콜 익스텐션이 스위프트가 프로토콜 지향하는데 큰 도움을 줬다
      2. 프로토콜 지향 프로그래밍은 참조 타입인 클래스의 인스턴스 보다 값 타입을 더 효율적으로 사용하며, 오류를 줄일 방안이라고 소개했습니다.
      3. 스위프트에서는 구조체와 열거형에 기존의 클래스에서 구현할 수 있었던 캡슐화, 추상화, 접근제어등의 기능을 모두 구현할 수 있습니다.
      4. 프로토콜의 익스텐션을 활용할 수 있기 때문에 프로토콜 지향 프로그래밍이 가능해졌습니다.
      5. 이는 참조 타입의 참조 문제에서 더 자유로울 수 있고 다중 상속이 가능한 한계를 뛰어 넘을 수 있으며 더 나은 추상화 메커니즘을 구현할 수 있다는 이야기이다.
  명령형 프로그래밍 함수형 프로그래밍
프로그래머가 초점을 두는 곳 작업 수행 알고리즘??
상태의 변경 추적
원하는 정보??
필요한 변환
상태 변경 중요 없음
실행 순서 중요 낮은 중요도??
주요 흐름 제어 제어 구문(반복문,조건문 등)
함수 호출
순환(재귀)함수 호출등의 함수 호출로 제어??
주요 조작 단위 클래스나 구조체의 인스턴스  함수