본문 바로가기

Swift

[Swift 문법] 프로토콜을 사용한 조건문 줄이기

안녕하세요. 이번 글에선 프로토콜을 사용해서 코드의 가독성을 높이는 방법에 대해 알아보도록 하겠습니다.  

저같은 경우 프로토콜을 처음 접했을때 어떤 상황에서 사용하는게 좋은건지 몰랐지만 지금 제가 소개하는 간단한 예제를 통해서

프로토콜을 사용하면 불필요한 반복문도 줄이고 유연하게 만들 수 있구나를 알아가시면 좋을 것 같네요.

 

먼저 예제로 살펴볼 코드는 프로토콜을 사용하지 않은 예 입니다.

class Car {
    func drive() {
        print("차를 운전합니다.")
    }
}

class Bicycle {
    func drive() {
        print("자전거를 탑니다.")
    }
}

func activateVehicle(_ vehicle: Any) {
   if vehicle is Car {
        if let car = vehicle as? Car {
            car.drive()
        }
    } else if vehicle is Bicycle {
        if let bicycle = vehicle as? Bicycle {
           bicycle.drive()
       }
    }
}

 

activateVehicle 메서드를 살펴보면 Any 타입으로 받게되는 vehicle 을 Car 인지 Bicycle 인지 조건문을 통해 나누어 주고 있고

그 안에서 옵셔널 언래핑 코드까지 포함되어 있는걸 확인할 수 있습니다.

 

Car, Bicycle 둘 다 동일한 drive() 메서드를 사용하고 있는 상태이고 activateVehicle 안에서는 굳이 조건을 통해 이것저것 나누지

않아도 될 것 같은데... 라는 생각을 할 때 사용할 수 있는 것이 바로 프로토콜 입니다.

 

protocol Drivable {
    func drive()
}

 

이렇게 공통으로 사용할 수 있는 프로토콜을 정의해주고

 

class Car: Drivable {
    func drive() {
        print("차를 운전합니다.")
    }
}

class Bicycle: Drivable {
    func drive() {
        print("자전거를 탑니다.")
    }
}

 

Drivable 프로토콜을 채택할 수 있게 설정을 해주면 이제 조건문을 줄이러 갈 준비가 끝났습니다.

 

func activateVehicle(_ vehicle: Any) {
    if let drivableVehicle = vehicle as? Drivable {
        drivableVehicle.drive()
    }
}

 

vehicle 인스턴스가 Drivable 프로토콜을 따르고 있는지 확인하기 위한 타입캐스팅을 진행하고

조건이 충족한다면 그때 drive() 메서드를 호출할 수 있도록 합니다.

 

이렇게 되면 Car 인지 Bicycle 인지 확인할 필요도 없어지게 되고 불필요한 옵셔널 언래핑도 하나 줄일 수 있게 됩니다.

 

이렇게 프로토콜 활용 방법에 대한 예제를 알아봤고 추가적으로 생각나는 것들이 있다면 글 작성해보겠습니다.

 

읽어주셔서 감사합니다! ☺️

'Swift' 카테고리의 다른 글

[Swift 문법] if case 를 사용한 패턴매칭  (2) 2024.06.08