전체 글 567

오브젝트: 코드로 이해하는 객체지향 설계 13장을 읽으며

오브젝트: 코드로 이해하는 객체지향 설계 13장을 읽으며 느낀점상속과 관련된 설계에서 부모 클래스와 자식 클래스 간의 계약이 어떻게 정의되고 지켜져야 하는지 알게 되었음. 부모 클래스에서 정의된 규칙과 제약을 자식 클래스가 확장하거나 변경할 때, 이를 위반하지 않고 일관성을 유지하는 것이 객체지향 설계의 핵심상속이 단순히 코드 재사용을 위한 도구가 아니라, 명확하고 견고한 계약을 기반으로 하는 책임의 연속성을 의미.계약에 의한 설계에서 계약 위반이 발생했을 때 시스템이 얼마나 취약해질 수 있는지에 설득력 있었고, 상속보다는 합성(composition)을 활용해 계약을 명시적으로 정의하고 관리하는 것이 때로는 더 효과적일 것 같음.  서브클래싱과 서브타이핑상속의 첫번째 용도는 타입 계층을 구현하는 것타입 ..

Combine ReadOnly Publisher

Combine ReadOnly PublisherCombine을 통해 개발하는데, Read만 가능한 Publiser가 필요한 상황이 생김.Combine과 SwiftUI에서 기본 제공되는 PassthroughSubject, CurrentValueSubject, @Published로는 읽기 전용으로 제한하기에 마땅치 않아서 커스텀하게 만들어서 사용하고자 함. 목차모듈 전체 코드CurrentValueSubject을 통한 구현PassthroughtSubject을 통한 구현 PassthroughSubject를 활용한 구현에서 value를 지원하는 형태간단 사용 예제 모듈 전체 코드구현할 때 고려했던 것들Swift Package를 활용해서 모듈 형태로 구현해서 접근제어자 활용.상속을 통해 타입 계층의 이점을 누리고자..

오브젝트: 코드로 이해하는 객체지향 설계 12장을 읽으며

오브젝트: 코드로 이해하는 객체지향 설계 12장을 읽으며 느낀점self, super 등 다형성에 점점 더 지식이 늘어가는 것 같다 가끔 수동 배포 할 때 ad hoc이란 용어가 있었는데, 임시라는 의미였다니! 다형성코드 재사용을 목적으로 상속을 사용하면 변경하기 어렵고 유연하지 못한 설계에 이를 확률이 높아짐상속의 목적은 코드 재사용이 아님상속은 타입 계층을 구조화하기 위해 사용해야 함.클라이언트 관점에서 인스턴스들을 동일하게 행동하는 그룹으로 묶기 위해서라면 사용하지 말아야 함.상속의 일차적인 목적은 코드 재사용이 아닌 서브 타입의 구현이라는 사실을 이해할 것객체지향에서 다형성은 유니버셜 다형성과 임시(ad Hoc) 다형성으로 분류할 수 있음유니버셜 다형성은 매개변수(Parametric) 다형성과 포함..

Swift Mixin and Trait

Swift Mixin and Trait iOS 프로그래밍에서 주로 사용되는 언어는 Swift로 다중 상속을 지원하지 않음.Swift에서는 인터페이스(Interface)를 프로토콜(protocol)로 사용하고 있어서 프로토콜이라는 용어와 인터페이스의 의미는 같음. 목차배경mixin이란?interface(protocol), mixin, trait예제를 통해 알아보기 1예제를 통해 알아보기 2예제를 통해 알아보기 3swift 다중 상속 컴파일 오류몇가지 실험들둘 다 채택한 경우명시적 캐스팅배경객체지향 프로그래밍에서 상속의 사용은 코드의 결합도를 크게 증가시킴. 이로 인하여 많은 문제점들이 발생.상속을 코드 중복을 해결하기 위한 수단으로 사용하면 안됨.상속은 부모와 자식간의 높은 결합도를 가지게 되어 코드의 ..

apple/iOS 2024.11.18

오브젝트: 코드로 이해하는 객체지향 설계 11장을 읽으며

오브젝트: 코드로 이해하는 객체지향 설계 11장을 읽으며 느낀점프로그래밍 언어의 발전과 구조에 대한 이론에 점점 더 흥미가 생기는 것 같음. 언어마다 다중 상속을 지원하지 않거나 mixin을 제공하는 방식을 보며 각 언어가 선택한 설계 철학과 구조의 차이를 이해하는 데 많은 인사이트를 얻음. 이러한 차이점은 단순히 문법적 요소에 국한되지 않고, 언어가 지향하는 객체지향의 특성과 설계 원칙에 깊이 뿌리를 두고 있다는 점이 체계적으로 언어를 잘 만든 것 같음. 합성과 유연한 설계상속이 부모 클래스를 자식 클래스를 연결해서 부모 클래스의 코드를 재사용하는 데 비해 합성은 전체를 표현하는 객체가 부분을 표현하는 객체를 포함해서 부분 객체의 코드를 재사용상속에서 부모와 자식 클래스 간의 관계는 컴파일 타임에 해결..

오브젝트: 코드로 이해하는 객체지향 설계 10장을 읽으며

오브젝트: 코드로 이해하는 객체지향 설계 10장을 읽으며 느낀점상속은 경험에 의해서 기피하는 경향이 있는데, 문제에 대해서 다시보면서 인터페이스 상속이 아닌 구현 상속이 일반적으로 문제가 있구나를 알게 되었음. 상속과 코드 재사용객체지향 프로그래밍의 장점 중 하나는 코드를 재사용하기가 용이하다는 것.전통적인 패러다임에서 코드를 복사한 후 수정하는 것클래스를 재사용하기 위해 새로운 클래스를 추가하는 가장 대표적인 기법인 상속에 관해 살펴보기로 함.기존 클래스의 인스턴스를 포함시키는 방법으로 흔히 합성이라고 부름상속과 중복 코드중복 코드는 사람들의 마음속에 의심과 불신의 씨앗을 뿌림.눈 앞 코드가 어떤 코드와 비슷하다고 느끼는 순간 우리의 뇌는 혼란속으로 내던져 짐. DRY 원칙중복 코드는 변경을 방해함...

오브젝트: 코드로 이해하는 객체지향 설계 9장을 읽으며

오브젝트: 코드로 이해하는 객체지향 설계 9장을 읽으며 느낀점개방 폐쇄 원칙 및 컴파일 타임 의존성, 런타임 의존성 보면서 기존 설계한 코드들을 다시 보게 되었음. 특히 Factory는 많이 사용하는데, 이거 어디에 위치시킬지 매번 고민했는데, 순수한 기술적 결정이므로 어디에 위치시킬지 명확한 근거를 알게 되었음. create, use를 분리하는거 경험적으로 행하고 있었는데, 문서로 보니까 더욱 좋았음! 유연할 설계이전 장에서는 재사용 가능한 설계를 만들기 위해 적용할 수 있는 다양한 의존성 관리 기번을 소개. 이번에는 원칙이라는 관점에서 정리개방 폐쇄 원칙은 확장과 수정이 키워드확장에 대해 열려 있다: 애플리케이션의 요구사항이 변경될 때 이 변경에 맞게 새로운 동작을 추가해서 애플리케이션의 기능을 확장..

오브젝트: 코드로 이해하는 객체지향 설계 8장을 읽으며

오브젝트: 코드로 이해하는 객체지향 설계 8장을 읽으며 느낀점의존성에 대해서 더 잘 알게 되었음. 사내에서 이렇게 하면 더 좋겠다라고 생각해서 작성한 코드가 컨텍스트 확장과 조합 가능한 행동을 따른다는 데서 짜릿함을 느낌 의존성 관리하기잘 설계된 애플리케이션은 작고 응집도 높은 객체들로 구성협력은 필수적이지만 과도한 협력은 설계를 곤경에 빠뜨리기도 함.객체지향 설계란 의존성을 관리하는 것이고 객체가 변화를 받아들일 수 있게 의존성을 정리하는 기술변경과 의존성객체가 협력하기 위해 다른 객체를 필요로 할 때 의존성이 존재. 의존성은 실행 시점과 구현 시점에 서로 다른 의미를 가짐실행 시점: 의존하는 객체가 정상적으로 동작하기 위해서는 실행 시에 의존 대상 객체가 반드시 존재해야 함구현 시점: 이존 대상 객체..

오브젝트: 코드로 이해하는 객체지향 설계 7장을 읽으며

오브젝트: 코드로 이해하는 객체지향 설계 7장을 읽으며 느낀점데이터 타입 추상화와 클래스의 차이를 더 명확하게 이해할 수 있었음. 객체 분해가 단순히 구조를 나누는 것이 아니라, 필요에 따라 정보의 복잡도를 관리하는 중요한 과정. 복잡한 시스템에서 모듈화를 통해 인지 과부하를 줄이고 코드의 가독성을 높이는 데 큰 도움이 된다는 부분 고민 프로그래밍 언어의 설계에 있어 왜(why)에 대해서 더 잘 알게 되었달까? 객체 분해개발자가 인지할 수 있는 용량을 초과하는 순간 인지과부하가 발생하여 문제 해결능력이 급격하게 떨어짐이를 위해 정보의 양을 조절하는 것불필요한 정보를 제거하고 현재의 문제 해결에 필요한 핵심만 남기는 것을 추상화라고 함큰 문제를 작은 문제로 나누는 것을 분해(decomposition)이라..

오브젝트: 코드로 이해하는 객체지향 설계 6장을 읽으며

오브젝트: 코드로 이해하는 객체지향 설계 6장을 읽으며 느낀점함수형 프로그래밍의 개념과 부수효과를 최소화하는 방법, 명령(Command)과 쿼리(Query)를 분리하는 설계 원칙에 대해 배운 것이 인상적이었음. 메시지를 통해 객체 간의 협력이 이루어질 때, 불필요한 부수효과를 피하는 것이 얼마나 중요한지 체감했고, 코드의 안정성과 일관성을 높이는 방법을 구체적으로 알게 되었음. 메시지와 인터페이스객체지향 프로그래밍에 대한 가장 흔한 오해는 애플리케이션이 클래스의 집합으로 구성된다고 생각하는 것. 클래스는 구현 도구일 뿐.가장 중요한 재료는 클래스가 아니라 객체들이 주고받는 메시지 클라이언트 - 서버 모델두 객체 사이의 협력 관계를 설명하기 위해 사용하는 전통적인 메타포는 클라이언트-서버 모델두 객체 사이..