[iOS] Extension

황석범·2025년 2월 3일
0

내일배움캠프_iOS_5기

목록 보기
71/76

Extension

Swift의 Extension은 기존 클래스, 구조체, 열거형, 프로토콜에 새로운 기능을 추가하는 기능을 제공, 그래서 기존 소스 코드를 수정하지 않고도 기능을 확장 가능


1. 특징

  • 기존 타입을 변경하지 않고도 기능 확장 가능 (원본 소스 수정 불필요)
  • 클래스, 구조체, 열거형, 프로토콜에 적용 가능
  • 새로운 메서드, 계산 속성, 이니셜라이저, 서브스크립트, 중첩 타입 추가 가능
  • 프로토콜을 채택하여 특정 타입에 적용 가능

2. Extension과 클래스 상속 차이

비교 항목클래스 상속 (Inheritance)익스텐션 (Extension)
새로운 저장 프로퍼티 추가가능불가능
기존 메서드 오버라이딩가능 (override 사용)🚫 불가능
새로운 메서드 추가가능가능
새로운 계산 속성 추가가능가능
새로운 초기화 메서드 추가가능가능 (단, 클래스에서는 제한이 있을 수 있음)
기존 타입을 수정 없이 기능 확장불가능 (수정 필요)가능
구조체(Struct), 열거형(Enum) 지원지원 안됨 (클래스만 가능)가능
프로토콜 채택 가능가능가능

1) 클래스 상속
새로운 저장 프로퍼티(Stored Property) 추가 가능
부모 클래스의 기능을 변경(Override) 가능
인스턴스를 생성할 때 새로운 프로퍼티를 포함한 상태로 초기화 가능

2) Extension(익스텐션)
새로운 저장 프로퍼티 추가 불가능
기존 타입을 확장할 수 있지만, 인스턴스의 메모리 구조를 변경하지 않음
기존 클래스, 구조체, 열거형, 프로토콜의 기능을 확장하는 용도


3. 언제 무엇을 사용하면 좋을지

1) 클래스 상속을 사용할 때
새로운 저장 프로퍼티를 추가해야 할 때
부모 클래스의 메서드를 변경(오버라이딩)해야 할 때
기존 클래스를 확장하고, 특정 동작을 재정의해야 할 때

2) 익스텐션을 사용할 때
기존 타입을 변경하지 않고 기능만 확장하고 싶을 때
구조체(Struct) 또는 열거형(Enum)에 기능을 추가해야 할 때
프로토콜을 채택하여 기존 클래스나 구조체에 새로운 기능을 추가할 때
클래스를 변경할 수 없을 때(UIKit 기본 클래스 등)


Extionsion은 자주 사용하였는데 클래스는 상속받아 커스텀 뷰, 뷰컨, 컴포넌트들만 생성해봤지 내가 생성한 클래스를 다른 클래스에 상속시켜본적은 없는 것 같다.

profile
iOS 공부중...

0개의 댓글

관련 채용 정보