책책책 13

[오브젝트] 객체지향 프로그래밍의 역할, 책임, 협력

객체지향의 본질은 적절한 역할과 책임을 가진 객체들이 서로 협력하는 공동체를 창조하는 것이다. 여기서 등장하는 핵심 개념인 역할, 책임, 협력에 대해 알아보자. 1. 협력 협력이란, 어떤 객체가 다른 객체에게 무엇인가를 요청하는 것이다. 다양한 객체들은 메시지를 주고받으면서 상호작용하고, 메시지를 수신한 객체는 메서드를 실행하여 요청에 응답한다. 이 때 협력에 참여하기 위해 수행하는 로직이 책임이고, 책임들이 모여 객체가 수행하는 역할을 구성한다. 더 자세히 협력의 조건을 살펴보자. o 자율적인 객체 만들기 : 객체를 생성할 때에는 정보와 정보에 기반한 행동이 같은 객체 안에 모여있어야 한다. 이 때, 객체는 자신의 상태를 직접 관리하고 스스로 행동할 수 있는 자율적인 객체가 된다. o 메시지 요청하기 ..

책책책 2022.02.26

[DDD START!] 애그리거트를 통한 복잡한 도메인 모델 간 관계 관리

도메인 주도 설계를 공부하며 등장한 애그리거트라는 개념과 그 역할에 대해서 알아보자. 쇼핑몰을 구현한다고 예를 들어보면, 내부에는 무수히 복잡하고 많은 도메인 모델들이 엮여있다. Order라는 클래스는 OrderLine, ShippingInfo, PaymentInfo, Orderer 클래스들을 참조하고 또 다시 각각의 클래스들은 Receiver, Member, Product, Category 등등.. 개별의 객체 수준에서 모델을 바라보면 서로 관계를 파악하기가 어렵다. 이렇게 복잡한 도메인 객체모델들을 이해하고 관리하기 쉽도록 관련된 도메인을 하나의 상위 수준으로 묶어서 나타낸 것이 애그리거트이다. 하나의 애그리거트에 속한 객체들은 동일한 라이프사이클을 가지고, 유사성을 지닌다 (함께 생성되고 함께 변경..

책책책 2021.08.20

[DDD START!] 웹 애플리케이션 아키텍처 설계 - DIP 적용

아키텍처는 크게 4개의 영역으로 구분되는 계층구조로 이루어졌다. o 표현계층: 사용자의 요청을 응용 영역에 전달, 응용 영역의 처리 결과를 다시 사용자에게 보여주는 역할. Json Object) o 응용계층: 사용자에게 제공할 기능 구현. 직접 구현보다는 도메인 모델에 로직 수행을 위임. o 도메인계층: 도메인의 핵심 로직을 구현. ex. 주문 도메인의 '결제 완료', '주문 총액 계산', '배송지 변경' 같은 로직 o 인프라스트럭쳐계층: 상세한 구현 기술을 다룸. ex. DB연동, HTTP Client, Kafka ... 위 아키텍처는 상위 -> 하위계층으로만 의존을 하도록 되어있는데, 이 경우에 두가지 문제점이 발생한다. (1) 테스트의 어려움 - 상위 계층을 테스트하기 위해서는 하위 계층이 구현되어..

책책책 2021.08.12

[Spring] 예외(Exception) 처리

토비의 스프링 4장: 예외 예외의 종류와 처리 기법 자바 개발을 하다보면 예외처리가 필요할 때가 있다. 여기서는 발생할 수 있는 예외 종류들과 처리 기법에 대해 알아보자. 예외 종류 (1) Error : 시스템의 비정상적인 에러가 발생한 경우로, 주보 VM에서 발생하기 대문에 애플리케이션 코드에서는 잡을 수 없다. (ex- OutOfMemoryError, ThreadDeath... ) (2) Exception : 애플리케이션 코드의 작업중에서 예외사항이 발생한 경우이다. -> 체크예외 일반적인 예외들이 여기에 포함된다. 자바에서 필수적으로 체크(try-catch)하도록 강요하는 예외들이다. -> 언체크예외 주로 개발자가 부주의하면 발생할 수 있는 예외들로, 체크가 필수적이진 않다. RuntimeExcep..

[Spring] 템플릿/콜백 패턴 (Template/Callback Pattern)

토비의 스프링 3장: 템플릿 템플릿/콜백 패턴 (Template/Callback Pattern) 앞에서 살펴본 전략패턴(Strategy Pattern)의 기본 구조에서 익명의 내부 클래스를 활용한 방식을 스프링에서는 템플릿/콜백 패턴이라고 한다. 전략패턴과는 다르게 보통 단일 메소드 인터페이스를 사용한다. 먼저 각각의 용어들을 살펴보자. o 템플릿(Template) : 만들어져 있는 틀을 템플릿이라고 하는데, 프로그래밍에서는 고정된 틀 안에 변경되는 부분을 넣어 사용하는 것을 말한다. o 콜백(Callback) : 다른 오브젝트에서 메소드로 사용되기 위해 전달되는 오브젝트를 말한다. 자바에서는 메소드를 파라미터로 전달하는 방법이 없기 때문에 메소드를 담은 오브젝트를 전달하는 것이다. (= function..

[Spring] 전략패턴(Strategy Pattern)

토비의 스프링 3장: 템플릿 전략패턴(Strategy Pattern) 이란 분리와 재사용을 위한 디자인 패턴 간단한 예제로 숫자 5개를 입력받아 덧셈, 뺄셈 결과를 출력하는 코드이다. 빨간색 박스 부분을 제외하고는 메소드마다 동일한 코드가 반복되고 있다. 이런 메소드가 여럿 있을 때, 매번 이전 코드를 Copy&Paste하면서 변하는 부분의 코드만 수정하는 방식으로 구현한다면? 공통된 구조에 수정이 생길 경우에 메소드의 갯수만큼 코드를 수정해줘야 하는 비효율성이 발생한다. 이런 경우에 메소드에서 변하지 않는 부분(Context)과 변하는 부분(Strategy)을 분리하여 변하지 않는 부분은 재사용하고, 변하는 부분의 코드만 목적에 따라 주입시켜주는 것이 바로 전략패턴이라고 할 수 있다. 이는 일정한 구조..

[Spring] 자바 테스팅 프레임워크 JUnit (기본편)

토비의 스프링 2장: 테스트 JUnit (자바 테스팅 프레임워크) 지난 게시글에서는 JUnit 단위테스트를 왜 쓰는지, 어떻게 쓰는지에 대해서 기본 개념을 알아보았다. (이전게시글 참고: 2021.07.16 - [책책책/토비의 스프링 3.1] - [Spring] 자바 테스팅 프레임워크 JUnit (개념편)) 어플리케이션 코드 뿐만이 아니라 테스트 코드도 리팩토링이 필요한데, JUnit의 기능들을 사용하며 이전 게시글에서 작성했던 코드를 개선해보자. 1) 반복적인 코드를 제거 : @Before / @After 어노테이션을 메소드에 써주면 각각의 @Test 메소드의 테스트 전 / 후에 공통기능들을 자동으로 호출하여 수행한다. 단, 자동으로 호출되기 때문에, 서로 주고 받을 정보들은 인스턴스 변수를 이용해야 ..

[Spring] 자바 테스팅 프레임워크 JUnit (개념편)

토비의 스프링 2장: 테스트 JUnit (자바 테스팅 프레임워크) 기존 웹 프로젝트에서는 테스트를 위해서 화면에서 값 입력 -> 기능 수행 -> 결과확인을 위해 뷰, 컨트롤러, 서비스 클래스 등... 모든 레이어의 개발이 완료되어야 한다는 어려움과 에러 발생시에 위치 파악 문제점이 있었다. 이를 해결하기 위해 테스트 대상을 분리하여 단위테스트(Unit Test)를 가능하도록 하는 자바의 테스트 지원도구가 바로 JUnit이다. JUnit의 작성 조건은 다음과 같다. 1)메소드는 Public으로 선언 2)메소드에 @Test 어노테이션 또한, JUnit에서 테스트 메소드의 실행순서는 보장되지 않는다. 예로 게시판 기능(Board 추가 / 조회)의 Dao를 테스트 하는 JUnit 코드를 작성해보자. (*프로젝트..

[Spring] 스프링 XML 설정

토비의 스프링 1장: 오브젝트와 의존관계 XML 설정 스프링에서는 ApplicationContext에서 Factory 자바 클래스를 이용하는 것 외에도 다양한 방법으로 DI 의존관계 설정정보를 만들 수 있다. 가장 대표적인것이 바로 XML이다. o 장점 - 텍스트파일이라 다루기 쉬움 - 별도의 빌드 작업이 없음 - 빠르게 변경사항을 반영할 수 있음 - 스키마나 *DTD를 이용한 포맷확인이 가능 *DTD(Document Type Definition) : XML파일 내부 .. 사이에 쓰여진 부분으로 XML 데이터를 validate. 자 그럼 이전 Factory 자바 클래스의 @Configuration, @Bean으로 나타냈던 부분을 XML로 변경해보자. - @Configuration은 으로 변경된다. - @..

[Spring] 의존관계 주입 (DI: Dependency Injection)

토비의 스프링 1장: 오브젝트와 의존관계 의존관계 주입 (DI: Dependency Injection) 이전게시글에서 살펴본 Ioc방식의 동작원리를 설명하는 용어가 바로 "의존관계주입(DI)"이다. (이전 게시글 참고:2021.06.05 - [책책책/토비의 스프링 3.1] - [토비] 제어의 역전 (IoC: Inversion of Control)) 외부로부터 생성된 오브젝트의 레퍼런스를 제공(주입)받고, 이를 통해 오브젝트간 의존관계가 생성되는 것을 말한다. 이는 의존(종속) 오브젝트 주입이라고도 불리며, 스프링 프레임워크의 차별화되는 특성이다. 다음 그림을 예시로 설계 모델 관점에서 의존관계를 설명하면, Solution 오브젝트는 IfSettingMaker를 통해 ASettingMaker를 사용하기 때..