Swift(다중 패러다임 지향언어)

이득령·2024년 6월 3일

swift

목록 보기
1/9

오늘 적어볼 내용을 Swift 언어에 대한 특징들을 끄적여보겠습니다.

  1. 안정성(Type Safe한 언어)

    문자열 배열에 다른 타입 숫자, 불리언 타입의 값을 저장할 수 없습니다.

    안정성을 위해 체크를 해야합니다.

    • 스위프트에서는 빈(nil) 값에 대해 엄격합니다. 만약 nil을 사용할 경우 옵셔널를 이용해야 합니다
  2. 표현성(Expressive)

    스위프트는 표현성을 고려한 언어입니다.

    다중 패러다임 지향 언어

    • 객체 지향 프로그래밍(OOP: Object-Oriented Programming)
      • 객체 지향 프로그래밍이란 클래스(class)구조체(struct)를 사용하여 데이터를 객체라는 단위로 묶어 객체들 간의 상호작용으로 프로그래밍 하는 방식
        class Animal {
            var name: String
            init(name: String) {
                self.name = name
            }
            func speak() {
                print("\(name) makes a noise.")
            }
        }
        
        class Dog: Animal {
            override func speak() {
                print("\(name) barks.")
            }
        }
        
        let dog = Dog(name: "Fido")
        dog.speak()  // "Fido barks."
        위 코드는 OOP의 개념을 활용하여 클래스와 상속을 표현 했습니다
        class Animal {
            var name: String
            
            init(name: String) {
                self.name = name
            }
            
            func speak() {
                print("\(name) makes a noise.")
            }
        }
        순차:
        1. 클래스 정의

          “Animal” 이라고 클래스를 정의했습니다.

        2. 속성 정의

          "name" 이라고 문자열 타입의 속성을 정의했습니다, 문자열을 저장할 수 있습니다.

        3. 초기화 메서드(Initializer)

          "init(name: String)" 메서드는 클래스이 초기화 메서드로, 객체가 생성될 때 호출됩니다, "name" 메서드를 속성을 초기화합니다

        4. 메서드 정의

          `"speak()"` 메서드는 `“\(name) makes a noise.”` 라고 출력합니다.
          class Dog: Animal {
              override func speak() {
                  print("\(name) barks.")
              }
          }
        5. 클래스 상속

          Dog 클래스는 Animal 클래스의 모든 속성과 메서드를 물려 받는다는 의미 입니다.

        6. 메서드 오버라이딩

          `Dog` 클래스는 `speak()` 메서드를 오버라이드하여 재정의합니다.
          
          이 메서드는 `“\(name) barks."` 라고 출력합니다 

          Override란 서브클래스가 슈퍼클래스로 부터 상속 받은 메서드를 재정의 하는 것

    • 함수형 프로그래밍(Functional Programming)
      • 함수형 프로그래밍은 함수를 일급객체로 취급 함수의 조합과 응용으로 프로그래밍 하는 것
        let numbers = [1, 2, 3, 4, 5]
        let doubledNumbers = numbers.map { $0 * 2 }
        print(doubledNumbers)  // [2, 4, 6, 8, 10]
        1. numbers[1, 2, 3, 4, 5] 라는 정수 배열입니다.

        2. let 키워드는 이 배열이 상수(immutable)임을 의미합니다. 즉, numbers 배열 자체는 변경할 수 없습니다.

          let doubledNumbers = numbers.map { $0 * 2 }

          map 함수는 배열의 각 요소에 동일한 변환을 적용하여 새로운 배열을 변환합니다.

          { $0 * 0 } 는 클로저입니다. map 함수는 이 클로저를 배열의 각 요소에 적용합니다.

          numbers.map { $0 * 0 } 의 결과는 [2, 4, 6, 8, 10] 입니다. 각 요소가 2배로 변환된 새로운 배열입니다.

          $0은 배열의 각 요소를 나타내느 것입니다. 1이 될 수도 있고 2가 될 수도 있습니다.

    • 프로토콜 지향 프로그래밍(Protocol-Oriented Programming)

      프로토콜이란 작업, 클래스를 수행하기 위해 클래스, 구조체 또는 열거형에 구현하는 요구사항의 정의

      • 프로토콜 지향 프로그래밍은 공통된 인터페이스를 정의하고, 이를 통해 코드의 재사용성과 확장성을 높이는 방식입니다.
        protocol Describable {
            var description: String { get }
        }
        
        struct Car: Describable {
            var model: String
            var description: String {
                return "Car model: \(model)"
            }
        }
        
        let car = Car(model: "Tesla")
        print(car.description)  // "Car model: Tesla"
        1. 프로토콜 정의

          protocol Describable {
              var description: String { get }
          }

          Describable 프로토콜은 하나의 속성description 을 정의합니다.

          이속성은 읽기 전용(computed property)이며, 문자열을 반환합니다.

        2. 구조체 정의

          struct Car: Describable {
              var model: String
              
              var description: String {
                  return "Car model: \(model)"
              }

          Car 구조체는 Describable 프로토콜을 채택합니다.

          model 속성은 자동차 모델을 나타내는 문자열을 저장합니다.

          description 속성은 프로토콜에서 요구한 대로 구현되어 있습니다. 이는 자동차 모델을 나타내는 문자열을 반환합니다.

profile
프로그래머 아님

0개의 댓글