Codable, Hashable, Identifiable

Jehyeon Lee·2024년 8월 25일
0

Codable, Hashable, Identifiable 이 세 가지 프로토콜을 사용하는 이유를 잘 모르고 단순히 ForEach나 디코딩을 위해 채택했습니다. 이제는 제대로 이해하고 싶어 블로그를 작성하면서 공부할 계획입니다.

Codable


/// 스스로 외부 표현으로 변환하거나 외부 표현으로 변환할 수 있는 유형입니다.
///
/// CodableEncodableDecodable 프로토콜의 타입 별칭입니다.
/// Codable을 타입이나 일반 제약 조건으로 사용하면 다음과 일치합니다.
/// 두 프로토콜을 모두 준수하는 모든 타입과 일치합니다.

역할

  • codable 프로콜은 swift에서 데이터와 객체 간의 변환을 용이하게 하는 프로토콜입니다.
  • Json, XML 등 외부 데이터 형식을 Swift 객체로 변환 또는 Swift내의 객체를 외부 데이터 형식으로 변환하는 작업을 도와주는 프로토콜 입니다.

주요기능

  • Encoding: 객체 -> 특정형식
  • Decoding: 특정형식의 데이터 -> Swift내 객체

사용예시

do {
                let decodedData = try JSONDecoder().decode(T.self, from: data)
                completion(.success(decodedData))
            } catch let decodingError {
                if let jsonString = String(data: data, encoding: .utf8) {
                    jhPrint("""
                            path: \(path), 
                            code: \(httpResponse.statusCode),
                            Decoding Error: \(decodingError.localizedDescription),
                            Decoding message: \(jsonString)
                            """ , isWarning: true)
                }
                completion(.failure(.decodingFailed(decodingError)))
            }

Hashable

/// 해시 값입니다.
///
/// 해시 값은 프로그램의 여러 실행에서 동일하게 보장되지 않습니다.
/// 프로그램의 다른 실행에서 동일하다고 보장되지 않습니다. 향후 실행 중에 사용할 해시 값을 저장하지 마세요.
///
/// 중요: 해시값해시가능 요구사항으로 더 이상 사용되지 않습니다. To
/// 해시 가능을 준수하려면 대신 hash(into:)요구 사항을 구현하세요. /// 컴파일러는hashValue에 대한 구현을 제공합니다. /// 이 값의 필수 구성 요소를 주어진 해셔에 공급하여 /// 주어진 해셔에 공급하여 해시합니다. /// /// 이 메서드를 구현하면 Hashable프로토콜을 준수합니다. 해싱에 사용되는 /// 해싱에 사용되는 컴포넌트는 비교되는 컴포넌트와 동일해야 합니다. /// 타입의== 연산자 구현에서 비교한 컴포넌트와 동일해야 합니다. 해셔.결합(_:)을 호출합니다.
/// 를 호출합니다.
///
/// - 중요: hash(into:) 구현에서,
/// 제공된 해셔 인스턴스에서 finalize()를 호출하지 마세요,
/// 또는 다른 인스턴스로 대체하세요.
/// 그렇게 하면 나중에 컴파일 타임 오류가 발생할 수 있습니다.
///
/// - 파라미터 해셔: 이 인스턴스의 컴포넌트를 결합할 때 사용할 해셔입니다.
///를 결합할 때 사용할 해시입니다.

뭐라는거야;

자이게 뭐냐

역할

  • Hashable 프로토콜은 해시 기반 컬렉션에서 객체를 키로 사용할 떄 필요하며, 객체의 동등성을 비교하는데 사용한다고 하네요.
  • 해시 기반 컬렉션에는 Set과 Dictionary가 포함됩니다.

주요기능

  • 해시 값을 생성: 객체의 해시 값을 생성하여 컬렉션의 효율적인 접근과 검색을 가능하게 한다.
  • 동등성 비교: 두 객체가 같은지 비교할 수 있게 한다.

사용예시

  • Set에서는 객체의 해시 값을 사용하여 중복을 제거하고 빠르게 객체를 검색한다.
  • DIctionary에서는 해시 값을 사용하여 키와 값을 매핑한다.
  • 딕셔너리나 세트 쓸 때 더 효율적인 데이터 서치를 위해 사용하는거래요

Identifiable

역할

  • Identifiable 프로토콜은 SwiftUI와 같은 프레임워크에서 객체를 고유하게 식별하기 위해 사용됩니다. 이 프로토콜을 채택한 객체는 고유한 식별자를 제공해야 하며, 이 식별자는 객체를 구분할 수 있는 값입니다. SwiftUI에서 ForEach와 같은 뷰를 사용할 때, 이 프로토콜을 채택한 배열을 사용할 경우, 별도로 식별자를 지정하지 않아도 됩니다. 그 이유는 Identifiable 프로토콜이 이미 객체의 고유한 식별자를 제공하기 때문입니다.
    내가쓴글 지피티가 첨삭해줬는데 깔끔하네

주요기능

  • 고유 식별자를 제공한다. 이게 끝 사용해보면 고유 ID 값을 구조에 넣으라고 계속 뭐라할거다.

참고: GPT

profile
공부한거 느낌대로 써내려갑니당

0개의 댓글

관련 채용 정보