ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 210211 TIL: static
    TIL 2021. 2. 11. 23:52

    static

    본문: [Swift] static과 class method, property 효과적으로 사용하기

    프로퍼티나 메소드 앞에 static 키워드를 붙여 인스턴스가 아닌 선언된 타입과 해당 프로퍼티나 메소드를 연결할 수 있다.

    언제 사용할까

    static 프로퍼티의 가장 일반적인 사용은 환경 설정이다. static한 String으로 정의해 두면 네임스페이스(개체를 구분할 수 있는 범위)를 제공할 수 있다.

    enum AppStyles { 
        enum Colors { 
            static let mainColor = UIColor(red: 1, green: 0.2, blue: 0.2, alpha:1) 
        } 
    }

    다음과 같이 앱 전체에 쓰이는 컬러를 위와 같이 정의해 두면 설명적 이름으로 가독성이 좋다.

    Notification 이름을 설정하거나, 전역 설정과 같은 경우에 static property가 사용된다.

    enum을 이용하면 initializer를 통해 인스턴스로 만들지 못한다. 따라서 설정 Object를 인스턴스로 만들고 싶지 않기 때문에 enum을 사용한 것

    또 다른 사용은 특정 object를 생성하는데에 드는 비용을 줄여 캐시로 사용하기 위한 것이다.

    struct BlogPost { 
        private static var dateFormatter = ISO8601DateFormatter() 
    }

    위 코드에서 BlogPost 객체를 아무리 많이 만들어도 dateFormatter는 하나의 객체이다.

    이렇게 생성 비용이 많고, 아무런 영향없이 재사용되는 객체는 static property로 지정해 놓는 것이 좋다.

    class method와 차이

    class method는 하위 클래스가 class method를 override 할 수 있다. static method는 불가. 또한 클래스에서 static method와 class method는 동일한 개념이기 때문에 class method를 class method 뿐만 아니라 static method로도 override가 가능하다.

    class SuperClass { 
        class func date(from string: String) -> Date { 
            return ISO8601DateFormatter().date(from: string)! 
        } 
    } 
    
    class SubClass: SuperClass { 
        override class func date(from string: String) -> Date { 
            return DateFormatter().date(from: string)! 
        } // or 
        override static func date(from string: String) -> Date { 
            return DateFormatter().date(from: string)! 
        } 
    }

    shared instance

    URLSession.shared, UserDefaults.standard와 같은 경우는 공유 인스턴스로 사전에 만들어진 공유 인스턴스를 이용하여 유용하게 사용할 수 있도록 하지만, 필요한 경우에는 자체 상태를 갖는 고유한 인스턴스를 생성할 수 있도록 한다. 그냥 권고사항일 뿐.

    댓글

Designed by Tistory.