Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- wil
- NavigationSearchBar
- Array vs Linked List
- 테이블뷰 나누기
- @escaping
- Input Output
- 롤케이크 자르기
- Value Type Reference Type
- 면접을 위한 CS전공 지식 노트
- UserDefaults
- 프로그래머스
- 면접을 위한 CS 전공 지식 노트 Tree
- til
- retain cycle
- TableView
- ReferceCycle
- 양궁대회
- UIKit
- 강한 참조 순환
- Reference Cycle
- CoreData
- coremotion
- firebase
- TableView Section
- tableview section별 다른 cell적용
- CarouselCollectionview
- 자료구조
- Carousel CollectionView
- class struct
- SWIFT
Archives
- Today
- Total
개발하는 동글 :]
[TIL],[Swift],[Generics(제네릭) 공부해 보기!][0] 본문
1. Generics(제네릭)이 해결하는 문제!
먼저 간단한 예시를 통해 알아보자!
var num1 = 1
var num2 = 2
위와 같이 두 개의 변수가 있고 두 변수를 교환하는 함수를 작성해 보자.
var doubleNum1 = 1.1
var doubleNum2 = 1.2
func swapTwoInts(_ a: inout Int, _ b: inout Int) {
let tempA = a
a = b
b = tempA
}
swapTwoInts(&num1, &num2)
func swapTwoDoubles(_ a: inout Double, _ b: inout Double) {
let tempA = a
a = b
b = tempA
}
swapTwoInts(&num1, &num2)
swapTwoDoubles(&doubleNum1, &doubleNum2)
그렇다면 위와 같이 메모리 주소값을 넘겨 서로를 교환하는 함수를 구현할 수 있다.
그런데 Int값이 아닌 Double값 혹은 다른 타입의 두 변수를 교환하고 싶다면
모든 타입에 대응하는 함수를 만들어줘야만 한다는 불편함이 있다.
이러한 문제를 해결해 줄 수 있는 문법이 제네릭이라 생각한다.
2. Generics 함수를 사용해 보자!
func swapTwoValues<T>(_ a: inout T, _ b: inout T) {
let tempA = a
a = b
b = tempA
}
이렇게 타입 파라미터 T를 받아 모든 타입에 대응하는 유연한 함수를 구현할 수 있다.
3. 클래스, 구조체에서의 Generics
클래스, 구조체, 열거형의 타입이름 뒤에 타입 파라미터 <T>를 추가하면, 제네릭 타입으로 선언이 된다.
그렇다면 구조체 및 클래스에서 Generics을 사용하는 예시를 보자
struct Test<T>{
var subject: [T] = []
}
var test1 = Test(subject: [1,2,3,4,5])
var test2 = Test(subject: ["수학","과학","국어","영어"])
구조체의 타입 파라미터를 추가했기에 Test란 구조체어서 과목을 숫자와 문자열 배열로 받을 수 있다.
class PhoneNumber<T>{
var contacts:[T]
init (contacts:[T]){
self.contacts = contacts
}
}
var contacts1 = PhoneNumber(contacts: [01011112222,01012345678])
var contacts2 = PhoneNumber(contacts: ["철수","민수"])
위의 클래스 또 한 타입 파라미터를 추가했기에 다양한 타입을 요소로 받을 수 있다.
4. TIL
4.1오늘의 회고
1. 오늘 과제 코드를 정리해 보며 viewModel 중 하나가 메모리에서 해제되지 않는 문제가 발생하였다.
2. 제네릭에 대한 이해가 부족했던 부분이 오늘 다른 분의 코드를 읽으면서 확실히 느끼게 되었다 그래서 제네릭이 무엇이며 어떻게 활용할 수 있는가에 대하여 정리를 하였다.
4.2 내일의 목표
1. 과제에서 메모리에서 해제되지 않는 viewmodel이 왜 메모리에서 해제되지 않는 것인지 이해하고 그것을 정리해 보자.
2. Generics을 실제로 활용하는 코드를 공부해 보자
5. Reference
https://docs.swift.org/swift-book/documentation/the-swift-programming-language/generics/#app-top