추상화 종류 분류와 인스턴스화 일반화와 특수화 집합과 분해 1. 분류와 인스턴스화 * 개념과 범주 객체들의 특정집합에 공통의 개념을 적용하는 것 바퀴를 이용해 사람들을 운반하는 운송수단 -> 자동차 푸른 잎과 갈색의 줄기를 가진 다년생 식물 -> 나무 분류는 세상에 존재하는 객체에 개념을 적용하는 과정이다. 우리는 무수히 많은 자동차와 나무를 개별적으로 다루지않고 하나의 범주로 묶어 복잡성을 낮춘다. 분류를 통해 개별현상을 하나의 개념으로 다룬다. 수많은 개별적인 현상들은 객체이다. 하나의 개념은 타입이다. 객체들을 동일한 타입 또는 범주로 묶는 과정을 의미하므로 객체를 타입의 인스턴스라고 한다. * 타입 타입으로 객체를 분류할때 적용하는 세가지 관점 심볼 : 간략한 이름이나 명칭 내연 : 타입의 완전한..
객체지향 설계 안에 존재하는 세가지 상호 연관된 관점 개념관점 실제 도메인의 규칙과 제약을 최대한 유사하게 반영하라. => 도메인 설계를 잘해라. 명세관점 소프트웨어 관점에서 객체가 다른 객체와의 협력을 위해 '무엇'을 할 수 있는가에 초점을 맞춰라 => 인터페이스와 구현체를 하나의 클래스 혹은 생략하지말고 분리하여 생각하자. 구현관점 객체들이 책임을 수행하는데 필요한 코드를 작성한다. => 즉, 인터페이스는 객체들간의 책임과 협력에서의 명세서로써 분리하고 그 인터페이스에 메서드와 속성들을 구현하자. 커피 전문점 도메인 객체 손님 바리스타 메뉴판 메뉴 커피 연관관계 메뉴판
안정적인 구조를 기반으로 시스템을 분할하는 객체지향적인 접근법은 역할, 책임, 협력을 기반으로 시스템의 기능을 구현하는 책임-주도 설계의 본질을 이해하는 것에 도움이 된다. 자주 변경되는 기능이 아닌 구조를 따라 역할, 책임, 협력을 구성하라. 기능 설계 대 구조 설계 불행하게도 요구사항은 변경된다.설계라는 행위를 중요하게 만드는 것은 변경에 대한 필요성이다. (성능 보단 유지보수를 생각하라는 말이 사실인것 같다.) 우리는 변경을 예지하는 것이 아닌 변경을 수용할 수 있는 선택의 여지의 설계를 마련해 놓는 것이다. 자주 변경되는 기능을 중심으로 설계한 후 구조가 기능을 따르게 하는 '전통적인 기능분해'는 변경에 취약하다. 객체지향은 자주 변경되지 않는 안정적인 객체 구조를 바탕으로 시스템 ..
책에서의 예를 든 '책임감분산', TV에서 본 '방관자 효과' 목격자가 많을 수록 책임감은 적어진다. 명확한 책임을 가진 권위자가 없을 때 이 같은 현상이 벌어진다. 객체지향은 명확하게 정의된 역할과 책임을 지닌 객체들의 상호협력이다.. 자율적인 책임 책에서의 예를 든 왕이 모자장수에게 증언하라는 요청을 전송할때, 자율적으로 증언하라라고 요청할 수 있고, 구체적으로 (목격장면, 사건순서, 간결하게) 증언하라라고 요청할 수 있다. 증언하게 된다는 점은 동일하지만 '모자장수'에게 주어진 권한에는 큰 차이가 있게된다. 두번째 증언의 경우, 모자장수는 자율적인 책임을 수행할 수 없다. (자율적인 객체가 못된다.) 메시지와 메서드 하나의 객체가 다른 객체에 접근하는 방법은 메시지(요청)을 전달하는 것 뿐이다. 객..
Ch.4 역할, 책임, 협력 객체가 가져야 할 행동 혹은 상태를 먼저 생각하지 말자. 객체간의 협력이 우선이다. 즉, 책임을 어떻게 구현할 것인가? (no) 객체간의 협력에서 올바른 객체가 책임을 가져야 한다. 객체의 책임 분류 하는것(doing) 객체를 생성, 계산하는 등 스스로 하는것 다른 객체의 행동을 시작시키는것 다른 객체의 활동을 제어하고 조절하는것 아는것(knowing) 개인적인 정보에 관해 아는것 관련된 객체에 관해 아는것 자신이 유도하거나 계산할 수 있는것에 관해 아는것 아는것의 경우 책에서의 재판의 관한 예를 보았지만 프로그래밍 내의 예시를 생각하여 이해하기는 힘들었다. 역할 역할을 대체할 수 있는 객체란, 동일한 메세지를 이해할 수 있는 객체역할의 개념을 사용한다면 다양한 객체들이 협력..
ch.3 타입과 추상화 '정확성'을 버리고 '목적'에 집중해라 지하철 노선도는 실제 지도에 맞춰서 그릴 필요가 없다. 환승역이나 역간의 연결만이 중요할 뿐 실제 지도와 똑같이 그릴려는 '정확성'을 버리고 노선도에 맞는 '목적'에 초점을 맞추자 '추상화'의 목적 불필요한 부분을 무시함으로써 현실에 존재하는 복잡성을 극복하는 것 그룹으로써의 추상화 현실에 살아가는 우리는 핸드폰, 컴퓨터, 신발, 책 등 일상생활에서 모든 것을 추상화해서 부른다. 모든 것을 세분화해 "난 '갤럭시 플립4'를 사용해"라고 하지 않을 것 이다. 이 객체를 나누기 위한 개념을 말할땐 3가지 관점을 통해 얘기한다. 심볼 ; 개념을 가리키는 이름 ex..
- CompositionAPI
- 정수형으로 변환
- 토스페이먼츠
- it책 리뷰
- springboot
- LEVEL2
- 짝지어제거하기
- 스프링부트
- 객체 지도
- 맥 error
- JWT
- 객체지향의 사실과 오해
- 알고리즘
- script setup
- vue.js
- java 플레이그라운드
- 함께모으기
- vuex
- for
- 리눅스마스터2급
- Vue.js3
- 프로그래머스
- 타임리프
- 한권으로끝내기리눅스마스터2급
- 책리뷰
- 객체지향
- pinia
- mybatis구현
- 다음 큰 숫자
- SpringSecurity
- Total
- Today
- Yesterday