UUID 표준에 따라서 이름을 부여하게 된다면 고유성이 완벽하게 보장되지는 않지만, 실제로 사용할 때 중복될 가능성이 거의 없기 때문에 널리 사용되고 있다.
UUID의 형식
총 36개의 문자열로 구성되어 있다. 32개의 실제 문자와 4개의 하이픈으로 구성되어 있다.
E621E1F8-C36C-495A-93FC-0C247A3E6E5F
팩토리 메소드 패턴
인스턴스 생성을 팩토리라는 곳에서 담당한다.
protocol RectangleModelFactoryProtocol {
func createRectangleModel(size: Size, point: Point, backgroundColor: RGBColor, opacity: Int) -> RectangleModel
}
class RectangleFactory: RectangleModelFactoryProtocol {
func createRectangleModel(size: Size, point: Point, backgroundColor: RGBColor, opacity: Int) -> RectangleModel {
let uniqueID = generateRandomID()
return RectangleModel(uniqueID: uniqueID, size: size, point: point, backgroundColor: backgroundColor, opacity: opacity)
}
private func generateRandomID() -> String {
let characters = "abcdefghijklmnopqrstuvwxyz0123456789"
var segments = [String]()
for _ in 0..<3 {
let segment = (0..<3).map { _ in characters.randomElement()! }
segments.append(String(segment))
}
return segments.joined(separator: "-")
}
}
💻고민과 해결
→ UUID의 각 구성 요소는 다양한 길이를 가져서, 지금 상황에 맞지 않다고 판단
각 3자리 형식의 문자열을 랜덤으로 생성하는 방식을 채택한다.
🤔결과
📚추가학습
시스템 로그 함수
Apple의 로깅 시스템의 일부이며, 앱 및 시스템 서비스의 실행 중에 발생하는 정보, 경고 및 오류와 같은 정보를 기록한다.
이러한 로깅 시스템은 매우 낮은 성능 오버헤드로 설계되었기 때문에, 애플리케이션의 성능에 큰 영향을 주지 않고 로그에 기록한다.
os.log 주요 특징
카테고리화: 로그를 다양한 카테고리로 분류할 수 있다. 빠르게 찾을 수 있음
효율성: os.log를 사용할 때, 이러한 문자열 보간(string interpolation)이 실제 로그가 필요한 순간(즉, 그 로그 레벨이 활성화되어 있고 로그 메시지가 실제로 출력되어야 할 때)까지 평가되지 않는다. 이는 문자열을 미리 조합하고 메모리에 저장하는 대신, 실제로 필요할 때만 해당 작업을 수행한다, 결론적으로 불필요한 처리를 방지하여 성능에 미치는 영향을 최소화한다.
동적 수준 설정: 로그 수준(info, debug, error…)을 동적으로 조정할 수 있다. 개발중에는 상제한 로그를 확인하고, 출시 버전에는 중요한 로그만 확인할 수 있다.
통합된 로그 저장소: 여러 플랫폼에서 일관된 로깅 경험을 제공할 수 있다.
import os
private let logger = os.Logger(subsystem: "pro.DrawingApp.model", category: "ModelLogging")
logger.log(level: .info, "Rect1 \(rect1.description)")
subsystem: 앱의 전체 기능 또는 부분에 대한 고유한 문자열, 주로 번들 식별자를 사용한다
category: 관련성 있는 로그를 그룹화하는데 사용한다. networking, UI, database 등등
로그 레벨
default
기본 로그 레벨
일반적인 시스템 작동 중에 정보를 제공하거나 특정 이벤트를 기록하는 데 사용
시스템 동작에 영향을 주지 않는 일반적인 정보에 적합하다.
info
정보 제공용 로그 레벨
default 보다는 덜 중요하지만 특정 상황에서 유용한 정보를 제공하는 데 사용
디버깅이나 추가적인 컨텍스트 제공에 유용하다
기본적으로 디바이스 로그에서는 보이지 않고, 개발 중이나 디버깅할 때 활성화하여 볼 수 있다
debug
디버그용 로그 레벨
개발 중이나 문제 해결 시에만 세부 정보를 제공하는 데 사용한다
출시된 앱에서는 캡쳐되지 않는다.
error
예상치 않은 문제나 오류가 발생했을 때 사용
fault
앱의 불안정성을 야기하거나 크래시를 유발할 수 있는 잘못된 상태나 오류를 나타낼 때 사용
error보다 심각한 상황에 적합
Protocol
프로토콜은 약속이라고 생각한다.
타입 안정성 보장 : 특정 프로토콜을 준수하는 타입만을 요구하는 함수 등을 정의할 수 있다.
다형성 지원: 서로 다른 객체가 하나의 프로토콜을 준수하면서 다향성을 실현한다.
델리게이션 패턴 구현: 클래스나 구조체가 자신의 일부 책임을 다른 타입의 인스턴스에 위임할 수 있다.
확장성 제공: 프로토콜을 확장하여 기본 구현을 제공하고, 특정 조건을 만족하는 타입에 대해 추가적인 기능을 제공한다.
🎯주요 작업
📚학습 키워드
UUID
UUID 표준에 따라서 이름을 부여하게 된다면 고유성이 완벽하게 보장되지는 않지만, 실제로 사용할 때 중복될 가능성이 거의 없기 때문에 널리 사용되고 있다.
UUID의 형식
총 36개의 문자열로 구성되어 있다. 32개의 실제 문자와 4개의 하이픈으로 구성되어 있다.
E621E1F8-C36C-495A-93FC-0C247A3E6E5F
팩토리 메소드 패턴
💻고민과 해결
→ UUID의 각 구성 요소는 다양한 길이를 가져서, 지금 상황에 맞지 않다고 판단
각 3자리 형식의 문자열을 랜덤으로 생성하는 방식을 채택한다.
🤔결과
📚추가학습
시스템 로그 함수
Apple의 로깅 시스템의 일부이며, 앱 및 시스템 서비스의 실행 중에 발생하는 정보, 경고 및 오류와 같은 정보를 기록한다.
os.log 주요 특징
os.log
를 사용할 때, 이러한 문자열 보간(string interpolation)이 실제 로그가 필요한 순간(즉, 그 로그 레벨이 활성화되어 있고 로그 메시지가 실제로 출력되어야 할 때)까지 평가되지 않는다. 이는 문자열을 미리 조합하고 메모리에 저장하는 대신, 실제로 필요할 때만 해당 작업을 수행한다, 결론적으로 불필요한 처리를 방지하여 성능에 미치는 영향을 최소화한다.subsystem: 앱의 전체 기능 또는 부분에 대한 고유한 문자열, 주로 번들 식별자를 사용한다
category: 관련성 있는 로그를 그룹화하는데 사용한다. networking, UI, database 등등
로그 레벨
default
info
debug
error
fault
Protocol
프로토콜은 약속이라고 생각한다.