ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Swift 상속
    Programming/Swift(iOS) 2021. 4. 3. 00:00
    728x90

    일반적인 상속은 다른 곳에서 많이 다루니, 여기서는 상속에서 좀 특이한것들 다뤄볼까 합니다.

     

    static 메서드, 프로퍼티는 상속 가능할까?

    class Car {
        static func foo() {
            print("Car foo")
        }
    }
    
    class Truck:Car {
        override static func foo() {
            print("Truck foo")
        }
    }

    위와 같이 쓰게 되면 "Cannot override static method" 를 발생 시킵니다. 

    static method는 상속이 불가능하다는 메세지입니다.

     

    이 문제를 해결하기 위해서는 "class" keyword를 사용하면 됩니다. 

    class Car {
        class func foo() {
            print("Car foo")
        }
    }
    
    class Truck:Car {
        override class func foo() {
            print("Truck foo")
        }
    }
    
    let truck = Truck()
    Car.foo()
    Truck.foo()
    

     

    self vs Self

     

    위 두개의 차이점은 뭘까요?

     

    self : class의 인스턴스의 self

    Self : class의 Self, 자기 자신에 대한 동적 클래스 

           -> 타입에 대한 정보를 실행시간에 동적으로 접근 가능하다. 

     

    각 Class의 name을 return해주는 프로퍼티가 있다고 해봅시다. 

    Car에서 class 프로퍼티이며, Truck에서도 이 class 프로퍼티를 상속 구현해줘야합니다.

    class Car {
        class var name:String {
            return "Car"
        }
    }
    
    class Truck:Car {
        override class var name:String {
            return "Truck"
        }
    }
    
    print(Car.name)
    print(Truck.name)

    번거롭습니다. 매번 클래스 생성시에 구현을 해줘야합니다. 

    상속하기때문에 부모 클래스에만 name을 두고, 생성되는 객체의 타입에 따라서 출력하고 싶으면 어떻게 해야될까요?

     

    이때 사용되는 것이 "Self"입니다. 

     

    class Car {
        class var name:String {
            return "\(Self.self)"
        }
    }
    
    class Truck:Car {
    }
    
    print(Car.name) //Car
    print(Truck.name) //Truck
    

     

    'Programming > Swift(iOS)' 카테고리의 다른 글

    Swift 오류 처리 - 2  (0) 2021.04.06
    Swift 오류 처리 - 1  (0) 2021.04.06
    Swift 초기화 메서드  (0) 2021.04.02
    Swift Optional - 2  (0) 2021.04.02
    Swift Optional - 1  (0) 2021.04.02
Designed by Tistory.