Swift 추상화와 프로토콜(인터페이스)
Swift 추상화와 프로토콜(인터페이스)
1. 추상화란?
추상화(Abstraction)는 복잡한 시스템에서 핵심 개념만 노출하고, 내부 구현은 숨기는 객체지향 설계 원칙이다.
- 무엇을 할 수 있는지 정의
- 어떻게 하는지는 숨김
Swift에서는 Protocol이 Java의 인터페이스 역할을 하며, 추상화를 실현하는 핵심 도구다.
2. Swift에서의 인터페이스 = Protocol
Swift에는 Java처럼 interface
키워드가 없다. 대신 **protocol
**이 동일한 개념을 제공한다.
예시: 기능만 정의
1
2
3
protocol Drivable {
func drive()
}
이 프로토콜을 채택하면 drive()
메서드를 반드시 구현해야 한다.
1
2
3
4
5
class Car: Drivable {
func drive() {
print("차가 달립니다.")
}
}
3. 프로토콜의 특징
항목 | 내용 |
---|---|
다중 채택 | 여러 개의 프로토콜을 동시에 채택 가능 |
구현 강제 | 프로토콜의 요구사항은 필수로 구현해야 함 |
타입 추상화 | 프로토콜을 타입으로 사용 가능 (some , any ) |
확장 | extension 으로 기본 구현 제공 가능 (Java 8 default 메서드와 유사) |
4. 프로토콜을 활용한 추상화 예시
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
protocol Payable {
func pay(amount: Int)
}
class KakaoPay: Payable {
func pay(amount: Int) {
print("카카오페이로 \(amount)원 결제")
}
}
class ApplePay: Payable {
func pay(amount: Int) {
print("애플페이로 \(amount)원 결제")
}
}
func processPayment(method: Payable) {
method.pay(amount: 10000)
}
→ Payable
프로토콜을 통해 KakaoPay
, ApplePay
객체를 추상화하여 공통된 인터페이스로 처리할 수 있다.
5. 프로토콜 타입과 추상화
func process(method: Payable)
→ 추상화된 타입- 다양한 실제 객체를 하나의 형태로 처리 가능
- 런타임에 실제 객체가 어떤 클래스인지 몰라도 문제없이 동작
6. 프로토콜 + Extension = 유연한 기본 구현
1
2
3
4
5
6
7
8
9
protocol Loggable {
func log()
}
extension Loggable {
func log() {
print("기본 로그 처리")
}
}
→ 기본 구현을 제공해 선택적 구현이 가능하다. Java의 default 메서드 개념과 유사.
7. 프로토콜과 클래스/구조체/열거형
Swift의 거의 모든 타입은 프로토콜을 채택할 수 있다.
- 클래스, 구조체, 열거형 모두 사용 가능
- 상속 대신 프로토콜 중심 설계가 권장됨
8. 결론
- Swift에서 추상화는 프로토콜을 통해 구현된다.
- 클래스 상속보다 프로토콜 중심 설계가 더 유연하고 강력하다.
- 다형성, 테스트 용이성, 결합도 낮추기에 유리하다.
This post is licensed under CC BY 4.0 by the author.