[Swift] 프로토콜 메서드의 매개변수 기본 값 설정 (Defining default parameters for protocol methods)
·
Swift/개념 & 응용
서론 프로토콜 타입을 사용할 때 불편한 점이 하나 있습니다. 메서드 파라미터에 기본 값을 사용할 수 없다는 점입니다. 예를 들어, UseCase의 execute 파라미터로 page를 전달해야 한다고 합시다. protocol UseCaseProtocol { func execute(page: Int) } struct UseCase: UseCaseProtocol { func execute(page: Int) { // Logic } } let useCase: UseCaseProtocol = UseCase() useCase.execute(page: 1) 그러면 위 코드처럼 항상 page를 전달해줘야 해요. page에 기본 값을 설정하고 싶어도 프로토콜 메서드에는 Default argument를 설정할 수 없다는 ..
[회고] 네이버 부스트캠프 웹・모바일 8기 멤버십 3주 차 회고 & 기술적 고민
·
경험 회고/네이버 부스트캠프 웹・모바일 8기
서론 이번 3주 차는 정말 너무너무 힘들고 어려웠습니다. 다형성이 어렵다고 생각은 했는데 이 정도일 줄은... 이번 회고도 쓸까 말까 고민했는데 짧게라도 남기기 위해 작성합니다. 이왕 시작한 거 빼먹으면 아쉬우니까요. 프로토콜과 다형성 Swift의 POP와 객체지향 OOP 사이에서 고민하는 주차였습니다. 특히 프로토콜에 프로퍼티를 넣는 것은 객체지향에 어긋나느냐? 하는 주제로 다른 캠퍼들과 의견을 나눴던 거 같아요. 1. Swift의 프로토콜에는 프로퍼티를 넣어도 자연스럽다. 프로토콜에 프로퍼티를 넣지 않으면 getter/setter 메서드를 넣어야 하는데 이건 Swift 스럽지 않다. 2. 프로토콜에 프로퍼티를 넣으면 객체지향의 캡슐화, 은닉화가 약해진다. 따라서 최대한 프로퍼티를 넣지 말아야 한다. ..
[Swift] 결합도와 응집도
·
Swift/개념 & 응용
서론 패턴과 설계를 공부하는 과정에서 "결합도"와 "응집도"라는 단어가 반복적으로 나오는 것을 발견했습니다. 좋은 설계란 "낮은 결합도"와 "높은 응집도"를 가지는 유지보수가 쉬운 설계를 말한다고 하는데요. 여기서 말하는 결합도와 응집도가 무엇인지 알아보겠습니다. 모듈 결합도와 응집도에 대해 알아보기 전, 모듈이 뭔지 알아야 합니다. 모듈은 개념의 범위가 넓기 때문에 명확하게 말하긴 어렵지만, 위키백과에서는 "기본적으로 본체에 대한 독립된 하위 단위" 라고 정의하고 있습니다. 프로그램이 본체라면, 이를 구성하는 클래스 등을 독립된 하위 단위로 말할 수 있습니다. 클린 코드, 클린 아키텍처의 저자인 로버트 마틴은 모든 모듈은 제대로 실행되어야 하고, 변경이 쉬워야 하고, 이해하기 쉬워야 한다고 말했습니다...
[Swift] Protocol 확장을 이용한 Singleton 개선
·
Swift/개념 & 응용
서론 싱글톤 패턴의 가장 큰 장점은 편리하다는 것입니다. 하지만 여러 부수적인 문제가 많고 특히, 사이드 이펙트가 크다는 점이 문제입니다. 프로젝트 전역에 두루두루 쓰이는 게 싱글톤 객체인데, 이말은 곧 싱글톤 객체에 문제가 생기면 프로젝트 전역에 문제가 생긴다는 뜻이기 때문입니다. 오늘은 Swift의 프로토콜 확장을 통해 이를 어느정도 해소할 수 있는 방법을 알아보겠습니다. 이것도 장단점이 있으니 프로젝트에 적절할 때 적용해보면 좋을듯 합니다. 프로토콜 확장(extension Protocol) 기본 원리는 프로토콜을 이용해 한 곳에서 싱글톤 호출을 담당하는 것입니다. 구조체나 클래스가 아니라, 프로토콜을 사용하는 이유는 싱글톤의 존재를 숨길 수 있기 때문입니다. 프로토콜을 정의하고, extension으..
[Swift] 프로토콜 기본 구현 정의하기 (extension Protocol)
·
Swift/개념 & 응용
필요성 프로토콜은 상속과 달리 프로토콜의 정의 부분만 추가된다는 장점이 있습니다. 상속은 부모 클래스의 모든 것을 받기 때문에 프로토콜보다는 무겁죠. 또, 프로토콜은 구조체를 이용해 다형성을 구현하는 핵심 기술이기 때문에 반드시 필요합니다. 그렇지만 프로토콜은 프로토콜에서 정의한 모든 것을 구현해야 한다는 번거로움(?)이 있는데요. 프로토콜을 확장(extension)하면 이를 해소할 수 있습니다. 프로토콜 확장 protocol Testable { func hello() func bye() } 실습을 위한 프로토콜입니다. (형편 없는 네이밍이지만 able은 꼭 붙여주는 ㅋㅋ) Testable 프로토콜에서는 hello와 bye 메서드가 있어서 Testable 프로토콜을 채택하면 두 개의 메서드를 꼭 구현해줘..
[Swift] 공식 문서 - 프로토콜(Protocols) - 2
·
Swift/Swift 가이드
* Protocols 가이드 1편은 여기에서 볼 수 있습니다. 새로 배운 점 제네릭(generic) 타입은 프로토콜 이름 뒤에 where 절이 있을 때만 프로토콜의 요구사항을 만족합니다. Swift는 다음과 같은 커스텀 타입에 대해 Equatable 구현을 제공합니다. Equatable을 따르는 저장 프로퍼티만 가진 구조체 Equatable을 따르는 associated 타입만 가진 열거형 associated 타입이 없는 열거형 Swift는 다음과 같은 커스텀 타입에 대해 Hashable 프로토콜을 따르도록 할 수 있습니다. Hashable을 따르는 저장 프로퍼티만 가지고 있는 구조체 Hashable을 따르는 associated 타입만 가지고 있는 열거형 associated 타입이 없는 열거형 raw va..
[Swift] 공식 문서 - 프로토콜(Protocols) - 1
·
Swift/Swift 가이드
* Protocols 가이드는 너무 길어서 두 편으로 나눠 포스팅합니다. 2편은 여기에서 볼 수 있습니다. 최하단에도 링크를 적어두었습니다. 새로 배운 점 구현해야 하는 요구사항을 지정하는 것 이외에도 이러한 요구사항 중의 일부를 구현하거나 추가 기능을 구현하도록 프로토콜을 확장할 수도 있습니다. Property 요구사항(requirements)은 항상 var 키워드를 앞에 붙여서 변수 프로퍼티로 선언합니다. 프로토콜에서 메서드들은 메서드의 body와 괄호를 제외하고 나머지를 작성합니다. 프로토콜에서 메서드는 가변 매개변수는 허용하지만 기본값은 설정할 수 없습니다. 프로토콜에 mutating을 사용한 경우, 이 프로토콜을 따르는 클래스를 구현할 때는 mutating을 명시하지 않아도 됩니다. 프로토콜을 ..
[Swift] Swift 문법 - 프로토콜(Protocol)
·
Swift/개념 & 응용
안녕하세요. 오늘은 프로토콜(protocol)에 대해 알아보겠습니다. 프로토콜은 java의 interface와 동일한 개념입니다. Swift를 처음 공부하며 작성한 포스팅이기 때문에 부족한 내용이 있을 수 있습니다. 댓글로 알려주시면 공부해서 내용 추가하도록 하겠습니다. 미리 감사합니다! 그럼 바로 시작하겠습니다. 참고 자료 해당 포스팅은 Smile Han님의 유튜브 영상을 참고하며 작성하였습니다. https://www.youtube.com/channel/UCM8wseo6DkA-D7yGlCrcrwA Protocol 프로토콜이란 특정 클래스와 관련 없는 property와 method 선언의 집합입니다. 포인트는 메서드 정의는 없고 선언만 있다는 것입니다. 클래스에서 프로토콜을 채택(adopt)해서 직접 구..
유정주
'프로토콜' 태그의 글 목록