TIL: 타입 메서드(Type Method)

Royce·2025년 3월 22일

Swift 문법

목록 보기
30/63

타입 메서드(Type Method)

  • 타입 메서드(Type Methods) 는 인스턴스가 아닌 타입 자체에 속한 메서드이다
  • 클래스, 구조체, 열거형에서 선언할 수 있다
  • 인스턴스를 생성하지 않고도 타입 이름을 통해 직접 호출할 수 있다
  • 타입 자체와 관련된 기능이나 공통된 동작을 구현할 때 사용된다

타입 메서드 선언 방법

  • 클래스: static 또는 class 키워드를 사용하여 선언합니다.
    · static: 상속된 클래스에서 재정의가 불가능합니다.
    · class: 상속된 클래스에서 재정의가 가능합니다.
  • 구조체, 열거형: static 키워드를 사용하여 선언합니다. (재정의 불가)

클래스의 타입 메서드

class MathUtility {
    static var pi = 3.1415926535  // 저장 타입 속성
    
    static func square(of number: Double) -> Double {
        return number * number
    }
    
    static func cube(of number: Double) -> Double {
        return number * number * number
    }
    
    static func circleArea(radius: Double) -> Double {
        return pi * square(of: radius)
    }
}

타입 메서드 호출 방법(클래스)

let radius = 5.0
let area = MathUtility.circleArea(radius: radius)
print("반지름이 \(radius)인 원의 넓이: \(area)")  // 출력: 반지름이 5.0인 원의 넓이: 78.5398163375

print(MathUtility.square(of: 3))  // 출력: 9.0
print(MathUtility.cube(of: 2))    // 출력: 8.0

구조체의 타입 메서드

struct TemperatureConverter {
    static func celsiusToFahrenheit(celsius: Double) -> Double {
        return celsius * 9 / 5 + 32
    }
    
    static func fahrenheitToCelsius(fahrenheit: Double) -> Double {
        return (fahrenheit - 32) * 5 / 9
    }
}

타입 메서드 호출 방법(구조체)

let fahrenheit = TemperatureConverter.celsiusToFahrenheit(celsius: 25)
print("섭씨 25도는 화씨 \(fahrenheit)도입니다.")  // 출력: 섭씨 25도는 화씨 77.0도입니다.

let celsius = TemperatureConverter.fahrenheitToCelsius(fahrenheit: 77)
print("화씨 77도는 섭씨 \(celsius)도입니다.")  // 출력: 화씨 77도는 섭씨 25.0도입니다.

타입 메서드의 특징

  1. 인스턴스를 만들지 않고도 호출할 수 있다
  2. 타입 이름을 사용하여 호출한다
  3. 저장 타입 속성에도 접근할 수 있다
  4. 클래스의 타입 메서드만 상속 및 재정의가 가능하다 (class 키워드 사용 시)

클래스 타입 메서드의 상속과 재정의 (Overriding)

class BaseCalculator {
    class func description() -> String {  // 계산 타입 메서드 (재정의 가능)
        return "기본 계산기"
    }
    
    class func add(a: Int, b: Int) -> Int {
        return a + b
    }
}

class ScientificCalculator: BaseCalculator {
    override class func description() -> String {  // 재정의된 타입 메서드
        return "과학 계산기"
    }
    
    class func power(base: Double, exponent: Double) -> Double {
        return pow(base, exponent)
    }
}

타입 메서드 호출 방법(클래스 상속 및 재정의)

print(BaseCalculator.description())          // 출력: 기본 계산기
print(ScientificCalculator.description())    // 출력: 과학 계산기

print(BaseCalculator.add(a: 2, b: 3))        // 출력: 5
print(ScientificCalculator.power(base: 2, exponent: 3))  // 출력: 8.0

타입 메서드 사용 예시

  • 유틸리티 함수 제공 (예: 수학 계산기, 변환기)
  • 모든 인스턴스가 공유하는 동작 구현 (예: 로깅 시스템, 통계 계산)
  • 타입 관련 설정 또는 정보 제공 (예: 설정값 관리, 버전 정보 제공)

클래스와 구조체의 타입 메서드 비교

클래스(class)구조체(struct)
static, class 사용 가능static만 사용 가능
상속 시 재정의 가능(class 사용)상속 개념이 없으므로 재정의 불가
인스턴스 없이 호출 가능인스턴스 없이 호출 가능

타입 메서드 선언 시 주의사항

  1. 클래스에서 static으로 선언하면 하위 클래스에서 재정의할 수 없음
  2. 클래스에서 class로 선언하면 하위 클래스에서 재정의 가능
  3. 구조체와 열거형은 static만 사용 가능 (상속 개념이 없으므로)

요약

  • 타입 메서드: 인스턴스가 아닌 타입 자체에 속하는 메서드
  • 저장 타입 속성 사용 가능: 타입 이름으로 접근하여 사용 가능
  • 재정의 가능 여부: static은 재정의 불가, class는 재정의 가능
  • 활용 예: 유틸리티 함수, 타입 정보 제공, 공통 동작 구현 등
profile
iOS 개발자 지망생

0개의 댓글