codesquad-members-2024 / swift-drawing

iOS 세번째 프로젝트
0 stars 1 forks source link

KAI - 아이패드 앱 프로젝트 #1

Closed joho2022 closed 7 months ago

joho2022 commented 7 months ago

🎯주요 작업

📚학습 키워드

UUID

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: "-")
    }
}

💻고민과 해결

스크린샷 2024-03-18 오후 2 27 58

→ UUID의 각 구성 요소는 다양한 길이를 가져서, 지금 상황에 맞지 않다고 판단

각 3자리 형식의 문자열을 랜덤으로 생성하는 방식을 채택한다.

🤔결과

스크린샷 2024-03-18 오후 3 05 49

📚추가학습

시스템 로그 함수

Apple의 로깅 시스템의 일부이며, 앱 및 시스템 서비스의 실행 중에 발생하는 정보, 경고 및 오류와 같은 정보를 기록한다.

os.log 주요 특징

  1. 카테고리화: 로그를 다양한 카테고리로 분류할 수 있다. 빠르게 찾을 수 있음
  2. 효율성: os.log를 사용할 때, 이러한 문자열 보간(string interpolation)이 실제 로그가 필요한 순간(즉, 그 로그 레벨이 활성화되어 있고 로그 메시지가 실제로 출력되어야 할 때)까지 평가되지 않는다. 이는 문자열을 미리 조합하고 메모리에 저장하는 대신, 실제로 필요할 때만 해당 작업을 수행한다, 결론적으로 불필요한 처리를 방지하여 성능에 미치는 영향을 최소화한다.
  3. 동적 수준 설정: 로그 수준(info, debug, error…)을 동적으로 조정할 수 있다. 개발중에는 상제한 로그를 확인하고, 출시 버전에는 중요한 로그만 확인할 수 있다.
  4. 통합된 로그 저장소: 여러 플랫폼에서 일관된 로깅 경험을 제공할 수 있다.
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

debug

error

fault

Protocol

프로토콜은 약속이라고 생각한다.