본문 바로가기

전체 글23

17. 제네릭(Generic)의 기본 개념과 활용 Swift에서 제네릭(Generic)은 유연하면서도 재사용 가능한 코드를 작성할 수 있게 해주는 기능입니다.함수, 구조체, 클래스, 열거형 등에서 다양한 타입을 다루어야 할 때, 코드 중복 없이 하나의 틀로 작성할 수 있도록 도와줍니다.제네릭은 타입 안정성과 성능을 모두 보장하면서도, 추상적이고 확장 가능한 코드를 작성하는 데 매우 유용한 도구입니다.1. 제네릭 함수의 기본가장 간단한 형태의 제네릭 함수는 아래와 같이 정의합니다.func swapValues(_ a: inout T, _ b: inout T) { let temp = a a = b b = temp}이 함수는 두 값을 받아 서로 바꾸는 함수입니다.타입 매개변수 T는 어떤 타입이든 받아들일 수 있으며, 두 값의 타입은 같아야 합니.. 2025. 4. 6.
16. 프로토콜 타입과 타입 지우기(Type Erasure) Swift에서 프로토콜은 타입 간의 공통된 인터페이스를 정의하기 위해 사용됩니다.이러한 프로토콜은 일반 타입처럼 변수나 매개변수의 타입으로도 사용 가능한데, 이를 프로토콜 타입(protocol type)이라고 부릅니다.하지만 모든 프로토콜을 일반 타입처럼 사용할 수 있는 것은 아니며, 특히 Self 요구나 associated type이 있는 경우에는 타입 지우기(Type Erasure)가 필요합니다.이 글에서는 프로토콜 타입의 기본 개념과 함께, 타입 지우기의 개념과 구현 방법을 살펴보겠습니다.1. 프로토콜 타입이란?프로토콜을 타입처럼 사용할 수 있으며, 이를 통해 여러 타입을 하나로 묶을 수 있습니다.protocol Drawable { func draw()}struct Circle: Drawabl.. 2025. 4. 6.
15. 프로토콜(Protocol)과 프로토콜 지향 프로그래밍 Swift에서 프로토콜(Protocol)은 특정 기능을 수행하기 위한 속성이나 메서드의 청사진(blueprint)을 정의하는 타입입니다.클래스, 구조체, 열거형 등 다양한 타입이 프로토콜을 채택하여 해당 요구사항을 구현할 수 있습니다.Swift는 객체 지향 언어이면서도 프로토콜 지향 프로그래밍(protocol-oriented programming)을 강력하게 지원합니다.이는 Swift의 핵심적인 설계 철학 중 하나로, 프로토콜을 활용한 유연한 추상화와 확장이 가능합니다.1. 프로토콜 기본 문법protocol Greetable { var name: String { get } func greet()}위 예시는 name이라는 읽기 가능한 프로퍼티와, greet()라는 메서드를 요구합니다.이 프로토콜.. 2025. 4. 3.
14. 클로저(Closure)와 캡처 클로저(Closure)는 코드에서 독립적인 기능 블록을 변수처럼 저장하거나 전달할 수 있게 해주는 구조입니다.Swift의 클로저는 익명 함수로 생각할 수 있으며, 함수와 동일하게 매개변수와 반환값을 가질 수 있습니다.Swift에서는 클로저가 매우 강력하며, 특히 비동기 처리, 이벤트 핸들링, 컬렉션 고차 함수 등에 널리 사용됩니다.또한, 클로저는 주변 변수나 상수를 캡처(Capture) 하여 사용할 수 있습니다.1. 기본 클로저 문법클로저는 중괄호 {}를 사용하며, 아래 형식으로 작성합니다.{ (매개변수 목록) -> 반환타입 in 실행 코드}가장 단순한 형태의 클로저는 다음과 같습니다.let greeting = { print("안녕하세요!")}greeting() // 안녕하세요!2. 매개변수와.. 2025. 4. 3.
13. 고차 함수(map, filter, reduce) Swift에서는 함수도 일급 객체로 다루어지며, 함수를 매개변수로 전달하거나 반환할 수 있습니다.이러한 특성을 활용한 대표적인 기능이 고차 함수(Higher-Order Functions)입니다.Swift의 컬렉션 타입(Array, Dictionary 등)은 map, filter, reduce 등의 고차 함수를 기본적으로 제공합니다.이 함수들을 활용하면 복잡한 반복 로직을 간결하고 선언적으로 작성할 수 있습니다.1. map 함수map은 컬렉션의 각 요소에 대해 동일한 연산을 수행하고, 변환된 결과를 새 컬렉션으로 반환합니다.let numbers = [1, 2, 3, 4, 5]let squared = numbers.map { $0 * $0 }print(squared) // [1, 4, 9, 16, 25]각 .. 2025. 4. 2.
12. 패턴 매칭(Pattern Matching)의 활용 Swift에서 패턴 매칭(Pattern Matching)은 단순한 switch 구문을 넘어서 다양한 형태의 값을 비교하고 구조를 해체할 수 있는 강력한 기능입니다.일반적인 조건문이나 반복문에서도 패턴 매칭을 활용할 수 있으며, 열거형, 튜플, 옵셔널 등과 함께 자주 사용됩니다.Swift의 패턴 매칭은 가독성을 높이고, 조건 분기와 데이터 추출을 더 직관적으로 처리할 수 있게 도와줍니다.1. switch문과 패턴 매칭let point = (2, 0)switch point {case (0, 0): print("원점입니다.")case (_, 0): print("x축 위에 있습니다.")case (0, _): print("y축 위에 있습니다.")default: print("좌표: \(poin.. 2025. 4. 2.