Apple/Swift

[Swift] 프로토콜(protocol)

P_Piano 2023. 2. 11. 20:28
728x90
반응형

1. 프로토콜(protocol)

  • 특정 클래스와 관련 없는 프로퍼티, 메서드 선언 집합
  •  함수(메서드) 정의는 없음
  • 기능이나 속성에 대한 설계도
  • 클래스(구조체, 열거형)에서 채택(adopt)하여 메서드를 구현해야 한다.
  • 자바와 C#에서 interface에 해당하는 것이다.
  • C++의 abstract base class
  • Protocol Oriented Programming(POP)
  • 프로토콜 단위로 묶어서 표현하고, extension으로 기본적인 것을 구현(protocol default implementation)을 해서 단일 상속의 한계를 극복하고자 하는 프로그래밍 기법이다.

 

2. 스위프트 상속과 프로토콜 채택

  • 부모 클래스는 하나만 가능하며 여러 개라면 나머지는 프로토콜
  • class 클래스명:부모명, 프로토콜명{ }
  • 부모가 있으면 부모 다음에 표기
  • class 클래스명:부모명, 프로토콜명1, 프로토콜명2{ }
  • class 클래스명: 프로토콜명{ }
  • 부모가 없으면 바로 표기 가능
  • class 클래스명:프로토콜명1, 프로토콜명2{ }
  • 클래스, 구조체, 열거형, extension에 프로토콜을 채택(adopt)할 수 있다.
  • 상속은 클래스만 가능하다.

3. protocol 정의

4. 프로토콜과 프로퍼티/메서드 선언

5. protocol 채택과 준수

  • 5행에서 부모를 썼다면 부모로부터 상속을 받았다고 표현하고 프로토콜을 옆에 쓴다면 프로토콜을 채택(adopt)했다고 표현한다.
  • class Man에 x, run() 정의가 없다면
  • type 'Man' does not conform to protocol 'Runnable'

6. 예제

-다음 기능을 전체 하나의 소스로 작성하시오.

-bb()라는 메소드가 하나 있는 프로토콜(protocol) B를 만드시오.

  -bb() 메서드는 Int형 값을 매개변수로 받아 Int형으로 리턴하는 메서드이다.

-클래스 A는 클래스 C라는 부모를 갖는다.(C로부터 상속 받는다.)

-클래스 A에서 프로토콜 B를 채택하고, 준수하는 소스를 작성하시오.

-bb()메서드는 Int형 값을 매개변수로 받아 2배한 값을 Int형으로 리턴하는 메서드이다.

<예제 소스>

728x90
반응형