logo
|
Blog

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

    김보람's avatar
    김보람
    Oct 10, 2025
    [ Swift ] func 메서드 vs 계산 프로퍼티(var {})
    Contents
    결론부터: “행동 호출” vs “값 조회”가장 헷갈리는 포인트 1: “프로퍼티면 미리 계산된 값인가?”가장 헷갈리는 포인트 2: “그럼 둘은 완전히 똑같은 것 인가?”1) 의미(읽는 사람이 느끼는 뉘앙스)2) 기능적으로도 차이가 난다언제 메서드, 언제 계산 프로퍼티?계산 프로퍼티가 어울릴 때메서드가 어울릴 때한 줄 요약

    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
    Contents
    결론부터: “행동 호출” vs “값 조회”가장 헷갈리는 포인트 1: “프로퍼티면 미리 계산된 값인가?”가장 헷갈리는 포인트 2: “그럼 둘은 완전히 똑같은 것 인가?”1) 의미(읽는 사람이 느끼는 뉘앙스)2) 기능적으로도 차이가 난다언제 메서드, 언제 계산 프로퍼티?계산 프로퍼티가 어울릴 때메서드가 어울릴 때한 줄 요약

    김보람 | 930802qhfka@gmail.com

    RSS·Powered by Inblog