[ Swift ] func 메서드 vs 계산 프로퍼티(var {})

김보람's avatar
Oct 10, 2025
[ Swift ] func 메서드 vs 계산 프로퍼티(var {})

Swift를 보다 보면 아래처럼 “똑같이 점수를 계산하는 코드”가 두 가지 형태로 등장한다.

struct Student {
    var knowledge: Double

    func didFinalTest() -> Int {
        let score = Int(knowledge * 100)
        return score
    }
}
struct Student {
    var knowledge: Double

    var didFinalTest: Int {
        let score = Int(knowledge * 100)
        return score
    }
}

겉보기엔 둘 다 계산해서 Int를 주는데, 둘의 정체는 다르다.


결론부터: “행동 호출” vs “값 조회”

  • func didFinalTest() -> Int
    메서드(Method): “행동(동작)을 호출(call)한다”
    ➜ 사용: student.didFinalTest()

  • var didFinalTest: Int { ... }
    계산 프로퍼티(Computed Property): “값(속성)을 조회(get)한다”
    ➜ 사용: student.didFinalTest

즉, **괄호 ()가 있으면 행동(함수 호출), 없으면 값(프로퍼티 접근)**이라는 느낌으로 잡으면 이해가 빠르다.


가장 헷갈리는 포인트 1: “프로퍼티면 미리 계산된 값인가?”

아니다.

var didFinalTest: Int { ... } 같은 계산 프로퍼티는 저장된 값이 없다.
접근할 때마다 { ... } 블록이 실행되면서 그 순간 계산해서 반환한다.

즉,

  • 메서드도 호출할 때 계산

  • 계산 프로퍼티도 접근할 때 계산

둘 다 “지금 계산”이다.
“미리 계산된 값(저장된 값)”은 아래처럼 저장 프로퍼티(stored property)일 때다:

struct Student {
    var knowledge: Double
    let finalScore: Int  // <- 저장된 값 (이미 들고 있음)
}

가장 헷갈리는 포인트 2: “그럼 둘은 완전히 똑같은 것 인가?”

로직 실행 결과는 같을 수 있어도, 의미(의도)와 쓰임새가 다르다.

1) 의미(읽는 사람이 느끼는 뉘앙스)

  • 메서드: “시험 본다 / 채점한다” 같은 행동

  • 프로퍼티: “이 학생의 점수는” 같은 속성(값)

코드를 읽는 사람 입장에서는

  • student.didFinalTest() → “뭔가를 시킨다”

  • student.didFinalTest → “값을 꺼내본다”

로 받아들인다.

2) 기능적으로도 차이가 난다

메서드는 이런 확장이 자연스럽다:

  • 매개변수 받기

  • throws, async

  • 상태 변경(mutating) 같은 “행동”에 적합

계산 프로퍼티는 보통:

  • 가볍게 계산되는 “파생 값” 표현에 적합

  • 값처럼 쓰는 게 목적 (student.finalScore)


언제 메서드, 언제 계산 프로퍼티?

계산 프로퍼티가 어울릴 때

  • 객체의 상태로부터 즉시 계산되는 파생 값

  • “이건 그 객체의 속성이다”가 자연스러움

  • 예: finalScore, fullName, isAdult, area

메서드가 어울릴 때

  • “무언가를 한다”는 행동이 자연스러움

  • 파라미터가 필요하거나, 예외/비동기 처리 가능성이 있음

  • 상태 변경이 포함될 수 있음

  • 예: takeTest(), submit(), fetchData(), updateProfile()


한 줄 요약

  • func = 행동을 호출한다 (())

  • var {} = 값을 조회한다 (하지만 접근 순간마다 계산됨)

그리고 헷갈리면 이름부터 정리하면 거의 해결된다:
행동이면 동사형 메서드, 값이면 명사형 프로퍼티.

Share article

RN 삽질 일지