존 호프만의 Protocol-Oriented Programming with Swift(스위프트 프로토콜지향 프로그래밍) 5장 읽으며 메모 (요약글 아님) 프로토콜 확장의 이점 (기능을 추가로 지원해주는 관점에서, 서브클래싱으로 그것을 이루었을 때와 비교했을 때) 클래스를 서브클래싱하여 그곳에 원하는 기능을 더했을 때의 한계: 원본 클래스에는 실제 기능을 추가하지 않으므로, 그 기능이 필요한 부분에서는 원본 클래스의 모든 인스턴스를 새로운 서브클래스의 인스턴스로 변경해야 한다. 프로토콜 확장의 경우, 해당 프로토콜을 따르기만 하면 그 기능을 제공할 수 있기 때문에 이런 치환 작업 없이 자동으로 확장한 함수/프로퍼티를 이용할 수 있다. 물론, 서브클래싱은 참조 타입(클래스 등)만 가능하고 값 타입(구조체, ..
존 호프만의 Protocol-Oriented Programming with Swift(스위프트 프로토콜지향 프로그래밍) 4장 읽으며 메모 (요약글 아님) 객체지향에서 프로토콜 컴포지션이 클래스 상속 구조보다 유용한 케이스를 설명하기 적합한 예시가 책에 나와있어서 나중에 써먹으려고 메모. 되게 많을 것 같지만 생각보다 확 와닿고 쉬운 예제가 금방 떠오르지가 않는다. 그럴 때 이 예시를 들면 좋을 것 같다. 클래스 - 한 번에 하나의 부모만 상속이 가능함. (실제 세계에서, 나를 낳아준 부모가 중복이 될 수 없는 것처럼) 프로토콜 컴포지션 - 여러 개의 작은 프로토콜들을 채용하여 내가 필요한 것만 선별적으로 취할 수 있다. 따라서 비대한 슈퍼클래스의 생성 / 서브클래스가 쓸데없는 기능까지 다 안고 있을 필요..
존 호프만의 Protocol-Oriented Programming with Swift(스위프트 프로토콜지향 프로그래밍) 2장 메모글 (요약 아님) 스위프트에서의 타입의 분류 1) 이름 있는 타입 - 타입을 정의할 때 이름을 부여한 타입 - 클래스, 구조체, ENUM, 프로토콜 등 - Primitive type 대부분(Number Bool 문자열 등) - 따라서 이런 원시타입에도 확장을 사용할 수 있다는 장점 2) 복합 타입(compound type) - 이름을 부여하지 않은 타입 - 함수 타입(클로저, 함수, 메서드 등)과 튜플 등 - typealias 로 별명을 붙일 수 있음 스위프트에서의 타입의 범주 - 참조타입: 인스턴스 전달 시 원본의 참조를 전달. 클래스 등 - 값 타입: 인스턴스 전달 시 원본..
Robert C. Martin의 Clean Architecture 3부 '설계 원칙' 7-11장을 읽고 메모한 글입니다. 요약글은 아닙니다. 개인적인 의견도 포함되어 있으니 참고해주세요. 모든 예제코드는 Swift로 작성되었습니다. SOLID 원칙 개요 함수와 데이터 구조를 클래스로 배치하고 이 클래스들을 서로 결합하는 방법에 대한 원칙 SRP, OCP, LSP, ISP, DIP 목표 변경에 유연하게 가독성 재사용성 등등 7장. SRP (단일 책임 원칙) - Single Responsibility Principle - A class should have one, and only one, reason to change. - 하나의 모듈은 하나의 책임만 가진다 (*하나의 모듈은 하나의 일만 한다, 가 아님...
Robert C. Martin의 Clean Architecture 2부 '벽돌부터 생각하기: 프로그래밍 패러다임' 3-6장을 읽고 메모한 글입니다. 요약글은 아닙니다. 개인적인 의견도 포함되어 있으니 참고해주세요. 3장. 패러다임 개요 프로그래밍 패러다임이란 무엇인가? 사전에서의 패러다임 - 한 시대의 사람들의 견해나 사고를 근본적으로 규정하고 있는 인식의 체계. 또는, 사물에 대한 이론적인 틀이나 체계. 순화어는 '틀'. 프로그래밍 패러다임은 '프로그래밍에 대한 이론적인 틀이나 체계'. 프로그래밍을 하는 방법이라고 할 수 있다. 언제, 어디에 이 구조를 사용할지 결정하며, 따라서 대체로 언어에 독립적이다. 여기서는 다음 세 가지 프로그래밍 패러다임을 다룬다. 구조적 프로그래밍 (Structured Pr..
존 호프만의 Protocol-Oriented Programming with Swift(스위프트 프로토콜지향 프로그래밍) 1장에 대한 글입니다. 책의 내용을 기본으로 하고 있지만, 개인적으로 많은 고민을 하면서 쓴 글이기 때문에 그런 부분도 반영되어 있습니다. 참고해주세요. Polymorphosm, OOP, POP 객체지향 프로그래밍(OOP)과 프로토콜지향 프로그래밍(POP)을 살펴보기 전에 먼저 짚고 넘어가야 할 핵심개념이 있다. 그것은 바로 Polymorphism(다형성) Polymorphism이란, 간단히 말하면, 같은 인터페이스로 여러 타입과 상호작용할 수 있는 개념이다. (ex) 콜라(캔)와 오렌지주스(플라스틱병) 객체가 각각 있다고 할 때 - Polymorphism 적용 X: if 콜라캔 { 캔..
Robert C. Martin의 Clean Architecture 1부 1, 2장을 읽고 메모한 글입니다. 요약글은 아닙니다. 1장. 설계와 아키텍처란? 일반적으로 설계는 저수준, 아키텍처는 고수준의 구조나 결정사항을 가리킬 때 쓰이는 용어이다. 그러나 설계와 아키텍처 사이에는 근본적인 차이가 없다. 두 가지를 뚜렷하게 구분할 수는 없다. 고수준에서 저수준으로 향하는 의사결정이 연속적으로 이루어진다고 보는 것이 맞다. 소프트웨어 아키텍처의 목표는 필요한 시스템을 만들고 유지보수하는 데 투입되는 인력을 최소화하는 데 있다. 즉, 비용은 최소화, 생산성은 최대화. 이 사항을 만족할 수 있다면 좋은 설계라고 볼 수 있다. 이런 설계(아키텍처)를 어떻게 할 수 있는지에 대해 앞으로 다룰 것이다. 2장. 두 가지..