Extension은 무엇인가?

Zeto·2022년 4월 11일
0

Swift_Study

목록 보기
13/18
post-custom-banner

Swift에 익숙해지다보면 자주 접하는 문법들이 많은데 그중에 오늘 얘기할 Extension이라는 문법이 있다. 이름 그대로 확장을 해주는 문법으로서, 오늘은 이에 대해 조금 더 알아보는 시간을 가지고자 한다.

타입을 확장해주는 Extension

Extension은 클래스나 구조체, 열거형 타입 등에 새로운 프로퍼티, 메서드, 이니셜라이저를 기존 코드 구역이 아닌 다른 구역에서 작성해줄 수 있게 만들어준다.

class Person{ //code }
extension Person{ //extra code }

위와 같이 extension이라는 키워드를 활용하여 확장할 수 있으며, 해당 영역에 코드를 입력하여도 기존 영역에 코드를 작성한 것과 똑같이 사용이 가능하다.

물론 프로퍼티의 경우에는 연산 프로퍼티만, 이니셜라이저의 경우에는 클래스는 편의 이니셜라이저, 구조체는 기본 이니셜라이저를 보존한 채 새로운 이니셜라이저를 추가할 수 있는 등의 제약요소도 존재한다.

프로토콜의 Extension

위에서 얘기한 타입들 외에 프로토콜 또한 Extension을 사용할 수 있다. 다만 프로토콜에서 사용할 경우에는 위의 예시들과는 다소 다른 형태로 활용된다.

protocol Drivable{
	func move() { }
}

extension Drivable{
	func move(){
    	print("움직인다")
    }
}

struct Car: Drivable{ }

let car = Car()
car.move()

분명 프로토콜은 구조만 잡고 구현 부분은 무시하는 형태로 작성되는데 Extension에서는 해당 함수의 구현 부분까지 작성되어 있다. 즉, 프로토콜에서는 익스텐션을 사용하면 구현부까지 작성할 수 있으며, 이렇게 작성된 프로토콜을 채택한 타입은 아무런 추가 구현없이 해당 메서드를 호출할 수 있게 된다.

Extension을 왜 사용할까?

일단 Extension을 사용하는 가장 큰 이유로서는 외부 라이브러리나 프레임워크를 가져와서 사용할 경우에는 원본 소스를 수정할 수 없어 원하는 기능을 추가하기 어렵다. 그럴 때, Extension을 활용하면 손쉽게 원하는 기능을 추가할 수 있다.

뿐만 아니라 각각의 기능 별로 코드를 나눠서 정리하거나 한 곳에 여러 프로토콜을 나열하지 않도록 정렬해주는 역할도 해줄 수 있다.

profile
중2병도 iOS가 하고싶어
post-custom-banner

0개의 댓글