본문 바로가기

스폰지밥으로 공부하는 swift

(13)
빌 프린터로 알아보는 Observer 패턴 공식문서에서는 '등록된 참관인에게 정보를 방송할 수 있는 알림 발송 메커니즘입니다.' 라고 되어있는데요.. 잘 와닿지는 않죠? 쉽게 풀어 설명해보겠습니다. 집게리아에서는 손님들이 주문을 하면 그 주문이 징징이를 거쳐 스펀지밥에게 전달되는데요, 징징이가 주문을 받은 후 스펀지밥한테 어떤 주문이 들어왔는지 소리치면 스펀지밥은 조리를 시작하죠. 하지만 이런 방식은 징징이에게 많은 부담을 주고, 스펀지밥도 주문을 놓칠 수 있는 리스크가 있어요. 이 문제를 해결하기 위해 집게리아는 '빌 프린터'를 도입하기로 합니다. 징징이가 주문을 받으면 이 프린터를 통해 주문 내용이 바로 주방에 전달되는 시스템이에요. 이제 징징이는 주문을 큰 소리로 외칠 필요가 없고, 손님들은 식사에 집중할 수 있겠네요! 그리고 스펀지밥은 주..
1급 객체 넌 도데체 뭐하는 놈이냐 Swift에서 함수는 1급 객체로 간주된다..라는 말을 들어보셨나요? 저는 처음에 이 1급 객체라는 말을 보고 나서 도데체 이해가 안갔었는데요, 클로저를 공부하다가 다시 한번 마주하게 되어 다시 공부해보게 되었고, 간단하게 설명하는 글을 작성해보려합니다. 1급 객체라는 말은, 1급이라고 해서 뭐 특별한 혜텍을 받는것은 아니구요. 함수를 다른 객체와 동일하게 취급한다는 의미입니다. 함수를 변수에 할당하거나 다른 함수의 인자로 전달할 수 있으며, 함수의 반환 값으로 사용될 수 있는 것을 말해요. 1급 객체의 특징과 중요성 한마디로 요약하자면 함수를 일반 데이터처럼 다루는게 가능하다~ 라고 이해하시면 좋을 것 같네요! 이러한 특성 덕분에 고차 함수가 구현 가능하고 Swift에서 함수형 프로그래밍 패러다임이 가..
너 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..
싱글턴 패턴이란? 싱글턴 패턴이 뭐죠? 싱글턴 패턴은 클래스의 인스턴스가 오직 하나만 생성되어 전역적으로 접근 가능하도록 보장하는 디자인 패턴입니다. 왜 써야하는거죠? 싱글턴 패턴을 사용하면 전역적으로 하나의 인스턴스가 생겼다는 것이 보장되면서도 어디서든 쉽게 접근이 가능해요. 즉 전역적으로 접근이 가능하지만 일관된 객체 생성이 보장되어야 할 때 유용합니다! 말이 좀 딱딱한 것 같아서 바로 집게리아를 활용해 예시를 들어보겠습니다 ㅎㅎ class CashRegisterManager { // 싱글턴 인스턴스를 저장할 static property를 선언 static let shared = CashRegisterManager() // 초기화를 private으로 선언하여 외부에서 인스턴스 생성을 막기 private init() {..
final 왜 씀..? 안녕하세요! 이번에는 final 키워드의 성능적 이점과 그 활용 예시에 대해 알아볼게요. 또한 이를 이해하기 위해 필요한 Static Dispatch와 Dynamic Dispatch, 그리고 vtable이라는 개념에 대해서도 함께 알아보도록 해요.📚 Dispatch란?먼저, 디스패치(Dispatch)라는 개념을 함께 알아볼까요? 디스패치는 어떤 메소드를 호출할지 결정하고 실행하는 메커니즘을 의미하는데요. 이는 크게 Static Dispatch와 Dynamic Dispatch로 나뉘어져 있어요.🚀 Static DispatchStatic Dispatch는 컴파일 타임에 실제 호출할 함수를 결정하는 방식이에요. 이 방식은 함수 호출이 간단하고 속도가 빠른 편이죠. 대표적으로 Swift에서 Value Typ..