정말 부끄럽지만 뜸했던 TIL
약 일주일정도의 텀이 있었던 듯 하다.
무얼 했나? => 네이버 블로그에..
공부는 무얼했나? => 약 2일정도는 리액트에 빠져있었다. 뽀모도로 타이머 만들기 중독적. ios는 공부량 전무했다
오늘은 풀집중이 어려웠다. 가볍게 몸푸는 느낌으로 진도를 나가보았다(제발)
가볍게 프로토콜에 대해 입문해 보았다. 오랜만에 보니까 반갑기도 하고, 사실 집중을 잘 하지는 못했지만 그래도 했다는 것에 의의를 둬본다 (눈물)
프로토콜은 사실 상속을 배운 후에 배우는 부분이라 이해가 아주 어렵지는 않고, 상속과 확장을 이해하는 논리를 바탕으로 이해하면 어느정도 로지컬하게 이해가 된다.
중요한 부분
위에서 말한 것 처럼 프로토콜 내에는 메서드의 헤더만(최소요구사항)만 정의해준다.
타입메서드는 static 키워드를 붙여주면 되고 mutating 키워드가 붙을 경우는 해당 프로토콜을 구조체에서 채택했고, 해당 메서드(프로토콜에서 정의된)내에서 구조체의 속성을 변경시키고 싶을때 붙여야만 하는 키워드이다.
단!!(오해금지)
mutating 키워드가 붙은 메서드라고 무조건 해당 프로토콜을 struct즉 구조체만 쓸수있다는 의미는 아니다. 클래스 타입도 해당 프로토콜을 채택하고 매서드를 구현할 수 있다.
채택한 타입 내에서 mutating 키워드 붙은 메서드를 구현할때는 클래스는 물론 mutating 키워드가 없이도 구현가능하고, 구조체는 mutating 키워드 필수로 붙여줘야 한다. 예: mutating func ~
final class로 구현시 내부에 required 키워드 생각가능하다(당연히 상속고려 필요 없기때문이다)
클래스의 경우 반드시 채택한 프로토콜의 생성자를 내부에서 지정생성자로 구현할필요없이 편의생성자 구현도 가능하다. 단 이경우 원래 생성자 문법에 따라 지정생성자, 혹은 편의생성자라도 호출해야겠다(델리게이트 어크로스 고려)
클래스로 하위클래스에서 (상위클래스가 채택한 프로토콜의) 필수생성자를 상속받게 된 경우 + 재정의를 원한다면 required override 키워드를 사용해야 한다.
실패가능 생성자의 경우 포함관계를 잘 고려해보자 (프로토콜에서 init?으로 실패가능 생성자로 정의 => init? init! init으로 구현가능)
서브스크립트 subscript문법 역시 포함관계를 잘 고려하면 쉽다. (프로토콜에서 get 요구 => get/ getset 구현가능 , getset 요구 => getset으로만 구현가능)
연휴에 사람을 많이 만났다. 혼자 공부하는 장소에 가보았다