이번에 처음으로 블로그를 만들어서 글을 작성하게 되었네요 ㅎ
swift언어 공부를 시작한 지는 꽤 지났는데 시간이 지날수록 까먹더라고요
사람에 머리에 한계가 있어서 그런지...
그래서 이번에 제가 블로그를 만들어서 제가 공부한 내용을 올리려고 해요
그러면 나중에 까먹어도 글들을 보면서 기억을 되살리기 쉬울 것 같아서요
아직 프로그래밍 입문 자라서 정확하지 않을 수 도 있는데 틀린 부분이 있다면 가르쳐 주셨으면 하고
저도 더 열심히 공부를 해야겠네요 :)
처음 작성하는 글이라 서론이 많이 길었죠??
이제 바로 본문으로 들어가 보도록 할게요!
그리고!! 제가 코드 짜다가 모르는 부분이 생기면 공부하고 하는 거라서
프로그래밍 책의 목차처럼 순서대로 올라오지는 않는 것을 감안해 주셨으면 해요
이제 진짜 진짜 들어가 보도록 할게요!!!
이번에 제가 공부하고 있는 내용은 swift에서 중요하다고 할 수 있는 Protocols이에요
위키백과에서 swift를 검색해서 언어의 패러다임 부분을 보면
swift라는 언어가 어떤 패러다임으로 설계?? 되었는지 알 수 있는데
객체지향 프로그래밍, 함수형 프로그래밍.. 등 여러 가지가 있는데 그중에 프로토콜 지향 프로그래밍이라는 걸 찾으실 수 있을 거예요
지향 : 어떤 목표로 뜻이 쏠리어 향함이라고 하는데
그러면 프로토콜 지향 프로그래밍이라는 것은 프로토콜을 클래스만큼 주로 사용한다는 뜻이 될 수도 있겠네요
(제가 해석한 거여서 정확하지 않을 수 도 있습니다..)
제가 하고 싶은 얘기는 프로토콜이 swift를 이루는 주축이라고 봐도 무방하다는 거죠 ㅎ
swift의 많은 타입들은 클래스도 많지만 대부분 구조체로 이루어져 있는데
그 구조체를 클래스만큼이나 주로 사용하게 만든 이유도 프로토콜에 있다고 보시면 됩니다
여기에 나오는 기본 예제들은 애플 공식 문서에 있는 것을 가져다가 썼습니다
오늘은 프로토콜의 기본 개념에 대해서 알아보도록 할게요
먼저 프로토콜이란 프로퍼티나 메서드 다른 특정 수행이나 기능에 맞는 요구사항의 청사진을 정의해 주는 것이라고 해요
프로토콜은 클래스나 구조체 열거형에 채택될 수 있는데
채택한 클래스나 구조체 열거형에서는 프로토콜에서 정의한 요구사항을 만족시켜 줘야 해요
프로토콜에서 정의한 요구사항을 만족하는 타입을 보고 그 프로토콜을 준수한다고 하네요
추가적으로
프로토콜에서는 요구사항을 정의하는 것 이외에도
extention을 통해서 프로토콜의 요구사항의 일부를 구현하거나
형식을 준수하는 기능이 이용될 수 있는??(이 부분은 저도 정확히 잘 모르겠네요..) 추가적인 기능을 구현할 수 있다고 해요
예제를 보면서 조금 더 알아보도록 할까요?
프로토콜의 선언하는 방식은 다른 클래스나 구조체 열거형 선언하는 방식과 비슷하게 아래의 코드처럼 선언하면 돼요
protocol SomeProtocol {
//protocol definition goes here
}
아래에 나와있는 코드 같은 경우에는 열거형, 구조체 그리고 클래스에서 프로토콜을 채택하는 방식인데요
enum SomeEnumeration : FirstProtocol {
//enumeration definition goes here
}
struct SomeStructure : FirstProtocol, AnotherProtocol {
//structure definition goes here
}
class SomeClass : SuperClass, FirstProtocol, AnotherProtocol {
//class definition goes here
}
보시면서 아셨겠지만 구조체 같은 경우는 상속이 불가능하기 때문에 ' : ' 옆에 올 수 있는 것이 프로토콜 밖에 없는 반면에
클래스 같은 경우에는 상속이 가능하기 때문에 상속도 받고 프로토콜도 채택하는 경우에는
상속받는 클래스를 먼저 선언해준 다음에 프로토콜을 선언해주시면 돼요
열거형 같은 경우는 저도 확실하게 알지 못해서 설명은 생략했는데
나중에 열거형에 대해서 공부하면서 알게 되면 알려드릴게요...
여기까지가 프로토콜의 기본개념이었습니다!!
처음 글쓰는거라 많이 부족한 게 느껴지셨겠지만 조금이나마 다른 분들에게 도움이 되셨으면 좋겠네요:)
아직은 저의 실력이 많이 부족하지만 다음에는 좀 더 발전된 글 실력으로 돌아올게요
다음 글은 프로퍼티 요구사항에 대해서 작성해보려고 하는데 더 공부해서 돌아오겠습니다!
수고하셨습니다
'Swift' 카테고리의 다른 글
Swift - Properties - Property Wrappers (0) | 2020.07.21 |
---|---|
Closure - Capture List (0) | 2020.07.17 |
Swift - Protocols Method 요구사항 (0) | 2020.03.12 |
Swift - Protocols Property 요구사항 (0) | 2020.03.08 |