Java나 숱한 객체지향 언어들을 공부할 때, 자주 접하는 단어인 OOP(Object Oriented Programming)와는 다르게 Swift 언어에서는 ProtocolPOP(Protocol Oriented Programming)이라는 개념이 나온다.

POP, 즉 프로토콜 지향 프로그래밍은 이름 그대로, 객체나 인터페이스 대신 프로토콜을 중심으로 설계하는 프로그래밍을 뜻한다.


인터페이스 (vs 추상 클래스)

1. 인터페이스는 구현부를 가질 수 없음.

인터페이스의 메소드들은 무조건 추상메서드며 구현부를 가질 수 없으며, 추상클래스는 기본 동작을 구현한 instance 메소드를 가질 수 있다.

2. Interface는 다중 상속이 가능.

인터페이스와는 달리 추상클래스는 다중 상속이 불가능하다.
참고) Diamond Problem

프로토콜 (vs 인터페이스)

1. 프로토콜은 옵셔널 키워드를 통해 선택적으로 메서드를 설계할 수 있다.

일반적으로 특정 인터페이스를 상속한 클래스는, 인터페이스에 포함된 모든 메서드를 의무적으로 구현해야한다. 하지만 프로토콜의 경우 Optional 키워드를 사용하면, 선택적으로 구현하는 메서드를 만들 수 있다.

간단한 예를들어 많이 사용하는 UITableViewDelegate만 해도 상속하고 사용하지 않는 내부메서드가 대부분이다.

2. 프로토콜 Static(정적) 멤버를 선언 가능

3. 프로토콜은 프로퍼티에 초기 값을 지정할 수 있음.