Swift 썸네일형 리스트형 os_log에 대하여 개요 프로젝트를 진행하다 멘토님께서 이러한 리뷰를 남겨주셨는데요. 콘솔창에 메시지를 찍기 위해서 print()밖에 사용하지 않았기 때문에 처음 들어보는 os_log에 대해서 정리해봤어요. os_log os_log는 Apple의 로깅 시스템의 일부로, 앱 및 시스템 서비스의 실행 중에 발생하는 정보, 경고 및 오류와 같은 정보를 기록하는 데 사용돼요. 이 로깅 시스템은 고성능이며, 앱의 성능에 크게 영향을 주지 않으면서도 유용한 로그 정보를 캡쳐하는 데 중점을 둬요. os_log의 주요 특징은 다음과 같아요. 카테고리화: 로그를 다양한 카테고리로 분류할 수 있어요. 이를 통해 관련 로그를 빠르게 찾을 수 있죠. 효율성: 로그 메시지는 런타임에 평가되기 전까지 문자열 인터폴레이션을 지연시켜요. 이는 불필요한.. 더보기 init(coder:), init(frame:) 파해치기 개요 UIView를 상속받아 커스텀 뷰을 그리다보면 init(coder:)와 init(frame:)을 만나게 되는데요. 이 두 생성자가 어떤 역할을 하는 지, 그리고 왜 init(coder:) 생성자가 필수인지에 대해 알아보았어요. init(frame:)과 init(coder:) init(frame:)과 init(coder:)는 iOS에서 UIView를 상속받는 클래스를 커스터마이징할 때 자주 마주치게 되는 두 개의 초기화 메서드에요. 이 두 메서드는 UIView 및 해당 서브클래스들의 생성 시 사용되며 각각 다른 상황에서 호출돼요. init(frame:) 이 초기화 메서드는 프로그래밍 방식으로 뷰를 생성할 때 호출돼요. 예를 들어, let myView = CustomView(frame: CGRect(x.. 더보기 Swift Style Guide 번역 (공부용) Fundamentals (기본 사항)사용 시점의 명확성이 가장 중요한 목표입니다. 메서드나 프로퍼티와 같은 엔티티는 한 번만 선언되지만 반복적으로 사용됩니다. 이러한 사용처를 명확하고 간결하게 만들 수 있도록 API를 설계하세요. 설계를 평가할 때 선언문을 읽는 것만으로는 충분하지 않으며, 항상 사용 사례를 검토하여 문맥상 명확하게 보이는지 확인해야 합니다.간결함보다 더 중요한 것은 명확성입니다. Swift 코드는 간결할 수 있지만, 최소한의 문자로 가능한 한 가장 작은 코드를 구현하는 것은 목표가 아닙니다. Swift 코드의 간결성은 강력한 타입 시스템과 상용구를 자연스럽게 줄여주는 기능의 부작용입니다.모든 선언에 대해 문서 주석을 작성하세요. 문서 작성을 통해 얻은 인사이트는 디자인에 큰 영향을 미칠.. 더보기 Submodule에 대하여 개요 Git - Submodules 프로젝트를 작업하다보면 그 안에서 다른 프로젝트를 사용해야하는 경우가 종종 있어요. 타사에서 개발한 라이브러리거나 별도로 개발하여 여러 상위 프로젝트에서 사용하고 있는 라이브러리일 수도 있죠. Git의 서브모듈을 사용하면 Git 레포지토리를 다른 Git 레포지토리의 하위 디렉토리로 유지할 수 있어요. 주요 명령어 submodule 추가: 특정 URL에서 하위 모듈을 현재 저장소에 추가해요. git submodule add [URL] [path/to/submodule] 하위 모듈과 함께 저장소 클론: 저장소와 그 안의 모든 하위 모듈을 동시에 클론해요. git clone [URL] --recurse-submodules submodule 초기화 및 업데이트: 만약 --re.. 더보기 merge, rebase, squash 차이 개요 깃에는 커밋을 합칠 수 있는 여러 키워드들이 있어요. 이번에는 가장 자주 사용되는 merge, rebase, squash 키워드와 그 차이들에 대해 알아봤어요. Merge 두 개의 branch를 합치는 과정이에요. 만약 'feature' branch에서 작업을 완료하고 이를 'main' branch에 합치려면 merge를 사용하게 돼요. merge를 할 때, 'feature'와 'main' branch의 변경 사항들을 합치고, 그 결과를 새로운 커밋으로 저장해요. // 현재 브랜치에 {test} 브랜치를 합치겠다는 뜻 git merge test Rebase 한 branch의 변경 사항을 다른 branch 위에 "재배치"하는 과정이에요. 예를 들어 'feature' branch에서 작업하던 중 'ma.. 더보기 convenience init에 대하여 개요 Swift에서 convenience 초기화 메서드는 특정 클래스에 대한 보조 초기화 메서드를 제공하는 데 사용되는 메서드에요. 이번에는 convenience init이 무엇인지, 그리고 일반적인 init이 있는데 왜 convenience init을 사용하는 지에 대해 알아봤어요. convenience init convenience init은 보조(편의) 초기화라고 불리는 일종의 초기화 키워드에요. 그리고 convenience init은 항상 클래스 내의 주 초기화 메서드를 호출하여 모든 속성이 적절하게 초기화되도록 해야해요. class Person { var name: String var age: Int // 주 초기화 메서드 init(name: String, age: Int) { self.name.. 더보기 스위프트에서 옵셔널을 처리하는 방법 개요 스위프트에서는 옵셔널을 처리하는 여러가지 방법을 제공해요. 어떤 방법들이 있고 각각 어떻게 사용하는지, 언제 사용하면 좋을지 간단하게 정리해봤어요. 옵셔널 바인딩 (Optional Binding) if let unwrappedValue = optionalValue { print("Value is \\(unwrappedValue)") } else { print("No value") } guard let value = optionalValue else { print("No value") return } if-let, guard-let으로 사용하는 옵셔널 바인딩은 옵셔널에 값이 있는지 확인하고 그 값을 일반 변수나 상수로 사용하고 싶을 때 주로 사용해요. 또는 값이 있거나 없을 때 특정 코드 블럭을 실행.. 더보기 스위프트의 꼬리재귀 개요 스위프트에서는 꼬리재귀 최적화를 지원하는데요, 꼬리재귀가 무엇인지 어떠한 장점이 있는지 정리해봤어요. 꼬리재귀란 무엇인가요? 꼬리재귀는 프로그래밍에서 사용되는 재귀 호출의 특별한 형태에요. 꼬리재귀에서는 함수가 자신을 다시 호출할 때 이 재귀 호출이 해당 함수의 마지막 연산이며, 이후에 추가적인 작업이 없는 경우를 말해요. 즉, 함수의 반환 값이 다른 연산이나 표현식 없이 바로 재귀 호출의 반환 값과 동일하면, 그 함수 호출은 꼬리재귀 호출로 간주되죠. // 일반 재귀 // 함수의 반환 값에 다른 연산이 포함되어 있다. func recursion(_ num: Int) -> Int { if num == 0 { return num } return num + recursion(num - 1) } // 꼬.. 더보기 이전 1 2 다음