평소에 우테코를 하고싶다는 생각만을 가지고 살았던것 같다. 어느 날 6기 모집글을 보게 되었고 급발진에 가깝게 지원하게 되었으며 4주간 회고록겸 성장일기를 써보도록 하겠다. 프리코스 지난 기수인가부터 지원자 모두가 4주간 프리코스를 경험해볼 수 있게 바뀌었다. 이는 '좋은 개발자'를 많이 양성하기 위한 우테코의 취지에 맞추어 변경한 것이라고 한다. 확실히 지난 기수들의 회고록을 보다보면 최종 합격을 했던 하지 못했던 공통적으로 프리코스 기간은 큰 도움이 되었다고 한다. 나도 4주간 치열하게 살아가며 스스로의 성장을 도모해보겠다. 이번 프리코스에서 커뮤니티는 '디스코드'를 활용한다. 아름답지 아니한가.... 모두가 경쟁자지만 서로 배움을 추구하고 배운게 있다면 나누고자하는 모습이다. 내가 정말 추구하던 개..
애그리거트 애그리거트는 모델을 이해하는 데 도움을 줄 뿐만 아니라 일관성을 관리하는 기준도 된다. 모델을 보다 잘 이해할 수 있고 애그리거트 단위로 일관성을 관리하기 때문에, 애그리거트는 복잡한 도메인을 단순한 구조로 만들어준다. 애그리거트는 관련된 모델을 하나로 모았기 때문에 한 애그리거트에 속한 객체는 유사하거나 동일한 라이프 사이클을 갖는다. 애그리거트에 속한 구성요소는 대부분 함께 생성하고 함께 제거한다. 애그리거트는 경계를 갖는다. 한 애그리거트에 속한 객체는 다른 애그리거트에 속하지 않는다. 애그리거트는 독립된 객체 군이며 각 애그리거트는 자기 자신을 관리할 뿐 다른 애그리거트를 관리하지 않는다. 예를 들어 주문 애그리거트는 배송지를 변경하거나 주문 상품 개수를 변경하는 등 자기 자신은 관리하..
챕터 02를 읽으면서 내가 생각하기에 중요한 문장들을 정리하겠다. 객체지향 객체지향은 객체를 지향하는 것이다. 두 가지를 머릿속에 넣어두자. 1. 어떤 클래스가 필요한지를 고민하기 전에 어떤 객체들이 필요한지 고민하자. 2. 객체를 독립적인 존재가 아니라 기능을 구현하기 위해 협력하는 공동체의 일원으로 봐야 한다. 클래스의 내부와 외부 클래스의 내부와 외부를 구분해야 하는 이유는 무엇일까? 그 이유는 경계의 명확성이 객체의 자율성을 보장하기 때문이다. 그리고 더 중요한 이유는 프로그래머에게 구현의 자유를 제공하기 때문이다. 객체지향의 장점 객체지향의 장점은 객체를 이용해 도메인의 의미를 풍부하게 표현할 수 있다는 것이다. 따라서 의미를 좀 더 명시적이고 분명하게 표현할 수 있다면 객체를 사용해 해당 개념..
도메인 영역의 주요 구성 요소 앞선 글에서 도메인 영역은 도메인의 핵심 모델을 구현한다고 하였다. 도메인 영역의 모델은 도메인의 주요 개념을 표현하며 핵심 로직을 구현한다. 1장에서 나왔던 엔티티와 밸류 타입은 도메인 영역의 주요 구성 요소이다. 이 두 요소와 함께 도메인 영역을 구성하는 요소를 아래의 표와 함께 살펴보자. 요소 설명 엔티티 ENTITY 고유의 식별자를 갖는 객체로 자신의 라이프 사이클을 갖는다. 주문, 회원, 상품과 같이 도메인의 고유한 개념을 표현한다. 도메인 모델의 데이터를 포함하며 해당 데이터와 관련된 기능을 함께 제공한다. 밸류 VALUE 고유의 식별자를 갖지 않는 객체로 주로 개념적으로 하나인 값을 표현할 때 사용된다. 배송지 주소를 표현하기 위한 주소나 구매 금액을 위한 금액..
이 글은 챕터 02 (아키텍처 개요)를 중점으로 다룰 예정이며, 스프링부트와 관련되어 추가 설명을 할 것이다. 네 개의 영역 표현, 응용, 도메인, 인프라스트럭쳐는 아키텍처를 설계할 때 출현하는 전형적인 네 가지 영역이다. 스프링부트에서 네 가지 영역에 대한 예시는 이렇다. 표현 영역 - Controller 응용 영역 - Service 도메인 영역 - Entity 인프라스트럭쳐 영역 - Repository 말로 표현해보자면 표현 영역 - 사용자의 요청을 받는 위치 응용 영역 - 시스템이 사용자에게 제공해야 할 기능을 구현하는 위치 도메인 영역 - 도메인 모델을 구현 인프라스트럭쳐 영역 - 구현 기술에 대한 것을 다룸 (ex. RDBMS 연동처리) 도메인, 응용, 표현 영역은 구현 기술을 사용한 코드를 직..
들어가기 앞서 로버트 마틴의 소프트웨어 모듈이 가져야하는 세 가지 기능에 관한 설명을 적고 시작하겠다. 모든 소프트웨어 모듈에는 세 가지 목적이 있다. 첫 번째 목적은 실행 중에 제대로 동작하는 것이다. 이것은 모듈의 존재 이유라고 할 수 있다. 두 번째 목적은 변경을 위해 존재하는 것이다. 대부분의 모듈은 생명주기 동안 변경되기 때문에 간단한 작업만으로도 변경이 가능해야 한다. 변경하기 어려운 모듈은 제대로 동작하더라도 개선해야 한다. 모듈의 세 번째 목적은 코드를 읽는 사람과 의사소통하는 것이다. 모듈은 특별한 훈련 없이도 개발자가 쉽게 읽고 이해할 수 있어야 한다. 읽는 사람과 의소소통할 수 없는 모듈은 개선해야 한다. 정리해보자면 모든 모듈은 제대로 실행돼야 한다. 모든 모듈은 변경이 용이해야 한..
객체지향이란 무엇인가? 배워야 할게 산더미인 나에게 대답하기 너무 어려운 질문이다. 지금 글을 쓰고 있는 이 순간에도 객체지향이란 무엇일까 생각하며 멍 때리는 중이다. 그나마 이 책을 한번 읽고나서 배운 거에 대해 적어보고자 한다. 잘 모르겠는 질문에 대한 답변대신 일단 객체지향이라고 하면 떠오르는 키워드를 나열해 보자 캡슐화, 다형성, 클래스, 상속, 추상화,,,, 학부 객체지향 수업 때 지겹도록 들은 말이다. 그리고 항상 따라오는 설명을 적어보겠다. 붕어빵틀은 클래스이며 붕어빵은 객체(인스턴스)이다. 사과, 바나나, 메론은 '과일'로 추상화할 수 있다. 또는 '객체지향이란 현실세계의 모방이다'도 심심찮게 볼 수 있다. 서론이 길어지는 거 같으니 하고 싶은 말부터 하겠다. 객체지향은 현실세계의 모방이 ..