Generic 에 대해 설명하시오 타입 혹은 함수를 정의할때 추상적인 타입을 표기하여 중복코드를 방지하고 재사용 가능한 유연한 타입과 함수를 만들수 있게 하는 것입니다. where 절이나 protocol 명시로 추상 타입에 제약을 줄 수 있습니다. 제약을 준수하지 않으면 copmile error 가 발생합니다. 꼬리질문 제네릭의 타입 파라미터는 언제 실제 타입으로 변환되나요? 타입 파라미터는 사용할때 실제 존재하는 타입으로 치환 되며 이과정을 구체화(specialization) 라고합니다. 함수의 경우 실제 호출되었을때 타입 파라미터가 존재하는 타입으로 치환되며 타입의 경우 초기화 되어 메모리에 올라갈때 치환된다. 성능에 이점이 있나요? Struct와 Protocol을 사용해 다형성을 구현하게되면 cla..
@main 이란? @main 은 Swift 5.3 버전 부터 사용하는 키워드다. Swift5.3 이전 버전에서는 @UIApplicationMain 키워드를 사용했다. 공식 문서에 따르면 @main은 타입 기반의 프로그램 진입점 이라 설명한다. 프로그램 실행을 시작하기 위한 진입점으로 타입을 지정하는 Swift 언어 기능이라 한다. 보통 AppDelegate Class 에서 볼수있는데 AppDelegate는 앱이 시작되는 진입점을 알려주고, 앱의 입력 이벤트를 전달하는 런루프를 생성하는 역할을 한다. 공식문서의 소개를 보면 탑레벨의 코드를 작성하는 대신 사용자는 싱글 타입에 @main 속성을 사용할 수 있다고 설명한다. Top-Level Code란? Top-Level Code 에는 선언문(Top-Level..
Protocol과 Generic 의 Swift6 (Existential any) 이번글은 업데이트될 Swift6 를 위해 공부한 자료입니다. Existential Type 이란? 직역 하자면 실존 타입 으로 우리가 게속 사용했던 개념이다. Swift Documents- Protocol 문서의 Protocols as Types 파트 도입부를 읽어보면 다음과같이 설명되어있다. Using a protocol as a type is sometimes called an existential type 프로토콜을 타입으로 사용하는 것은 existential type 이라고 불리기도한다. 아래의 예시 코드는 existential type 을 활용한 예시 코드. protocol Pet { func eat() } stru..
Swift Generics Generics 제너릭 코드 (Generic code) 는 정의한 요구사항에 따라 모든 타입에서 동작할 수 있는 유연하고 재사용 가능한 함수와 타입을 작성할 수 있다. 이는 중복을 피하고 명확하고 추상적인 방식으로 의도를 표현하는 코드를 작성할 수 있습니다. 제네릭은 Swift의 가장 강력한 기능 중 하나이고 Swift 표준 라이브러이의 대부분은 제네릭 코드로 빌드 된다. 예를 들어 Swift의 Array, Dictionary 타입은 모두 제네릭 컬렉션이다. 즉 Array에 Int, String 등 모든 타입을 저장할 수 있는 이유가 제네릭 타입이기 때문이다. 따라서 저장되는 타입에 제한이 없는 것이다. The Problem That Generics Solve 아래의 예시 코드..
Design Pattern(디자인 패턴) 디자인 패턴이란? 프로그래밍 설계를 할때 자주 발생하는 문제들을 해결하기 위해 사용되는 패턴, 구조 라고 할 수 있다. 디자인 패턴을 공부하다 보면 '아 이게 패턴이었어?' 라는 생각이 드는 순간이 있다. 디자인 패턴이라는 것이 정형화된 어떤 기술이 아니기 때문이다. 오래도록 경험이 축척되어 널리 굳혀진 방법론 일 뿐이며 누군가는 디자인 패턴을 선배들의 삽질 기록물 이라고 하는 이유가 그것이다. 디자인 패턴의 장점 객체지향 프로그래밍의 다양한 문제를 해결 혹은 더 나은 방법 을 제시해준다. 비슷한 상황에서 효과적으로 문제를 해결해오던 패턴이기 떄문에 쉽고 빠르게 해결책을 찾을수 있다. 디자인 패턴은 프로그래머 사이의 협업 효율과 의사소통을 증진시켜준..
Coordinator 패턴 iOS에서는 화면 전환을 담당하는 컨트롤러인 UINavigationController가 있다. Stack방식으로 새로운 화면을 push혹은 present하고, 이전 화면으로 돌아가기 위해 pop혹은 dissmis 한다. 가장 첫 화면을 기준으로 새로운 화면으로 넘어갈때 마다 하나씩 쌓이게 되고 뒤로가기 버튼을 통해 이전에 방문했던 화면들을 순서대로 꺼낼게된다. navigationController?.pushviewController(nextViewController, animated:true) 요렇게 제공되는 메서드를 사용해 간단하게 화면을 전환할수 있지만 앱이 커지고 화면이 많아진다면 사용하기 버거워진다. 예를 들어 화면을 전환하는 메서드가 모든 뷰마다 존재한다던지 하는 중복..
Decorator Pattern(데코레이터 패턴) Decorator Pattern이란? 데코레이터 패턴이란 주어진 상황 및 용도에 따라 어떤 객체에 책임을 덧붙이는 패턴으로, 기능 확장이 필요할 때 서브클래싱 대신 쓸 수 있는 유연한 대안이 될 수 있다.데코레이터 패턴은 자기 자신을 다시 자기 자신으로 감싸면서(wrap)큰블럭으로 만들어 나가는 패턴이다. 이러한 과정을 통해 문제를 해결하게 되고 작은 블럭을 다시 작은 블럭으로 감싸는 특징 때문에 Decorator 패턴을 Wrapper 패턴 이라고도 한다 Decorator Pattern은 언제 사용할까? 보편 적으로 데코레이터 패턴이 해결할 수 있는 문제는 상속에 관한 문제다. 다른 객체들에 영향을 주지 않고 개별 객체에 기능들을 추가하고 싶을때 사용한다..
MVC (Model-View-Controller) M: Model V: View C: Controller MVC란 Model View Controller의 약자로 에플리케이션을 세가지의 역할로 구분한 개발 방법론이다. 아래의 그림처럼 사용자가 Controller를 조작하면 Controller는 Model을 통해서 데이터를 가져오고 그 정보를 바탕으로 시각적인 표현을 담당하는 View를 제어해서 사용자에게 전달하게 된다. 지금까지 사용하던 MVC 아키텍쳐 패턴, 가장 유명하며 자연스럽게 사용되는 아키텍쳐다. 처음 MVC 를 공부해서 적용했을때 기존의 코드와 비교했을때 코드가 훨씬 정리가 되어있는 느낌을받아 좋아했던게 기억난다.. Traditional MVC 위의 다이어그램을 보면 Model, View, C..