[swift] Swift 리팩토링 기법

Swift는 강력한 프로그래밍 언어로, 코드를 보다 깔끔하고 효율적으로 만들 수 있는 다양한 리팩토링 기법들을 제공합니다. 리팩토링은 코드의 구조와 동작을 유지한 채로 가독성을 높이거나 성능을 개선하는 작업을 말합니다. 이번 글에서는 몇 가지 Swift 리팩토링 기법을 알아보겠습니다.

1. 네이밍과 주석 개선

첫 번째 리팩토링 기법은 네이밍과 주석을 개선하는 것입니다. 변수, 함수, 클래스 등의 이름을 명확하게 지으면 코드를 읽고 이해하기 쉽습니다. 변수나 함수의 이름을 변경하면서 의도를 명확히 전달하는 것이 중요합니다. 주석 역시 의미 있는 내용을 담기 위해 사용되어야 합니다. 잘못된 주석보다는 코드 자체로 의도를 전달할 수 있도록 노력해야 합니다.

예시

// 재고 수량
var stockCount: Int

// 재고 수량 초기화
func initializeStockCount() {
    stockCount = 0
}

개선된 예시:

var currentStockCount: Int

func resetStockCount() {
    currentStockCount = 0
}

2. 함수 분리와 추상화

함수를 분리하고 추상화하는 리팩토링 기법은 코드의 재사용성을 높이고 가독성을 개선하는 데 도움을 줍니다. 한 함수가 여러 가지 작업을 처리한다면 각 작업을 별도의 함수로 분리하여 역할을 명확히 할 수 있습니다. 또한 공통으로 사용되는 기능을 추상화하여 중복을 제거할 수 있습니다.

예시

func processOrder(order: Order) {
    // 주문 유효성 검사
    if validateOrder(order) {
        // 상품 판매
        sellProduct(order.product)
        // 재고 업데이트
        updateStockCount(order.product)
        // 결제 처리
        processPayment(order.payment)
        // 배송 처리
        processDelivery(order)
    }
}

개선된 예시:

func processOrder(order: Order) {
    if validateOrder(order) {
        sellProduct(order.product)
        updateStockCount(order.product)
        processPayment(order.payment)
        processDelivery(order)
    }
}

func validateOrder(order: Order) -> Bool {
    // 주문 유효성 검사 로직
    // ...
}

func sellProduct(product: Product) {
    // 상품 판매 로직
    // ...
}

func updateStockCount(product: Product) {
    // 재고 업데이트 로직
    // ...
}

func processPayment(payment: Payment) {
    // 결제 처리 로직
    // ...
}

func processDelivery(order: Order) {
    // 배송 처리 로직
    // ...
}

3. 옵셔널 체이닝과 가드문 사용

옵셔널 체이닝과 가드문은 Swift에서 안전한 코드 작성을 위한 중요한 기법입니다. 옵셔널 체이닝은 옵셔널 타입의 프로퍼티나 메서드에 안전하게 접근할 수 있는 방법을 제공합니다. 가드문은 조건이 충족되지 않을 경우 빠르게 함수를 종료하고 잠재적인 에러를 방지하는 데 도움을 줍니다.

예시

func processOrder(order: Order?) {
    if let validOrder = order {
        let product = validOrder.product
        
        if let validProduct = product {
            if let stockCount = validProduct.stockCount {
                if stockCount > 0 {
                    // 주문 처리
                    // ...
                } else {
                    print("주문 실패: 재고가 부족합니다.")
                }
            } else {
                print("주문 실패: 상품의 재고 정보가 없습니다.")
            }
        } else {
            print("주문 실패: 상품 정보가 없습니다.")
        }
    } else {
        print("주문 실패: 주문 정보가 없습니다.")
    }
}

개선된 예시:

func processOrder(order: Order?) {
    guard let validOrder = order else {
        print("주문 실패: 주문 정보가 없습니다.")
        return
    }
    
    guard let product = validOrder.product else {
        print("주문 실패: 상품 정보가 없습니다.")
        return
    }
    
    guard let stockCount = product.stockCount else {
        print("주문 실패: 상품의 재고 정보가 없습니다.")
        return
    }
    
    guard stockCount > 0 else {
        print("주문 실패: 재고가 부족합니다.")
        return
    }
    
    // 주문 처리
    // ...
}

위에서는 옵셔널 체이닝과 가드문을 사용하여 중첩된 if문을 대체하여 가독성을 개선하고 코드의 분기점을 줄였습니다.

마무리

Swift 리팩토링 기법은 코드를 더욱 체계적이고 유지보수하기 쉽게 만들어 줍니다. 네이밍과 주석 개선, 함수 분리와 추상화, 옵셔널 체이닝과 가드문을 활용하여 코드의 가독성과 유지보수성을 향상시킬 수 있습니다. 이러한 리팩토링 기법을 사용하면 더욱 효율적이고 견고한 Swift 코드를 작성할 수 있습니다.