Swift/개념 & 응용

[Swift] 구조체와 클래스의 프로토콜 자동 준수 메커니즘 (w. ChatGPT)

유정주 2023. 8. 25. 13:38
반응형

서론

최근 Equatable, Hashable, Comparable을 복습하면서 궁금한 점이 있었습니다.

 

왜 구조체는 채택만 해도 자동으로 준수가 되는데 클래스는 직접 요구 메서드를 구현해야 하는 걸까?입니다.

 

Value 타입과 Reference 타입의 차이와 연관이 있다는 건 추측할 수 있었지만,

명확한 이유를 찾긴 어려웠습니다.

 

그래서 이번에는 ChatGPT와 함께 문제를 해결해 보았습니다.

스텝 바이 스텝으로 대답이 정확해지는 과정이 재밌어서 이렇게 포스팅으로 남겨봅니다.

 

 

1. 일단 질문하기

일단 큰 고민 없이 물어봤습니다.

그럴듯한 대답이 나왔습니다만,

"값 타입이 프로토콜을 채택만 해도 되는 이유"에 대한 답은 아니었습니다.

 

 

2. 클래스와 비교하여 질문

다음은 클래스와 비교해서 질문했습니다.

이번에도 그럴듯한 대답이 나왔네요.

제가 원하는 답과도 연관이 있는 거 같습니다.

 

처음 추측한 대로 값 타입과 참조 타입의 차이 때문이었네요.

얼추 틀은 알아냈지만 제대로 이해가 되지는 않았어요.

값 타입의 인스턴스 복사본 특징과 프로토콜이 자동으로 준수되는 게 무슨 상관이 있지? 라는 의문이 생겼습니다.

 

 

3. 한 번 더 물어보기

ChatGPT는 동일한 질문이라도 다른 답변을 하는 경우도 있습니다.

그래서 처음 질문을 조금 바꿔서 물어봤어요.

정말 괜찮은 답변이 나왔네요!

이번 답변에서 "Synthesized Conformance" 키워드를 얻었습니다.

이렇게 답변으로 특정 키워드가 나오면 이를 기반으로 구글링 하기도 쉬워집니다.

 

Synthesized Conformance 말고도 "컴파일러가 자동으로 요구사항을 충족시켜 준다"는 것을 알아냈네요.

 

사실 이 답변을 받고 여기에서 그만할까..? 라는 유혹이 생겼습니다.

스택오버플로우나 스위프트포럼에 동일한 질문도 없고, 컴파일러가 알아서 해준다는데 더 알아봐야 할까 싶었거든요.

근데 전 남는 게 시간인 백수이기 때문에 조금만 더 알아보자! 했네요 ㅋㅋ

 

 

4. 연관 키워드로 물어보기

Synthesized Conformance 키워드를 이용해 Synthesized Implementation라는 연관 키워드를 알아냈습니다.

Synthesized Conformance는 위 답변에서 어떤 내용인지 알 수 있었기 때문에

이번에는 Synthesized Implementation 키워드로 질문을 해봤습니다.

이런... 답변이 길에서 벗어났네요 ㅠㅠ

키워드에 대해 제대로 파악하지 못하고 질문을 해서 그런 듯합니다.

한 번 더 물어봤지만 동일하네요.

 

이 QnA에서는

Synthesized Implementation는 

구조체, 클래스와 상관없이 컴파일러가 자동으로 요구사항을 구현해 주는 기능이라는 것을 배웠습니다.

 

 

5. 예시와 함께 물어보기 (답 얻음)

이번에는 아예 다른 방향으로 가봤습니다.

예시와 함께 물어보는 방향으로 시도했어요.

완벽하게 이해가 되는 답변이 나왔습니다!

구조체와 클래스의 차이를 녹여서 설명해 주는 답변이네요.

 

구조체는 멤버 프로퍼티의 값을 비교하면 되기 때문에 컴파일러가 자동으로 준수할 수 있고,

클래스는 참조가 같은지 비교해야 해서 컴파일러가 자동으로 준수하기 애매하다는 거군요.

(기준이 명확하지 않아 지원을 안 한다는 점이 String의 random access 미지원이 떠오르네요.)

 

 

6. 다른 예시 물어보기

음... 그런데 자동으로 준수해 주는 프로토콜이 비교 프로토콜만 있는 건 아니잖아요?

예를 들면, Codable 이라던가??

그래서 한 번 더 물어봤습니다.

이번에도 성공적으로 답변을 얻었습니다.

심지어 제가 의문을 품었던 Codable과 위에서 알아본 Synthesized Implementation에 대해서도 언급이 되었네요.

 

비교 프로토콜이 아니더라도 자동 준수를 지원하는 게 있지만, 예외도 있다는 것을 알았습니다.

 

자동 준수를 지원하는 또 다른 프로토콜이 있는지도 물어봤습니다.

구조체만 집중해서 질문을 했는데, 열거형에서 사용 가능한 CaseIterable을 알려준 게 인상적이네요.

Optional.swift 살펴보기에서 살펴본 ExpressibleByXLiteral 프로토콜도 자동 준수를 지원한다는 점도 배웠습니다.

 

 

마무리

"왜 구조체는 채택만 해도 자동으로 준수가 되는데 클래스는 직접 요구 메서드를 구현해야 하는 걸까?"라는 궁금증은 ChatGPT와 7번의 문답을 통해 해결되었습니다.

문답을 통해 Synthesized Conformance, Synthesized Implementation 키워드도 알 수 있었습니다.

 

ChatGPT로 단계별 질문으로 유의미한 결과를 얻어서 좋았습니다.

질문을 자세히 할수록, 예시를 들어서 질문할수록 자세한 답변이 나온다는 것을 알았습니다.

 

영어로 질문했다면 더 정확한 답변을 얻을 수 있었을까요?

이번 포스팅에는 안 넣었지만 영어로 질문한 것도 있는데 큰 차이는 없었거든요.

한국어에 특화돼있다는 하이퍼클로버 X도 사용해보고 싶은데 언제쯤 사용이 가능할까요? ㅋㅋ

 

 

번외

이번 블로그 포스팅 제목도 ChatGPT에게 물어봤습니다 ㅋㅋ

아주 좋네요 ㅎ

 

다음 글 보러가기

https://jeong9216.tistory.com/675

 

 

감사합니다.


아직은 초보 개발자입니다.

더 효율적인 코드 훈수 환영합니다!

공감 댓글 부탁드립니다.

 

 

반응형