타입 프로퍼티 , 인스턴스 메서드 구별

임혜정·2024년 8월 21일
0
post-custom-banner

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 키워드로도 선언될 수 있고
메서드 이름 뒤에 괄호 () 가 있다.




음..너무 헷갈리는데? 더 쉽게 기억할 순 없을까?

1. 타입 / 인스턴스 의 구분부터 시작한다.

-static 키워드가 있으면 타입 멤버, 없으면 인스턴스

2. func키워드의 유무

-func 키워드가 있으면 메서드, 없으면 프로퍼티

조금 알것같다..그럼 실제 객체만을 보고 구분하는 방법은?

1. 접근방식의 여부

-클래스 이름을 직접 사용하여 접근하면 타입 멤버, 인스턴스를 생성한 후 사용하면 인스턴스 멤버,
-체이닝으로 뒤에 뭔가 따라붙을때 대문자/소문자인지로 직접 클래스로 접근(타입)하는지 인스턴스로 접근하는지 구별할 수 있다 (만약 이름 컨벤션을 안지켰다면?..혼내준다)

예제 문제

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 키워드 없이 선언되어 있습니다.

profile
오늘 배운걸 까먹었을 미래의 나에게..⭐️
post-custom-banner

0개의 댓글