일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 객체지향
- 상속 조합 폭발적 증가
- 객체 생성 사용 분리
- 알고리즘
- 유여난 설계
- 믹스인
- 서브 타이핑
- 메서드를 통한 해결
- 하향식 접근
- 행동 호환성
- OOP
- Apple # HIG #iOS15 #iOS14 #Human #Interface #Guidelines #Apple developer # Apple human interface guidelines
- 설계 재사용
- 상속
- 컴파일 타임 의존성
- 일관성 있는 협력
- 다형성
- Swift#flatMap#map#Monad#함수형 프로그래밍#Optional
- 의존성
- 책임주도설계
- dip
- '기존 설계 재사용
- OCP
- 추상화
- 유연한 설계
- 합성
- iSP
- 명령-쿼리 분리
- 런타임 의존성
- 오브젝트
- Today
- Total
목록OCP (4)
도니의 iOS 프로그래밍 세상
상속의 두가지 용도타입 계층 구현코드 재사용1. 타입객체지향 패러다임 관점의 타입개념 관점에서 타입이란 공통의 특징을 공유하는 대상들의 분류프로그래밍 언어 관점에서 타입이란 동일한 오퍼레이션을 적용할 수 있는 인스턴스의 집합객체지향 관점에서 객체가 수신할 수 있는 메시지의 집합은 퍼블릭 인터페이스결국 같은 퍼블릭 인터페이스를 제공 한다면, 객체 지향 관점에서는 동일한 타입2. 서브클래싱과 서브타이핑언제 상속을 사용해야 하는가?is-a 관계를 만족할 때클라이언트 입장에서 부모 클래스 타입을 자식 클래스로 사용해도 무방할 때is-a 관계, 행동 호환성is-a 관계에서 만족시켜야 할 것은 직관이 아닌, 클라이언트 입장에서 대체 가능성클라이언트 입장에서 is-a 관계를 만족시킨다면 타입 계층으로 설정할 수 있음..
1. 개방-폐쇄 원칙(OCP)OCPs/w는 확장에 열려있고, 수정에 닫혀있어야 함이는 기존 코드 수정 없이 동작이 추가되고 변경되어야 한다는 뜻추상화가 핵심이다추상화를 통해 핵심적인 부분만 의존하도록 해, 문맥이 변하더라도 바뀌지 않음문맥에 따라 적합한 기능을 구체화 하면 된다.2. 생성 사용 분리객체가 추상화만 의존하기 위해선, 추상화의 구체 클래스를 객체 내부에서 생성해서는 안됨구체 클래스를 객체가 직접 생성한다면, 기능(구체 클래스)을 변경할 때 기존 코드의 변경이 발생할 수 밖에 없고, 이는 OCP 위반그리하여 유연한 설계를 위해서는 생성과 사용이라는 책임을 두 객체로 분리 한다.Factory 추가하기생성과 사용 분리를 위해 객체 생성에 특화된 Factory를 사용3. 의존성 주입사용하는 객체가 ..
문제 해결에 필요한 핵심만 남기는 작업을 추상화이때, 큰 문제를 해결 가능한 작은 문제로 나누는 작업을 분해라고 함1. 프로시저 추상화와 데이터 추상화프로시저 추상화s/w가 무엇을 해야 하는지 추상화기능 분해(알고리즘 분해)데이터 추상화s/w가 무엇을 알아야 할지 추상화타입 추상화(abstract data type)데이터를 중심으로 프로시저를 추상화(Object-oriendted)2. 프로시저 추상화와 기능 분해전통적인 하항식 접근 방법을 따름시스템을 구성하는 가장 최상위 기능을 정의하고, 작은 하위 기능으로 분해하향식 접근 시스템의 예시직원 급여 계산 시스템(main 함수) - 전역 변수 저장 직원 기본급 정보를 얻음 - 세율을 입력받음 - 이를 통해 급여를 계산함하향식 접근의 문제점기능 추가시에 메인..
유연하게 대응할 수 있는 설계를 만드는 원칙 중 하나인 OCP(Open-Closed Principle)에 대해 알아보자.Chap01. OCP소프트웨어 개체(클래스, 모듈, 함수)는 확장에 열려 있고, 수정에 닫혀 있어야 한다.확장에 대해 열려있다: 애플리케이션 요구 사항 변경시, 변경에 맞게 새로운 동작을 추가해서 기능을 확장할 수 있다.수정에 닫혀 있다: 기존 “코드”를 수정하지 않고, 애플리케이션 동작을 추가하거나 변경할 수 있다.이는 결국 추상화를 의미한다. 추상화 과정을 거쳐 문맥이 바뀌더라도 변하지 않는 부분만 남고, 변하는 부분은 생략된다.런타임 때 의존성이 변경되도록 구현하면 된다.결국, 문맥이 바뀌더라도 변하지 않는 부분을 추상화하고, 변하는 부분이 수정할 수 있도록 하는 것이 핵심ex. ..