본문 바로가기

 𝗔𝗣𝗣𝗟𝗘/SWIFT : GRAMMAR

Swift 기초 문법 - 타입 메서드(Type Method) in 스태틱(Static)

 

 

 

 

스태틱(Static)

 

 

 

 

 

 

 

 

💡 스태틱(Static)

 

 클래스, 구조체, 또는 열거형에서 사용되며, 해당 유형과 관련된 프로퍼티나 메서드를 정의하는데 사용된다.

    → 인스턴스(instance)와는 독립적으로 작동하며, 하위 클래스에서 재정의할 수 없다.

 

static 키워드는 유형 자체에 속하며 인스턴스가 아닌 유형과 연결된다는 것을 나타낸다.

     키워드를 사용하여 정의된 프로퍼티 및 메서드는 해당 유형의 모든 인스턴스에서 동일한 값 또는 동작을 가진다.

     Ex. 클래스의 정적 프로퍼티는 모든 인스턴스 간에 공유됨

        ⸰ 따라서 정적 멤버는 인스턴스 간에 공유되어야 하는 값이나 동작에 유용함

 

 

 

그러니까 인스턴스를 생성하지 않고 형식(Type) 이름으로 직접 접근하여 호출이 가능하고, 메서드 선언 시 func 앞에 static, class가 붙으면 그 메서드는 타입 메서드(Type Method)이다.

 

 

 


 

 

 

❮ 타입 메서드(Type Method) | class 키워드와 static 키워드의 차이점 ❯

 

Code_01

class Fruit {
    // static
    static func eat() {
        print("Eat the fruit")
    }

    // class
    class func wash() {
        print("Wash the fruit")
    }
}

 

 

 class 키워드 
class 키워드는 하위 클래스(subclass)에서 멤버를 override(재정의)할 수 있는 가능성을 제공한다.
     이는 상속(inheritance) 관계에서 사용된다.
클래스 자체에 속하는 정적(static) 멤버를 정의할 때 사용되며, 이는 인스턴스(instance)가 아니라 클래스 자체에 속하는 멤버이다.
클래스의 저장 프로퍼티(stored property)도 class 키워드로 정의할 수 있으며, 이는 값을 저장하고 인스턴스의 상태를 나타낸다.

 

 

 static 키워드 
static 키워드는 하위 클래스(subclass)에서 멤버를 Override(재정의)할 수 없다.
클래스, 구조체, 열거형 등에서 사용될 수 있다.
인스턴스에 속하지 않고 해당 유형 자체에 속하는 멤버를 정의할 때 사용된다.
저장 프로퍼티(stored property)와 연산 프로퍼티(computed property) 모두에 사용할 수 있다.

 

 

 class 키워드와 static 키워드의 Override(재정의) 

class 키워드로 선언된 멤버는 재정의(override)가 가능하며, 하위 클래스에서 동일한 이름의 멤버를 재정의할 수 있다. 반면에 static 키워드로 선언된 멤버는 재정의가 불가능하며, 하위 클래스에서 동일한 이름의 멤버를 다시 구현할 수 없다.

 

 

 

 

 

 

 표 : class 키워드와 static 키워드의 차이점 

 

기능 class 키워드 static 키워드
재정의 가능 여부 하위 클래스에서 가능 불가능
사용 가능한 타입 클래스(class)에만 사용 클래스, 구조체, 열거형 등
속성의 유형 computed property만 가능 stored property 및 computed property 가능
사용 예시 class var property <br> class func method() static var property <br> static func method()

 

 

 


 

 

 

❮ 타입 메서드(Type Method) | 호출 방법 ❯

 

이 타입들은 인스턴스와 상관이 없으며, eat(Code_01)라는 Type에만 연관이 있다.

 

 

따라서 호출 방식은,

Code_02

Fruit.sayHello()
Fruit.sayBye()

 

위와 같은 방식(Code_02)으로 인스턴스 생성 없이 오로지 eat가 속해있는 Type이름만으로 메서드를 호출할 수 있다.

 

 


 

 

❮ 타입 메서드(Type Method) | 인스턴스 프로퍼티 사용 ❯

 

 

위 이미지에서 name(저장 프로퍼티)은 인스턴스 멤버이기 때문에 정적(static) 메서드 내에서 사용할 수 없다. 정적(static) 메서드는 클래스 자체에 속하는 것이며, 인스턴스의 프로퍼티에 접근할 수 없다. 반면에 alias는 저장 타입 프로퍼티로서 클래스 자체에 속하므로 정적(static) 메서드 내에서 사용할 수 있다.

Code_03

class Fruit {
    static let name = "Apple"
    static let alias = "Sweet Apple"

    static func sayHello() {
        print(name)
        print(alias)
    }
}

 

따라서 name을 static으로 변경하면 정적(static) 메서드 내에서 사용할 수 있다.

 

 

또는,

 

class Fruit {
    let name = "Apple"
    static let alias = "Sweet Apple"

    func sayHello() {
        print(name)
        print(Fruit.alias)
    }
}

 

 

name(저장 프로퍼티)는 인스턴스 멤버이므로 인스턴스 메서드 내에서 직접적으로 접근할 수 있으나, alias는 정적(static) 프로퍼티이므로 클래스 자체에 속하며 인스턴스 메서드 내에서는 클래스 이름을 통해 접근해야한다. 따라서 위와 같이 Fruit.alias와 같이 사용할 수 있다.

 

 

 

 

 

 

Recent Posts
Visits
Today
Yesterday
Archives
Calendar
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31