Dev.YoungKyu
YoungKyu's Devlog
전체 방문자
오늘
어제
  • 분류 전체보기 N
    • 부스트캠프
    • iOS N
    • visionOS
    • Backend
    • 알고리즘
    • CS
    • Git
    • Python
    • 끄적끄적

블로그 메뉴

  • 홈
  • 🌝 티스토리 홈
  • ⭐️ 깃허브
  • 태그

공지사항

인기 글

최근 댓글

최근 글

태그

  • image
  • AVAudioSession
  • constraint
  • 오블완
  • Optional
  • ImageResource
  • Concurrency
  • 모듈화
  • 부스트캠프
  • ios
  • 소프트웨어공학
  • jekyll
  • if let
  • Python
  • 소프트웨어 공학
  • Swift5.7
  • authenticationinterceptor
  • guard
  • boj
  • Git
  • alamofire
  • swift
  • 소프트웨어 테스트
  • 알고리즘
  • CS
  • 티스토리챌린지
  • SwiftUI
  • MVC
  • AutoLayout
  • 백준

티스토리

hELLO · Designed By 정상우.
Dev.YoungKyu
[iOS][Swift] 프로토콜 vs 인터페이스 차이점
iOS

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

2022. 9. 11. 15:18

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

 

protocol(프로토콜)은

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

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

 

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

기본값 설정 가능 여부

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

// Java

public interface Person { 
    int age = 20; // 기본값 설정 가능 
    void talk(String s); 
    boolean isWalking(boolean status); 
}

프로토콜은 기본 값 설정 불가능

// Swift

protocol Person { 
    var age: Int = 20 // 오류! 프로토콜은 기본 값 설정 불가능 
    func talk(s: String) 
    func isWalking(status: Boolean) -> Boolean 
}
프로토콜은 기능을 정의하고 제시 할 뿐이지 스스로 기능을 구현하지 않습니다. 

요구사항 구현 정도

// Java - Interface
// 인터페이스는 모두 구현해야함

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로 선택 구현 가능
// swift - protocol

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 키워드를 통해 선택적으로 구현이 가능합니다.
인터페이스는 초기(기본) 값 설정이 가능하며, 선택적으로 구현이 불가능합니다.

'iOS' 카테고리의 다른 글

[SwiftUI]커스텀 백버튼 백 제스처 시 화면 멈춤 이슈 해결  (0) 2022.09.11
[iOS]카카오 로그인 구현 시 키 값 숨기기  (0) 2022.09.11
[iOS][Swift] guard 문  (0) 2022.09.11
[iOS][Swift] 코딩 컨벤션  (0) 2022.09.11
[iOS][Swift] Class 와 Struct  (1) 2022.09.11
    'iOS' 카테고리의 다른 글
    • [SwiftUI]커스텀 백버튼 백 제스처 시 화면 멈춤 이슈 해결
    • [iOS]카카오 로그인 구현 시 키 값 숨기기
    • [iOS][Swift] guard 문
    • [iOS][Swift] 코딩 컨벤션
    Dev.YoungKyu
    Dev.YoungKyu
    iOS를 공부하고 있습니다

    티스토리툴바