오브젝트 (4)
·
Book/DEV
이 포스팅은 오브젝트(조영호)를 읽으면서 정리한 글입니다이전 포스팅오브젝트 (1)오브젝트 (2)오브젝트 (3)상속과 코드 재사용상속기존 클래스를 확장해 새로운 클래스를 만듬is-a 관계기존 클래스의 기능을 물려받는다.부모와의 결합도 ⬆️자식이 부모에 대해 아주 잘! 알아야함언제 상속을 사용할까?상속 관계가 is-a 관계인가?부모 클래스 타입으로 자식 클래스를 사용해도 무방한가? (행동호환성)합성클래스 인스턴스 안에 기존의 인스턴스를 추가has-a 관계합성 객체들의 인터페이스를 명확하게 정의해야 함믹스인객체 생성시 코드 일부를 클래스 내에 섞어 넣는다(컴파일 시점 주입)스칼라의 트레이트가 이를 활용다형성런타임 시점에 결합되는 동적인 문맥을 사용한다.self런타임 시점에 자기 자신 / 혹은 자식 인스턴스를 ..
오브젝트 (3)
·
Book/DEV
이 포스팅은 오브젝트(조영호)를 읽으면서 정리한 글입니다이전 포스팅오브젝트 (1)오브젝트 (2) 객체 분해하기추상화프로시저 추상화"소프트웨어가 무엇을 해야 하는지"기능 분해 (알고리즘분해)데이터 추상화"소프트웨어가 무엇을 알아야 하는지"데이터 중심 타입 추상화(type abstraction), 데이터 중심 프로시저 추상화(procedure abstraction)프로그래밍 언어 관점의 객체지향이라고 볼 수 있음데이터 중심 데이터 추상화, 프로시저 추상화 통합 객체를 사용하여 시스템을 분해.이 때 클래스를 사용한다.기능 분해기능을 중심으로 데이터를 결정한다.top-down(하향식) 접근 - 기능분해의 전통 방식Top-down example)직원정보입력 → 소득세율 가져오기 → 급여계산위처럼 실행순서가 고정되..
오브젝트 (2)
·
Book/DEV
이 포스팅은 오브젝트(조영호)를 읽으면서 정리한 글입니다이전 포스팅오브젝트 (1)메시지와 인터페이스클래스가 아닌 객체(객체가 수행하는 책임)를 지향하라메시지애플리케이션은 객체가 주고 받는 메시지로 구성된다.객체 사이의 협력을 가능케 하려면 메시지를 전송해야 한다.클라이언트 - 서버 모델객체 사이의 협력을 나타내는 전통메타포클라이언트 : 메시지를 전송서버 : 메시지를 수신ex)Movie가 할인을 적용받고자 하면 Discount policy가 필요해 메시지를 전송하게 된다.즉 Movie는 클라이언트, Discount policy는 서버라고 볼수있다메시지 전송(패싱)객체 → 객체로 도움 요청- 메시지 전송자 : 메시지 전송 객체- 메시지 수신자 : 메시지 수신 객체- operation(오퍼레이션명), argu..
오브젝트 (1)
·
Book/DEV
이 포스팅은 오브젝트(조영호)를 읽으면서 정리한 글입니다객체지향 설계서로 협력하고 의존하는 객체들의 공동체를 구성하는 과정.불필요한 의존성을 제거하고, 최소한의 의존성만 유지하여 유연하고 확장 가능한 시스템을 만들자.객체지향 프로그래밍데이터와 프로세스(행위)가 하나의 객체(모듈) 안에 함께 존재하도록 구성하는 프로그래밍 방식.→ 즉, 데이터와 해당 데이터를 다루는 로직이 같은 객체 안에 캡슐화된다.객체지향 설계 요소협력시스템 기능을 구현하기 위해 객체들이 메시지를 주고받으며 상호작용하는 과정역할객체가 협력 안에서 수행해야 할 책임의 집합.→ 동일한 역할을 여러 객체가 구현할 수 있음 (인터페이스 기반 설계)책임객체가 수행해야 할 행동(로직) 또는 데이터 관리의 의무→ 객체는 자신의 역할에 맞는 책임을 수..
만들면서 배우는 클린 아키텍쳐 (2)
·
Book/DEV
만들면서 배우는 클린 아키텍쳐 (톰 홀버그 지음, 위키북스)를 읽고 정리한 내용입니다. 이전 포스팅만들면서 배우는 클린 아키텍쳐포트핵심 비즈니스 로직과 외부 시스템 간의 상호작용을 정의하는 인터페이스 역할을 하는 컴포넌트입력 포트 (Input Port)유스케이스의 진입점 역할외부에서 내부로 흐르는 데이터 흐름 (=외부 요청을 내부로 전달)Controller와 같은 입력 어댑터에서 유스케이스를 호출할 때 사용애플리케이션의 핵심 비즈니스 로직을 담고 있는 서비스(Service)가 이 인터페이스를 구현비즈니스 로직의 공개 API예시public interface SendMoneyUseCase { boolean sendMoney(SendMoneyCommand command);}출력 포트 (Output Port)도..
만들면서 배우는 클린 아키텍쳐
·
Book/DEV
들어가며보통 스프링 프로젝트를 시작하게 되면 계층형 아키텍쳐를 쉽게 채택한다.계층형 아키텍쳐의 대안에 대해 미리 알아두고, 필요할 때 잘 채택할 수 있도록 해당 서적을 읽기 시작했다.나아가 기존 프로젝트의 결합도를 낮출 수 있는 방법에 실습하며 익혀보고자 했다.계층형 아키텍쳐 영속성 계층에 의존하기 때문에 데이터베이스 설계에 의존하게 된다.데이터베이스의 구조를 먼저 생각하고, 이를 토대로 도메인 로직을 구현하게 된다.영속성 개체에 대한 의존성이 높아지면, 개발자들의 병렬(동시) 작업에 어려움이 생길 수 있다.ex) 엔티티의 변경이 발생해 서비스 코드의 변화가 생김 -> merge conflict의존성 역전컴포넌트 사이의 의존성이 생기면 상위 컴포넌트의 변경이 생길 때 마다 하위 컴포턴트의 변경이 불가피..