CodingBottle Mobile 08

YEOMI·2023년 11월 14일

Swfit - Coding Bottle

목록 보기
10/13

질문 리스트

  • @Main에 대해서 설명하시오
  • 함수형 프로그래밍이 무엇인지 설명하시오

@Main에 대해서 설명하시오

@main 은 타입 기반의 프로그램 진입점.
@main은 Swift 5.3 버전 부터 사용했고,
그전에는 @UIApplicationMain 이라는 키워드로 사용하고 있었다.

Swift의 초기 버전에서는 @UIApplicationMain이나 @NSApplicationMain 어노테이션을 사용하여 앱의 진입점을 지정하고 "부팅 로딩" 코드를 작성하였습니다. 이 방식은 작동은 잘 했지만, 앱의 실행 흐름을 이해하고 관리하는 데 있어서 복잡성을 가지고 있었습니다.

Swift에서는 기본적으로 앱의 진입점(entry point)이나 main 함수를 명시적으로 작성하지 않고 대신 UIKit 프레임워크가 이 역할을 대신함.

Swift에서 @main 어노테이션이 도입되면서, 개발자는 앱의 시작점을 더욱 명확하게 지정할 수 있게 됨.
@main 어노테이션이 붙은 클래스는 앱의 시작점이 되며, 이 클래스는 UIApplicationDelegate 프로토콜을 준수해야 함.

 // AppDelegate.swift
 // @main 어노테이션을 사용하여 AppDelegate 클래스를 앱의 진입점으로 지정할 수 있습니다.
@main
class AppDelegate: UIResponder, UIApplicationDelegate {
    // ...
}

이렇게 하면, Swift 컴파일러는 @main 어노테이션이 붙은 클래스를 찾아내어 앱의 시작점으로 사용함.
이 클래스는 앱의 생명주기에 대한 이벤트를 처리하는 역할을 하고 이 방식으로, Swift에서는 더이상 main 함수를 직접 작성하거나 관리할 필요가 없게 되어 앱의 실행 흐름을 관리하는 코드를 간결하고 직관적으로 만들어줍니다.

질문

  • @UIApplicationMain이란?
    : UIApplicationMain 함수를 호출하고 해당 클래스의 이름을 delegate Class의 이름으로 전달함.

  • @UIApplicationMain의 기능?

  1. 앱의 본체에 해당하는 객체 UIApplication 객체를 생성하고, 앱의 Life Cycle을 관리함.
  2. 지정된 클래스(@UIApplicationMain 이 표시된 곳)에서 Delegate를 인스턴스화 하고 이를 앱의 객체에 할당함.
  3. 앱의 Run Loop를 포함한 기본 이벤트처리 루프를 설정하고 이벤트 처리를 시작함.
  4. 앱의 info.plist에 불러올 main nib파일이 제대로 명시되어 있으면, 해당 nib을 불러오게 됨.

함수형 프로그래밍이 무엇인지 설명하시오

함수형 프로그래밍은 하나의 프로그래밍 패러다임으로 정의되는 코딩 접근 방식으로, 자료처리를 수학적 함수의 계산으로 취급하고 상태와 가변 데이터를 멀리하는 프로그래밍 패러다임을 의미.
함수형 프로그래밍 언어로 설계: 클로저, 스칼라, 하스켈 등의 언어, 자바스크립트, 코틀린, 파이썬 등에도 최근 버전에 함수형 프로그래밍 문법이 추가.

순수 함수를 사용하여 프로그램의 상태를 변경하지 않고 계산을 수행하는 것에 중점을 둠.
함수형 프로그래밍은 높은 수준의 추상화를 제공하며, 이를 통해 코드의 간결성, 가독성, 재사용성을 향상시킬 수 있음.

함수형 프로그래밍을 왜 배워야 하는가?

함수형 프로그래밍은 기존 절차적 프로그래밍과 객체 지향형 프로그래밍과는 다른 새로운 방식으로 함수형 프로그래밍을 배우는 것은 스칼라나 클로저같은 언어들에 관심이 없고 앞으로 쓰지 않을 것 같다고 해도, 다른 방식으로 사고하는 법을 배우는 것을 의미. 새로운 계산방법을 배우는 것처럼 사고의 전환을 필요로 하며 다양한 사고방식으로 프로그래밍을 바라보면 유연한 문제 해결이 가능하게 됨.

특징

  • 순수 함수: 순수 함수는 같은 입력에 대해 항상 같은 출력을 반환하며, 외부 상태를 변경하지 않는 함수. 이 특성 때문에 순수 함수는 예측 가능하며, 테스트와 디버깅이 쉬움.
  • 불변성: 함수형 프로그래밍에서는 데이터의 상태를 변경하지 않습니다. 대신, 데이터가 필요할 때 새로운 데이터를 생성함. 이를 통해 코드의 복잡성을 줄이고 버그를 방지할 수 있음.
  • 고차 함수: 고차 함수는 다른 함수를 인자로 받거나, 함수를 결과로 반환하는 함수. 이를 통해 코드의 재사용성을 높이고, 추상화 수준을 높일 수 있음.
  • 재귀: 함수형 프로그래밍에서는 일반적으로 반복문 대신 재귀를 사용하여 반복적인 작업을 수행함.

질문

  • 자바스크립트, 코틀린, 파이썬 등에서 어떤 함수형 프로그래밍 문법이 추가되었는가?
  1. 자바스크립트: ECMAScript 2015(ES6)에서는 화살표 함수(Arrow Functions), 프로미스(Promises), 제너레이터(Generators) 등의 함수형 프로그래밍을 지원하는 기능들이 추가됨. map, reduce, filter와 같은 고차 함수를 기본 제공.
  2. 코틀린: 코틀린은 람다식(Lambda Expressions), 고차 함수(High-Order Functions), null 안정성을 보장하는 타입 시스템 등의 함수형 프로그래밍을 지원하는 기능들을 제공합니다. map, filter, reduce와 같은 컬렉션 처리 함수를 기본 제공.
  3. 파이썬: 파이썬은 람다 함수(Lambda Functions), 리스트 컴프리헨션(List Comprehensions), 제너레이터(Generators), 데코레이터(Decorators) 등의 함수형 프로그래밍을 지원하는 기능들을 제공. map, reduce, filter와 같은 고차 함수를 기본 제공.
  • 함수형 프로그래밍의 장단점?

장점

  • 높은 수준의 추상화를 제공함
  • 함수 단위의 코드 재사용이 수월
  • 불변성을 지향하기 때문에 프로그램의 동작을 예측하기 쉬워짐

단점

  • 순수 함수를 구현하기 위해서는 코드의 가독성이 좋지 않을 수 있음
  • 함수형 프로그래밍에서는 반복이 for문이 아닌 재귀를 통해 이루어지는데 (deep copy), 재귀적 코드 스타일은 무한 루프에 빠질 수 있음
  • 순수함수를 사용하는 것은 쉬울 수 있지만 조합하는 것은 쉽지 않음
profile
뭐라도 좀 해라

0개의 댓글