타입 메서드(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)도입니다.")
let celsius = TemperatureConverter.fahrenheitToCelsius(fahrenheit: 77)
print("화씨 77도는 섭씨 \(celsius)도입니다.")
타입 메서드의 특징
- 인스턴스를 만들지 않고도 호출할 수 있다
- 타입 이름을 사용하여 호출한다
- 저장 타입 속성에도 접근할 수 있다
- 클래스의 타입 메서드만 상속 및 재정의가 가능하다 (
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))
print(ScientificCalculator.power(base: 2, exponent: 3))
타입 메서드 사용 예시
- 유틸리티 함수 제공 (예: 수학 계산기, 변환기)
- 모든 인스턴스가 공유하는 동작 구현 (예: 로깅 시스템, 통계 계산)
- 타입 관련 설정 또는 정보 제공 (예: 설정값 관리, 버전 정보 제공)
클래스와 구조체의 타입 메서드 비교
클래스(class) | 구조체(struct) |
|---|
static, class 사용 가능 | static만 사용 가능 |
상속 시 재정의 가능(class 사용) | 상속 개념이 없으므로 재정의 불가 |
| 인스턴스 없이 호출 가능 | 인스턴스 없이 호출 가능 |
타입 메서드 선언 시 주의사항
- 클래스에서
static으로 선언하면 하위 클래스에서 재정의할 수 없음
- 클래스에서
class로 선언하면 하위 클래스에서 재정의 가능
- 구조체와 열거형은
static만 사용 가능 (상속 개념이 없으므로)
요약
- 타입 메서드: 인스턴스가 아닌 타입 자체에 속하는 메서드
- 저장 타입 속성 사용 가능: 타입 이름으로 접근하여 사용 가능
- 재정의 가능 여부:
static은 재정의 불가, class는 재정의 가능
- 활용 예: 유틸리티 함수, 타입 정보 제공, 공통 동작 구현 등