[iOS][Swift] 프로토콜 vs 인터페이스 차이점

Youngkyu·2021년 8월 26일
3
post-thumbnail

Swift를 공부하다보니 protocol 이란 개념이 많이 등장해서 protocol 이 정확히 뭘까하고 자료들을 찾다가, Swift는 프로토콜 지향 언어(Protocol-Oriented-Language) 라는 것을 알게 되었다. 그런데 읽다보니 Java에서의 interface 와 비슷한 것 같았고, 무엇이 다른지 알아보았다.

protocol(프로토콜)은

특정 역할을 수행하기 위한 메서드, 프로퍼티, 기타 요구사항 등의 청사진을 정의합니다. 구조체, 클래스, 열거형은 프로토콜을 채택(Adopted) 해서 특정 기능을 수행하기 위한 프로토콜의 요구사항을 실제로 구현할 수 있습니다. 어떤 프로토콜의 요구사항을 모두 따르는 타입은 그 프로토콜을 준수한다(Conform) 고 표현합니다. 타입에서 프로토콜의 요구사항을 충족시키려면 프로토콜이 제시하는 청사진의 기능을 모두 구현해야 합니다. 즉, 프로토콜은 기능을 정의하고 제시 할 뿐이지 스스로 기능을 구현하지는 않습니다.

한줄 요약) 프로토콜이란?
특정 역할을 수행하기 위한 메서드, 프로퍼티, 기타 요구사항 등의 청사진 입니다.

프로토콜과 인터페이스 차이

기본값 설정 가능 여부

  • 인터페이스는 기본 값 설정 가능

public interface Person { 
  int age = 20; // 기본값 설정 가능
  void talk(String s);
  boolean isWalking(boolean status);
}
  • 프로토콜은 기본 값 설정 불가능

protocol Person { 
  var age: Int = 20 // 오류! 프로토콜은 기본 값 설정 불가능
  func talk(s: String)
  func isWalking(status: Boolean) -> Boolean
}

interface - 프로퍼티의 기본값 설정 O
protocol - 프로퍼티의 기본값 설정 X

프로토콜은 기능을 정의하고 제시 할 뿐이지 스스로 기능을 구현하지 않습니다.

요구사항 구현 정도

  • 인터페이스는 모두 구현해야함

public interface Person { 
  int age = 20;
  void talk(String s);
  boolean isWalking(boolean status);
}

class youngPerson implements Person {
  private int age = 14;
  
  @Override
  void talk(String s) {
  	system.out.println(s);
  }
  
  @Override
  boolean isWalking(boolean status) {
  	return status;
  }
}
  • 프로토콜은 optional로 선택 구현 가능

protocol Person { 
  var age: Int
  func talk(s: String)
  // optional 키워드를 통해 구현 할 수도 있고 안 할 수도 있음을 명시
  optional func isWalking(status: Boolean) -> Boolean
}

class youngPerson: Person {
  var age: Int = 14
  
  func talk(s: String) {
  	print(s)
  }
}

interface - 인터페이스의 모든 메소드를 구현해야 함
protocol - optional 키워드로 선택적으로 메소드 구현할 수 있음

프로토콜은 채택(Adopted) 하여 구현할 수 있습니다.

정리

프로토콜은 정의만 할 뿐 초기(기본) 값 설정이 불가능하며, optional 키워드를 통해 선택적으로 구현이 가능합니다.
인터페이스는 초기(기본) 값 설정이 가능하며, 선택적으로 구현이 불가능합니다.

profile
iOS를 공부하고 있는 대학생입니다.

0개의 댓글