본문 바로가기

전체 글

(87)
[TIL] 20231207 Trouble Shooting - 싱글턴 인스턴스의 초기화 시점 부캠 동료분에게 받은 질문! 싱글턴 인스턴스는 다른 클래스에서 전역 변수나 상수에 할당해두고 해당 변수나 상수에 접근해서 사용하면 안되나요??? 오엥?? 되는데열,, but 동료의 플젝에서 런타임 에러가 발생하고 있었음... whyrano.... 코드를 봅시다. 레쭈고. (제가 짠 코드가 아니니 코드 블럭이 아닌 스샷으로 보여드리겠습니다..!) GamePlayer라는 클래스에서 static 프로퍼티로 해당 클래스의 인스턴스를 생성해두고, init() 생성자에 private으로 접근제어를 함으로써 해당 클래스의 인스턴스는 하나만 생성됨을 보장해주셨음!!! 싱글턴 패턴을 사용해서 클래스를 아주 잘 생성하셨죠?? 이제 GamePlayer 라는 클..
[TIL] 20231206 Understanding Swift Performance Swift 성능 이해하기!!! Swift의 다양한 추상화 메커니즘이 성능에 미치는 영향에 대해 알아보자. 상황에 따라 적절한 모델링 방법을 선택해 성능을 높일 수 있음!! Swift의 추상화 메커니즘이 성능에 미치는 영향을 이해하는 가장 좋은 방법은 기본 구현을 이해하는 것이다. 우리가 추상화를 구축하고, 추상화 메커니즘을 선택할 때 세 가지 측면을 고려해야 한다. 1. 내 인스턴스가 스택(Stack)에 할당될 것인가? 아니면 힙(Heap)에 할당될 것인가? 2. 이 인스턴스를 전달할 때 레퍼런스 카운팅(Reference Counting) 오버헤드가 얼마나 발생하는가? 3. 이 인스턴스에서 메서드를 호출할 때, Static Dispatch를 통해 ..
[TIL] 20231205 KVO(Key-value observing) [공식 문서 번역] Key-value observing은 다른 개체의 속성에 대한 변경 사항을 개체에게 알릴 때 사용하는 Cocoa 프로그래밍 패턴입니다. 모델 간, 뷰 간 등 논리적으로 분리된 앱의 부분 간의 변경 사항을 전달하는 데 유용합니다. Key-value observing은 오직 NSObject에서 상속되는 클래스와 함께 사용할 수 있습니다. 정리 Key-value Observing은 Cocoa 프로그래밍 패턴 프로퍼티가 변경되면 이 사항을 다른 객체에 알리는 데에 사용됨 모델과 뷰 처럼 기능적으로 분리되어 있는 부분에서의 정보 전달에 적합 KVO를 사용하기 위해서는 객체가 NSObject를 상속받아야 함 사용 방법 1. @objc dynamic v..
[TIL] 20231204 H.I.G (Human Interface Guidelines) The HIG contains guidance and best practices that can help you design a great experience for any Apple platform. HIG는 모든 애플 플랫폼을 위한 훌륭한 경험을 설계하는 데 도움이 될 수 있는 지침과 모범 사례가 포함합니다. HIG 문서를 확인해야 하는 이유? Apple의 플랫폼에 맞는 UI/UX를 유저에게 제공하기 위해! HIG를 너무 심하게 위배한 앱의 경우 심사에서 리젝 당할 수 있음 아이폰 기본 앱 시계 UI/UX 분석 화면 1 - 알람 목록 Navigation bars (Components > Navigation and search > Navig..
[TIL] 20231130 코드 리뷰 답변 작성하면서 정리한 내용 if let vs. guard let 1. 상수(let)의 사용범위가 다릅니다. 옵셔널 바인딩된 상수의 scope가 다릅니다. 즉, 상수를 사용할 수 있는 범위가 다릅니다. if let 같은 경우, 옵셔널 바인딩된 상수를 if문 밖에서 쓰는 것이 불가하고 guard let의 경우에는 해당 상수를 함수 내에서 지역 상수처럼 자유롭게 사용할 수 있습니다. (단, else문에서는 사용불가) 2. else의 생략 가능 여부에 차이가 있습니다. if let은 해당 조건이 true인 경우를 강조하는 문법입니다. 그렇기 때문에 else구문을 꼭 써주지 않아도 됩니다. 하지만, guard let의 경우 nil인 경우에 무조건 함수를 종료시켜버리기 때문에 else 구문을 꼭 써주어..
[TIL] 20231129 Protocol을 활용한 추상화 (코드 리팩토링) 이번주 새싹 과제에서 PR을 올린 후에 아이디어가 떠올라 어제 프로토콜 더 잘쓰기!! 에 대한 내용을 어제 정리했는데, 해당 내용을 적용해서 오늘 코드 리팩토링을 해봤다. 주요 변경 사항 protocol extension 을 활용한 메서드 기본 구현 Playable 프로토콜 extension을 통해 공통적으로 사용되는 메서드를 기본 구현해 추상화했습니다. validateUserInput() - 사용자 입력 값 유효성 검사 메서드 사용자 입력 값 유효성 검사 로직의 경우 가위바위보, 묵찌빠 두 게임에서 동일하기 때문에 extension에 기본 구현함으로써 각 클래스 내에서 같은 기능을 하는 함수를 구현하지 않아도 되도록 해서 중복된 코드를 하나로 묶었습니다..
[TIL] 20231128 프로토콜 좀 더 잘 사용하기 OOP에 대해 공부하다보니 Swift를 통한 객체 지향 설계에서 프로토콜이 매우 중요한 역할을 한다는 걸 알게 되었고 프로토콜을 정말 잘 사용하시는 분들의 코드를 보며.. 요즘 POP에 더 관심이 많아지고 프로토콜을 적극적으로 활용해보려고 노력하고 있슴돠.. 그래서! 새싹에서 정말 간단한 콘솔 프로그램을 과제로 구현하게 되었는데, 여기서도 공통된 부분을 묶어 객체를 추상화하고 다형성을 구현해 최대한 객체 지향 설계를 하기 위해프로토콜을 사용해보았습니당.. PR은 날렸지만 근데 뭔가 더더 묶을 수 있을 것 같애 .. 프로토콜 더 잘 활용할 수 있을 것 같애.. 이런 생각에 프로토콜을 좀 더 잘 사용할 수 있는 방법에 대해 찾아보게 되었다! 필요한 부분에 대해 서치해서 찾아본 정..
[Swift] Generic 안녕하세요 제인입니다 :)예전에 TIL로 정리했던 Generic에 대한 내용을 블로그에도 포스팅해두면 좋을 것 같아 쇽샥 해왔습니다 ㅎㅎGeneric에 대해 Apple의 Swift문서를 참고해서 정리해보려 합니다!Generic이란? generic은 포괄적인, 통칭의 정도의 사전적인 의미를 가집니다.그렇다면, Apple에서 소개하는 generic에 대해 한번 살펴보겠습니다!Generic이란 타입에 의존하지 않는 범용 코드를 작성할 때 사용합니다.Generic을 사용하면 중복을 피하고, 유연하고 재사용 가능한 코드를 작성할 수 있습니다.Generic은 Swift의 가장 강력한 기능 중 하나로, Swift 표준 라이브러리의 대부분은 Generic 코드로 작성되어있습니다.실제로, Generic을 사용했다는 것을..