본문 바로가기

스폰지밥으로 공부하는 swift/swift 문법

(8)
너 T야? 어 제네릭이야~ 제네릭이란? 제네릭은 프로그래밍 언어의 다양한 타입에 대응하여 유연 코드를 만들어주는 친구입니다. 타입의 약자인T를 파라메터 이름으로 사용하지만 다른 이름도 사용 가능해요. 타입 파라미터를 2개이상을 선언하는 것도 가능합니다 구조체, 클래스, 열거형에서도 제네릭이 사용 가능해요. 제네릭의 특징 제네릭의 가장 큰 특징은 바로 '재사용성'과 '타입 안전성'입니다. 재사용성: 같은 로직의 코드를 다양한 타입에 대해 재사용할 수 있게 해줍니다. 타입 안전성: 제네릭을 사용하면 컴파일러가 타입 체크를 할 수 있으므로, 타입 관련 오류를 줄이고 코드의 안전성을 높일 수 있습니다. 좀 딱딱하죠? 바로 스펀지밥 예시로 가시죠! 징징이는 집게리아의 캐셔를 맡고 있어요. 현금은 보통 0단위로 떨어지니까 int, 카드는 소..
CodeBaseUI에서 UI컴포넌트를 선언하는 다양한 방법들 iOS 개발에서는 UI 컴포넌트를 선언하고 설정하는 정말 다양한 방법이 있습니다. 이번 아티클에서는 4가지 방법들을 소개시켜드리려고 해요! 기본적인 선언과 설정 먼저 가장 기본적인 형태로 UIViewController 내부에 UILabel을 선언하고 viewDidLoad에서 속성을 지정할 수 있는데요, class SomeViewController: UIViewController { private let someLabel: UILabel = UILabel() override func viewDidLoad() { super.viewDidLoad() someLabel.text = "블라블라" someLabel.textColor = .blue } } 이 방식은 직관적이고 단순하지만 UI 컴포넌트가 많아질수록 v..
클로저 왜 씀? 클로저 그게 뭔데요?swift.org에 따르면 클로저는 이름없는 함수(코드 블록)을 말합니다. C 및 Objective-C의 블록과 JAVA의 람다와 유사하다고 하네요!클로저는 상수나 변수의 참조를 캡쳐(capture)해 저장할 수 있습니다.클로저를 사용하는 이유한마디로 말씀드리자면 코드를 굉장히 간결하게 작성할 수 있어요!집게리아에서 주문(order)를 받아 처리한 결과를 문자열로 반환하는 동작인데요, let orderProcessing: (String) -> String = { order in return "주문하신 \(order)를 만들었습니다."}print(orderProcessing("크랩버거"))동일한 기능을 수행하는 함수:func orderProcessing(order: String)..
[값타입 vs 참조타입]을 '집게리아 레시피'로 이해 해보좌 1. 값 타입(Value Type)과 참조 타입(Reference Type)의 차이: 집게사장이 집게리아의 레시피를 복사하려고 합니다. 이 때 레시피를 복사하는 방법에 따라 값 타입과 참조 타입이 나뉩니다. 값 타입 값 타입은 집게사장이 레시피를 그대로 메모지에 옮겨 다른 곳에 붙이는 것과 같아요. 메모지에 옮겨적은 레시피를 수정해도 원본 레시피 북에는 영향을 주지 않죠. Swift에서는 구조체(Struct)와 열거형(Enum)이 값 타입입니다. struct Recipe { var name: String var ingredients: [String] } var originalRecipe = Recipe(name: "Krabby Patty", ingredients: ["Bun", "Patty", "Pick..
final 왜 씀..? 안녕하세요! 이번에는 final 키워드의 성능적 이점과 그 활용 예시에 대해 알아볼게요. 또한 이를 이해하기 위해 필요한 Static Dispatch와 Dynamic Dispatch, 그리고 vtable이라는 개념에 대해서도 함께 알아보도록 해요.📚 Dispatch란?먼저, 디스패치(Dispatch)라는 개념을 함께 알아볼까요? 디스패치는 어떤 메소드를 호출할지 결정하고 실행하는 메커니즘을 의미하는데요. 이는 크게 Static Dispatch와 Dynamic Dispatch로 나뉘어져 있어요.🚀 Static DispatchStatic Dispatch는 컴파일 타임에 실제 호출할 함수를 결정하는 방식이에요. 이 방식은 함수 호출이 간단하고 속도가 빠른 편이죠. 대표적으로 Swift에서 Value Typ..
unowned vs weak 뭐가 다른데? 미소유 참조(unowned)와 약한 참조(weak) 저번 포스팅에서 참조에 대해서 잠깐 다뤘던 내용이지만 미소유 참조(unowned)와 약한 참조(weak)는 둘 다 참조 카운트를 증가시키지 않아요. 이 두 가지는 순환 참조 문제를 해결하기 위해 사용되는데요, 사용 방식과 특징에 약간의 차이가 있습니다. 1. 미소유 참조(unowned): 미소유 참조는 참조하는 객체가 항상 메모리에 존재할 것이라는 전제 하에 사용됩니다. 따라서 미소유 참조를 통해 객체에 접근할 때 nil 검사를 하지 않아도 됩니다. 하지만 참조하는 객체가 메모리에서 해제된 후에 미소유 참조를 통해 접근하려고 하면 런타임 오류가 발생합니다. 2. 약한 참조(weak): 약한 참조는 참조하는 객체가 메모리에서 언제든지 해제될 수 있다는 전..
참조, 강한참조 약한참조, 순환참조...? 참조가 뭔가요? 참조는 다른 객체의 주소를 가리키는 것을 말합니다. 어떤 집에 찾아가고 싶은데 그러려면 먼저 그 집이 어디있는지 알아야 하잖아요? 주소를 받은 수 집에 찾아간다면 그 안에 들어간 후 집이 어떻게 생겼는지 볼 수 있고, 의자를 뺀다거나 하는 수정사항을 발생시킬수도 있겠죠! 이와 같이 프로그래밍에서 참조를 통해 다른 객체에 접근을 하고 수정을 할 수 있습니다. 참조 : 다른 객체의 주소를 가리키는 것 class SpongeBob { var name = "스펀지밥" } class Squidward { var name = "징징이" var friend: SpongeBob? // 스펀지밥을 참조하는 변수 } let spongeBob = SpongeBob() let squidward = Squidw..
앱개발 심화 키워드 요약 1-1. 프로퍼티 옵저버 값이 변경될 때 특정 동작을 수행함 프로퍼티 옵저버를 활용하면 프로퍼티의 값이 변경되기 전 특정 코드를 실행(willSet)하거나 값이 변경된 후(didSet)에 다른 코드를 실행할 수 있습니다! 이를 활용해서 속성의 변경 사항을 감지하고 추가 동작을 수행할 수 있어요. class Order { var quantity: Int = 0 { didSet { updateStatistics() } } func updateStatistics() { // 주문 수량에 따른 통계 업데이트 로직 print("주문 수량이 변경되었습니다. 통계를 업데이트합니다.") } } let spongebob = Order() spongebob.quantity = 10 // 주문 수량이 변경됨 1-2. 타입캐..