Swift 프로토콜 이해와 활용
프로토콜은 객체 지향 프로그래밍의 중요한 개념 중 하나로, 특정 행동이나 기능을 정의하는 규칙을 제공한다. 이번 포스트에서는 프로토콜의 기본 개념, 사용법, 적용 시기, 그리고 예시를 알아보자.
프로토콜이란?
프로토콜은 마치 친구들과 놀이를 할 때 정해진 규칙과 같다. 예를 들어, "우리는 숨바꼭질을 할 때 숨는 방법과 찾는 방법을 정해요!"와 같이, 프로토콜은 어떤 행동이나 기능을 수행할 수 있는 방법을 정해주는 규칙이다.
프로토콜 사용법
프로토콜 정의하기
- 어떤 규칙을 만들지 정하기
- 예를 들어, "이것은 소리를 내는 방법이에요!"라고 정의할 수 있음
프로토콜을 따르는 것
- 만든 규칙을 따라야 하는 클래스나 구조체 정하기
- 이들은 정해진 규칙을 지켜야 함
규칙 구현하기
- 클래스나 구조체가 정해진 규칙에 따라 행동하도록 만들기
언제 프로토콜을 사용해야 할까요?
- 같은 종류의 여러 객체가 있을 때: 여러 종류의 동물들이 "소리 내기"라는 규칙을 따를 수 있음
- 다양한 클래스가 공통된 기능을 가져야 할 때: 서로 다른 클래스가 같은 행동을 할 수 있도록 만들고 싶을 때 유용
예시 코드
동물들이 소리를 내는 규칙을 정의한 프로토콜의 예시
// 프로토콜 정의하기
protocol SoundMaker {
func makeSound() // 소리 내는 기능
}
// 프로토콜을 따르는 클래스들
class Dog: SoundMaker {
func makeSound() {
print("멍멍!") // 개의 소리
}
}
class Cat: SoundMaker {
func makeSound() {
print("야옹!") // 고양이의 소리
}
}
// 프로토콜을 사용하는 부분
let myDog = Dog()
let myCat = Cat()
myDog.makeSound() // 멍멍!
myCat.makeSound() // 야옹!
예시 설명
프로토콜 정의하기
SoundMaker라는 프로토콜을 만들고,makeSound라는 기능 정의- 이는 "소리를 내는 방법"을 나타냄
프로토콜을 따르는 클래스들
Dog와Cat클래스를 만들고, 두 클래스 모두SoundMaker프로토콜을 따르도록 함- 각각 소리 내는 방법 구현
프로토콜을 사용하는 부분
myDog와myCat객체를 생성하여 각각의 소리를 내도록 함
프로토콜 확장
프로토콜 확장은 기존 프로토콜에 새로운 기능을 추가할 수 있는 방법이다. 이를 통해 이미 정의된 프로토콜을 따르는 모든 클래스나 구조체에서 공통적으로 사용할 수 있는 기본 구현을 제공할 수 있다.
예시 코드
동물들이 소리를 내는 규칙을 정의한 프로토콜의 예시와 함께 프로토콜 확장을 추가해 보자.
// 프로토콜 정의하기
protocol SoundMaker {
func makeSound() // 소리 내는 기능
}
// 프로토콜 확장하기
extension SoundMaker {
func describeSound() {
print("이 동물은 소리를 냅니다.")
}
}
// 프로토콜을 따르는 클래스들
class Dog: SoundMaker {
func makeSound() {
print("멍멍!") // 개의 소리
}
}
class Cat: SoundMaker {
func makeSound() {
print("야옹!") // 고양이의 소리
}
}
// 프로토콜을 사용하는 부분
let myDog = Dog()
let myCat = Cat()
myDog.makeSound() // 멍멍!
myDog.describeSound() // 이 동물은 소리를 냅니다.
myCat.makeSound() // 야옹!
myCat.describeSound() // 이 동물은 소리를 냅니다.
예시 설명
프로토콜 정의하기
SoundMaker라는 프로토콜을 만들고,makeSound라는 기능 정의- 이는 "소리를 내는 방법"을 나타냄
프로토콜 확장하기
SoundMaker프로토콜에describeSound라는 기본 구현을 추가- 모든
SoundMaker를 따르는 클래스는 이 기능을 사용할 수 있음
프로토콜을 따르는 클래스들
Dog와Cat클래스를 만들고, 두 클래스 모두SoundMaker프로토콜을 따르도록 함- 각각 소리 내는 방법
구현프로토콜을 사용하는 부분
myDog와myCat객체를 생성하여 각각의 소리를 내고,describeSound를 호출하여 동물의 소리에 대한 설명을 출력함
결론
프로토콜은 객체 간에 공통된 행동을 정의하는 데 매우 유용하다. 프로토콜을 통해 여러 클래스가 같은 기능을 가지면서도 자신만의 특성을 유지할 수 있으며, 이를 통해 코드의 재사용성과 가독성을 높일 수 있다.
'걔 (개발)로그 > Swift' 카테고리의 다른 글
| Swift의 인스턴스와 컴포넌트: 개념과 차이점 (0) | 2024.08.05 |
|---|---|
| Swift의 UserDefaults와 KeychainManager: 데이터 저장소 비교 (0) | 2024.08.05 |
| Swift의 private static 조합 (0) | 2024.08.05 |
| Swift의 override, 재정의, 상속··· 그게 다 뭔 소리람 (0) | 2024.08.05 |
| Swift의 순환 참조(Circular Reference)는 어떻게 해결하지? (0) | 2024.07.02 |