[Swift] 계산프로퍼티, 메서드 차이

팔랑이·2024년 6월 27일

iOS/Swift

목록 보기
40/83
post-thumbnail

계산 프로퍼티 (Computed Property)

계산 프로퍼티는 값이 저장되지 않고, 값이 요청될 때마다 계산된다. Swift에서 var 키워드를 사용해 정의할 수 있다.

특징

  1. 속성처럼 호출:

    • 계산 프로퍼티는 someView.parentViewController처럼 속성 접근 구문으로 호출됨
    • 이는 객체의 속성처럼 보이게 만들어 코드가 간결하고 읽기 쉽게 해줌
  2. 읽기 전용 및 읽기/쓰기 가능:

    • 계산 프로퍼티는 읽기 전용(getter)으로 만들 수 있고, 필요하면 읽기/쓰기(getter와 setter) 모두 가능하게 할 수 있다
  3. 상태 저장 없음:

    • 값을 저장하지 않기 때문에 매번 호출될 때마다 계산
    • 따라서 내부 상태를 변경하지 않고 항상 동일한 동작을 수행한다.

예제

extension UIView {
    var parentViewController: UIViewController? {
        var parentResponder: UIResponder? = self
        while let responder = parentResponder {
            parentResponder = responder.next
            if let viewController = parentResponder as? UIViewController {
                return viewController
            }
        }
        return nil
    }
}

메서드 (Method)

메서드는 객체의 행위를 정의하는 함수로,func 키워드를 사용해 정의한다.

특징

  1. 함수 호출 구문:

    • 메서드는 someView.getParentViewController() 과 같이 함수 호출 구문으로 호출된다.
    • 이는 메서드가 명시적으로 동작을 수행하는 것을 나타내며, 인자를 받을 수 있어 다양한 동작을 정의할 수 있다.
  2. 인자와 반환값:

    • 메서드는 인자를 받을 수 있고, 다양한 동작을 수행할 수 있다.
    • 이를 통해 계산 프로퍼티보다 더 복잡한 논리를 구현할 수 있다.
  3. 동작 정의:

    • 메서드는 특정 작업을 수행하거나, 객체의 상태를 변경하는 동작을 정의할 때 사용된다.
    • 메서드는 객체의 행위를 나타내기 때문에 더 명확하고 명시적

예제

extension UIView {
    func getParentViewController() -> UIViewController? {
        var parentResponder: UIResponder? = self
        while let responder = parentResponder {
            parentResponder = responder.next
            if let viewController = parentResponder as? UIViewController {
                return viewController
            }
        }
        return nil
    }
}

비교 요약

계산 프로퍼티와 메서드의 비교

계산 프로퍼티메서드
호출 방식let viewController = someView.parentViewControllerlet viewController = someView.getParentViewController()
설명속성 접근 구문으로 호출함수 호출 구문으로 호출
사용 목적속성처럼 보이게 하기 위해 사용동작을 명시적으로 표현하기 위해 사용
사용 의도객체의 속성처럼 보이지만, 실제로는 호출될 때마다 값을 계산특정 작업을 수행하거나, 여러 인자를 받아 처리할 때 사용
장점간결하고 속성 접근처럼 사용하기 위해 사용명시적으로 동작을 정의할 때 적합
주 용도주로 읽기 전용 속성을 계산하는 데 사용인자를 받아 다양한 동작을 정의 가능
profile
정체되지 않는 성장

0개의 댓글