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.. 더보기 Zigzag Conversion - leetcode https://leetcode.com/problems/zigzag-conversion/description/ class Solution { func convert(_ s: String, _ numRows: Int) -> String { // 지그재그 문자를 저장할 배열 var words: [String] = [String].init(repeating: "", count: numRows) // 입력받은 문자열을 배열로 변환 let input = s.map { $0.description } // 증가할건지 감소할건지를 정하는 변수 var sign: Bool = true // 지그재그 문자를 저장할 배열의 인덱스 var index: Int = 0 // 만약 한 줄이면 문자 그대로 리턴하고 끝냄 if numRo.. 더보기 Add Two Numbers - leetcode https://leetcode.com/problems/add-two-numbers/description/ public class ListNode { public var val: Int public var next: ListNode? public init() { self.val = 0; self.next = nil; } public init(_ val: Int) { self.val = val; self.next = nil; } public init(_ val: Int, _ next: ListNode?) { self.val = val; self.next = next; } } class Solution { func addTwoNumbers(_ l1: ListNode?, _ l2: ListNode?) -> Li.. 더보기 Swift Style Guide 번역 (공부용) Fundamentals (기본 사항)사용 시점의 명확성이 가장 중요한 목표입니다. 메서드나 프로퍼티와 같은 엔티티는 한 번만 선언되지만 반복적으로 사용됩니다. 이러한 사용처를 명확하고 간결하게 만들 수 있도록 API를 설계하세요. 설계를 평가할 때 선언문을 읽는 것만으로는 충분하지 않으며, 항상 사용 사례를 검토하여 문맥상 명확하게 보이는지 확인해야 합니다.간결함보다 더 중요한 것은 명확성입니다. Swift 코드는 간결할 수 있지만, 최소한의 문자로 가능한 한 가장 작은 코드를 구현하는 것은 목표가 아닙니다. Swift 코드의 간결성은 강력한 타입 시스템과 상용구를 자연스럽게 줄여주는 기능의 부작용입니다.모든 선언에 대해 문서 주석을 작성하세요. 문서 작성을 통해 얻은 인사이트는 디자인에 큰 영향을 미칠.. 더보기 스위프트의 꼬리재귀 개요 스위프트에서는 꼬리재귀 최적화를 지원하는데요, 꼬리재귀가 무엇인지 어떠한 장점이 있는지 정리해봤어요. 꼬리재귀란 무엇인가요? 꼬리재귀는 프로그래밍에서 사용되는 재귀 호출의 특별한 형태에요. 꼬리재귀에서는 함수가 자신을 다시 호출할 때 이 재귀 호출이 해당 함수의 마지막 연산이며, 이후에 추가적인 작업이 없는 경우를 말해요. 즉, 함수의 반환 값이 다른 연산이나 표현식 없이 바로 재귀 호출의 반환 값과 동일하면, 그 함수 호출은 꼬리재귀 호출로 간주되죠. // 일반 재귀 // 함수의 반환 값에 다른 연산이 포함되어 있다. func recursion(_ num: Int) -> Int { if num == 0 { return num } return num + recursion(num - 1) } // 꼬.. 더보기 protocol, extension에서 stored property사용하는 방법 개요 프로토콜과 익스텐션에서는 저장 프로퍼티를 사용할 수 없고, 계산 프로퍼티를 사용해야해요. 그럼에도 불구하고 저장 프로퍼티를 사용하고 싶다면 어떻게 할 수 있을까요? 이번에는 프로토콜과 익스텐션에서 저장 프로퍼티와 같은 효과를 볼 수 있는 방법에 대해 알아봤어요. protocol, extension에서의 stored property(저장 프로퍼티) 먼저 프로토콜과 익스텐션에서는 왜 저장 프로퍼티를 사용할 수 없을까요? 프로토콜은 타입의 행위를 정의하는 추상화 도구에요. 이러한 프로토콜이 저장 프로퍼티를 가진다는 것은 프로토콜이 어떤 상태를 가져야 한다는 구체적인 구현 세부 사항을 강요하게 되므로 본래의 목적에 맞지 않아요. 익스텐션은 기존 타입에 새로운 기능을 추가하는 도구에요. 만약 저장 프로퍼티를.. 더보기 weak, unowned의 성능 차이 개요 스위프트에서 weak와 unowned의 차이점으로 성능 차이가 많이 언급되는데요, 이번에는 weak와 unowned가 어떻게 동작하는지, 왜 성능 차이가 발생하는지에 대해 알아보려해요. 참조 카운트 스위프트는 ARC라는 자동 참조 카운팅을 사용하여 앱의 메모리 사용량을 추적하고 관리해요. 자세한 내용은 공식 문서에 나와있어요. https://docs.swift.org/swift-book/documentation/the-swift-programming-language/automaticreferencecounting/ Documentation docs.swift.org 여기선 조금 더 자세하게 스위프트가 참조 카운트(RefCount)를 어떻게 구현하고 있는지에 대해 다룰거에요. 이 내용은 스위프트 깃허.. 더보기 이전 1 2 다음