[Swift] Design Pattern : Traits

Seonhu Kim·2023년 5월 29일
0

Swift

목록 보기
5/7
post-thumbnail

지난 달 사내 개발자 세미나에서 프론트엔드 개발자 분이 Mixin이라는 디자인 패턴을 소개를 해주셨다.

Mixin Pattern은 객체 객체 프로그래밍에서 코드 재생성 및 모듈성을 증가시키는 디자인 패턴이다.

Mixin은 클래스에서 다중 상속과 stored property를 통해 기능을 확장하는 방법인데, Swift의 경우 다중 상속을 지원하지 않기 때문에 Mixin과 유사한 Traits을 정리하고자 한다.

Mixin과 Traits 주된 개념은 특정 클래스에 어떤 기능이 필요할 때, 이 기능을 interface로 정의하여 해당 interface만 준수하면 바로 기능을 사용할 수 있도록 하는 것이다. 이를 통해 코드의 재사용성을 높이고 다중 상속의 모호성 문제(상속이 깊어질 수록 복잡도 증가)를 해결한다. 최종적으로 flatten the inheritance hierarchy를 준수하기 위함이다.

아래의 예시 이미지로 파악할 수 있다.

Mixin과 Traits을 사용하지 않은 경우 상속이 많아지므로 복잡도 증가함

Mixin과 Traits을 사용하면 flatten 형태로 유지

사실 Traits이라는 패턴 용어만 몰랐을뿐 내가 가장 잘 사용하고 있던 코딩 스타일이었다. 중복된 코드를 피하고, 공통 모듈로 분리하고자 할 때, 하나의 프로토콜을 기능 단위로 정의한 다음 필요한 메서드를 Protocol Extension에 구현하여 사용했다.

아래는 예시 코드이다.

protocol Printable {
    func print()
}

extension Printable {
    func print() {
        print("Printing...")
    }
}

protocol Loggable {
    func log()
}

extension Loggable {
    func log() {
        print("Logging...")
    }
}

struct MyStruct: Printable, Loggable {}

let myStruct = MyStruct()
myStruct.print() // "Printing..." 출력
myStruct.log() // "Logging..." 출력
profile
iOS Developer.

0개의 댓글