SSAC iOS 앱 개발자 데뷔과정 - 11

Sangwon Shin·2021년 10월 16일
0

SSAC

목록 보기
9/19

🧷 Extension

열거형, 클래스, 구조체 등의 객체를 확장하여 새로운 기능을 추가할 수 있습니다.

기존에 존재하는 기능을 추가하는것은 클래스의 상속을 통해서도 충분히 가능한데 우리는 왜 Extension 을 사용할까요?

  • 상속은 클래스 타입에서만 가능하지만, 익스텐션은 구조체, 클래스, 프로토콜 등에 적용이 가능합니다.
  • 외부에서 가져온 타입에 내가 원하는 기능을 추가할때, 따로 상속받지 않고 익스텐션을 이용해서 기능을 추가할 수 있습니다.

즉, 클래스의 상속과 달리 타입에 상관없이 그리고 타입을 구현한 소스코드를 몰라도 간단하게 타입의 기능을 확장할 수 있습니다!

익스텐션을 이용하면 굉장히 편리하게 우리가 원하는 기능을 추가할 수 있음을 알 수 있습니다.

추가적으로 익스텐션의 성질에 대해 알아보고 간단한 예제를 살펴 보겠습니다.

  • Extension 은 클래스, 구조체 처럼 객체로 존재하는 것이 아니라, 다른 객체를 확장해주는 역할만 담당합니다.
  • Extension 은 타입에 새로운 기능을 추가 할 수는 있지만, 기존에 존재하는 기능을 재정의할 수 없습니다. (상속과 차이점)
  • Extension 에 연산 프로퍼티, 메서드, 이니셜라이저 등을 추가할 수 있습니다. (❗️ 저장 프로퍼티는 추가할 수 없습니다.)

간단한 예제를 살펴 보겠습니다.

import Foundation
import UIKit

extension UIViewController {
    
    //ViewController 에서 바로 사용할 수 있음!!
    func setBackgroundColor() {
        view.backgroundColor = .red
    }
    
    func justforTest() -> (Void) {
        print("Hello This is Extension Test!")
    }
    
    var testForExtension: Int {
        get {
            return 10
        }
    }
    
}

class ViewController: UIViewController {
  override func viewDidLoad() {
          super.viewDidLoad()
          justforTest() // Hello This is Extension Test!
          print(testForExtension)// 10
      }
}

위와 같이 익스텐션을 통해서 UIViewController 클래스에 메서드와 연산 프로퍼티를 추가하면

해당 클래스를 상속받는 다른 클래스에서도 우리가 추가한 기능들을 사용할 수 있는것을 확인 할 수 있습니다.


🚶 Singleton Pattern

생성자가 여러 차례 호출되더라도 실제로 생성되는 객체는 하나이고 최초 생성 이후에 호출된 생성자는 최초의 생성자가 생성한 객체를 리턴한다. 이와 같은 디자인 유형을 싱글턴 패턴이라고 한다. -위키피디아

용도에 따라 객체를 하나만 생성해서 공용으로 사용한다.

간단한 예제를 생각해보겠습니다.

class DeliveryInfo {
    
    static let shared = DeliveryInfo()
    
    var menu: String?
    var additionalMenu: String?
    var address: String?
    
}

만약, View A -> B -> C 순으로 메뉴를 정하고, 추가 메뉴를 설정하고, 주소를 입력하는 앱이 있다고 해보겠습니다.

이때, A, B, C Viewcontroller 에서 각각 DeliveryInfo 의 인스턴스를 생성하게 되면 각 인스턴스에 하나의 정보만 저장되게 됩니다.

하나의 인스턴스를 통해서 저장할 수 있는데 3 개의 인스턴스를 사용하게 되기 때문에 메모리적인 측면에서 손해입니다.

그럼, 하나의 전역적인 인스턴스를 만들어서 A -> B -> C 를 돌면서 각각의 정보를 저장하면 어떨까요?

이런 디자인을 singleton pattern 이라고 합니다.

해당 블로그를 참고했습니다!


🏷 P.S.

UITableView Automatic Dimension 을 적용해보려고 하는데 셀의 높이가 늘어나지 않는다...

레이아웃 설정을 잘못 잡은건지 놓친게 있는지 천천히 확인해봐야 할것 같습니다. ㅠ

profile
개발자가 되고싶어요

0개의 댓글