프로그래밍공부(Programming Study)/IOS 개발

SwiftUI에서 다양한 접근자 종류와 실무 사용 방법

Chann._.y 2024. 10. 24.
728x90

1. Swift의 접근 제어자 종류 개요

Swift에서 접근 제어자는 코드 내에서 특정 요소(클래스, 구조체, 함수, 변수 등)의 접근 범위를 제한하는 역할을 합니다. 이를 통해 개발자는 불필요한 접근을 제한하고, 코드의 안전성과 일관성을 유지할 수 있습니다. Swift는 5가지 주요 접근 제어자를 제공합니다: open, public, internal, fileprivate, private.


2. 접근 제어자의 종류 및 사용 사례

open

  • 특징: Swift에서 가장 개방적인 접근 제어자입니다. open으로 정의된 클래스는 모듈 외부에서도 상속이 가능하고, 오버라이드가 가능합니다.
  • 사용 예: 오픈소스 라이브러리에서 주로 사용됩니다.
open class OpenClass {
    open func openMethod() {
        print("This method can be overridden.")
    }
}

public

  • 특징: 모듈 외부에서 접근 가능하지만, 상속과 오버라이드는 불가능합니다. 클래스 또는 멤버를 공개하되, 수정은 불가능하게 할 때 사용됩니다.
  • 사용 예: 라이브러리 API 제공 시, 외부 모듈에서 호출 가능하도록 설정할 때 주로 사용합니다.
public class PublicClass {
    public func publicMethod() {
        print("Accessible but not overridable.")
    }
}

internal (기본값)

  • 특징: 모듈 내에서만 접근이 가능합니다. internal은 Swift의 기본 접근 수준으로, 명시적으로 지정하지 않으면 자동으로 적용됩니다.
  • 사용 예: 일반적인 앱 개발에서 자주 사용됩니다.
class InternalClass {
    func internalMethod() {
        print("Accessible within the same module.")
    }
}

fileprivate

  • 특징: 같은 파일 내에서만 접근이 가능합니다. 즉, 동일한 소스 파일 내의 코드에서만 접근할 수 있도록 제한합니다.
  • 사용 예: 하나의 파일에서 여러 클래스나 구조체가 서로 관련이 있을 때 유용하게 사용할 수 있습니다.
fileprivate class FilePrivateClass {
    fileprivate func filePrivateMethod() {
        print("Accessible only within this file.")
    }
}

private

  • 특징: 같은 범위 내에서만(클래스, 구조체 등) 접근이 가능합니다. 이 클래스 외부에서는 절대 접근할 수 없습니다.
  • 사용 예: 특정 클래스나 구조체 내부에서만 변수를 보호하고 싶을 때 사용합니다.
class PrivateClass {
    private var privateVariable = 0

    private func privateMethod() {
        print("Accessible only within the class or struct.")
    }
}

3. 실무에서의 접근 제어자 활용 방법

1. 모듈화를 통한 유지보수성 강화

실무에서는 코드의 모듈화가 중요한데, 이러한 경우 접근 제어자를 적절히 설정하면 각 모듈 간의 경계를 명확하게 정의할 수 있습니다. 예를 들어, 라이브러리나 SDK를 개발할 때는 publicopen을 사용하여 외부 개발자들이 사용할 수 있는 API와 그렇지 않은 부분을 구분합니다.

2. 파일 내 논리적 분리

fileprivate는 동일한 파일에서 여러 클래스를 정의하고 클래스 간의 긴밀한 협력이 필요한 경우 사용됩니다. 예를 들어, SwiftUI에서 하나의 View 파일에서 여러 하위 컴포넌트를 구현할 때 이 제어자를 사용하여 코드 간의 의존성을 관리할 수 있습니다.

3. 캡슐화와 정보 은닉

private는 데이터를 캡슐화하여 외부에서 접근하지 못하도록 할 때 매우 유용합니다. 특히, 상태 관리가 중요한 SwiftUI에서 View의 내부 상태를 보호하기 위해 많이 사용됩니다.


4. SwiftUI에서의 접근 제어 실전 사례

SwiftUI 프로젝트에서 접근 제어자를 사용하는 주요 사례를 예시로 보여드리겠습니다. fileprivate는 보통 하나의 Swift 파일 안에서 여러 관련 클래스를 정의할 때 사용되며, View 내부의 상태 관리에서도 중요한 역할을 합니다.

import SwiftUI

struct ContentView: View {
    var body: some View {
        Text("Hello, World!")
        .onAppear {
            let handler = StateHandler()
            handler.changeState()
        }
    }
}

fileprivate class StateHandler {
    fileprivate var state = "Initial State"

    fileprivate func changeState() {
        state = "Updated State"
        print("State changed to: \(state)")
    }
}

위 예시에서 StateHandler 클래스는 fileprivate로 선언되어 있기 때문에 같은 파일 내에서만 접근 가능합니다. 이 접근 제어자는 상태를 안전하게 관리하면서 View와 밀접한 상호작용을 할 수 있도록 돕습니다.

728x90

댓글