본문 바로가기

일반화3

객체지향의 사실과 오해 - 타입과 추상화 - 이 글은 조영호의 객체지향의 사실과 오해를 기반으로 작성되었습니다. (가능하면 꼭 읽어보는것을 추천드립니다.) - Javascript 프로토타입 상속: https://developer.mozilla.org/ko/docs/Web/JavaScript/Inheritance_and_the_prototype_chain - 추상화와 복잡성 초기의 지하철 노선도는 실제 지형을 참조한 곡선의 경로와 역간의 위치 거리 등의 정보를 충실하게 반영했었다. 하지만 현재 노선도는 직선 형태이며 역간의 거리도 실제 거리와는 무관하다. 그럼에도 목적지까지 이동하는데 불편함이 없다. 추상화의 본질은 사용자의 목적을 달성할 수만 있다면 복잡한 정보를 제거함으로써 본질을 드러내게 하는것이다. 복잡성을 다루기 위해 추상화는 두 가지 .. 2021. 8. 12.
UML - 클래스 다이어그램 고급 - 클래스화와 일반화 - 이 글은 UML Distilled (마틴 파울러)책을 기반으로 작성하였습니다. - 클래스화(classification)와 일반화(generalization) 하위 타입을 판단할 때 "is-a 관계"를 사용하라고 말한다. 하지만 이 문장에는 함정이 있다. 아래 문장은 모두 "is-a" 로 표현할 수 있는 문장이다. 양치기 개는 콜리이다. (클래스화) 콜리는 개이다. (일반화) 개는 동물이다. (일반화) 콜리는 품종이다. (클래스화) 개는 종이다. (클래스화) 위의 문장들을 합쳐서 생각해보자. 1+2 문장을 합치면 "양치기 개는 개이다"가 된다. 2+3을 합치면 "콜리는 동물이다"가 되고, 1+2+3을 하면 "양치기 개는 동물이다"가 된다. 3 문장 모두 오류가 없다. 역시 하위 타입 판별에는 "is-a.. 2021. 2. 10.
UML - 클래스 다이어그램과 일반화 - 이 글은 UML Distilled (마틴 파울러)책을 기반으로 작성하였습니다. - 일반화(Generalization) 일반화의 가장 전형적인 예제는 사업에 대해 개인 고객과 기업 고객에 관한 예제이다. 이 둘의 공통점은 상위 타입(고객)으로 추출하고, 차이점은 하위 타입에서 표현한다. 모델링의 관점에서 고객에 관련된 모든것(연관, 속성, 오퍼레이션)은 기업 고객에 대해서도 성립하는것이다. 소프트웨어 관점에서 일반화는 상속과 관련있다. 상속에서 가장 중요한 원칙은 치환 가능성이다. 치환 가능성이란 만약 고객의 타입으로 참조하여 수행한 오퍼레이션이 있다면, 이 참조하는 인스턴스가 기업 고객이어도 적절하게 동작해야 한다는 의미이다. 고객 Customer와 기업 고객 EnterpriseCustomer가 있다.. 2021. 2. 10.