Swift 코드에서 타입 프로퍼티와 인스턴스 메서드를 구별하시오
class Example {
// 타입 프로퍼티
static let typeProperty = "이건 타입 프로퍼티입니다"
}
print(Example.typeProperty)
static 키워드로 선언되며 클래스 이름을 통해 접근한다.
var instanceProperty = "이건 인스턴스 프로퍼티입니다"
별도의 키워드 없이 선언, 일반적으로 var 또는 let으로 시작
class Example {
// 인스턴스 메서드
func instanceMethod() {
print("이건 인스턴스 메서드")
}
}
let instance = Example()
instance.instanceMethod()
static 키워드 없이 선언, 메서드 이름 뒤에 괄호 () 가 있다.
인스턴스를 통해 호출됨 ()
static func typeMethod() {
print("이건 타입 메서드")
}
static 키워드로 선언, 클래스의 경우 class 키워드로도 선언될 수 있고
메서드 이름 뒤에 괄호 () 가 있다.
-static 키워드가 있으면 타입 멤버, 없으면 인스턴스
-func 키워드가 있으면 메서드, 없으면 프로퍼티
-클래스 이름을 직접 사용하여 접근하면 타입 멤버, 인스턴스를 생성한 후 사용하면 인스턴스 멤버,
-체이닝으로 뒤에 뭔가 따라붙을때 대문자/소문자인지로 직접 클래스로 접근(타입)하는지 인스턴스로 접근하는지 구별할 수 있다 (만약 이름 컨벤션을 안지켰다면?..혼내준다)
class Car {
static let wheelCount = 4
var color: String
static func describeCarType() {
print("This is a car")
}
func startEngine() {
print("Engine started")
}
}
struct Math {
static let pi = 3.14159
var currentCalculation: Double
static func square(_ num: Int) -> Int {
return num * num
}
mutating func add(_ num: Double) {
currentCalculation += num
}
}
enum Direction {
case north, south, east, west
static var random: Direction {
let directions: [Direction] = [.north, .south, .east, .west]
return directions.randomElement()!
}
func description() -> String {
switch self {
case .north: return "North"
case .south: return "South"
case .east: return "East"
case .west: return "West"
}
}
}
// Usage
let myCar = Car(color: "Red")
print(Car.wheelCount)
myCar.startEngine()
Car.describeCarType()
var calc = Math(currentCalculation: 0)
print(Math.pi)
calc.add(5)
print(Math.square(4))
let randomDirection = Direction.random
print(randomDirection.description())
아래가 무엇인지 구분해보기
Car.wheelCount : 답
myCar.startEngine() : 답
Car.describeCarType() : 답
Math.pi : 답
calc.add(5) : 답
Math.square(4) : 답
Direction.random : 답
randomDirection.description() : 답
.
.
.
.
.
.
.
.
.
답안
Car.wheelCount : 타입 프로퍼티
설명: Car 클래스 이름을 통해 직접 접근하고 있으며, 코드에서 static let으로 선언되어 있습니다.
myCar.startEngine() : 인스턴스 메서드
설명: myCar 인스턴스를 통해 호출되고 있으며, 코드에서 static 키워드 없이 선언되어 있습니다.
Car.describeCarType() : 타입 메서드
설명: Car 클래스 이름을 통해 직접 호출되고 있으며, 코드에서 static func로 선언되어 있습니다.
Math.pi : 타입 프로퍼티
설명: Math 구조체 이름을 통해 직접 접근하고 있으며, 코드에서 static let으로 선언되어 있습니다.
calc.add(5) : 인스턴스 메서드
설명: calc 인스턴스를 통해 호출되고 있으며, 코드에서 static 키워드 없이 선언되어 있습니다.
Math.square(4) : 타입 메서드
설명: Math 구조체 이름을 통해 직접 호출되고 있으며, 코드에서 static func로 선언되어 있습니다.
Direction.random : 타입 프로퍼티
설명: Direction 열거형 이름을 통해 직접 접근하고 있으며, 코드에서 static var로 선언되어 있습니다.
randomDirection.description() : 인스턴스 메서드
설명: randomDirection 인스턴스를 통해 호출되고 있으며, 코드에서 static 키워드 없이 선언되어 있습니다.