설계 9

클린코드 9장 (클래스), 10장 (시스템), 11장(창발성), 12장(동시성)

클래스 내부에서 동작하는 변수나 유틸리티는 protected로 선언하여 테스트에 사용하기도 한다. 클래스에 기본 규칙은 작게 만드는 것. 많을수록 클래스에 대한 책임이 너무 커진다. SPR을 지키기 위해 클래스가 너무 많아지면 사용에 더 어렵다고 우려할 수 있으나 하나의 여러 책임을 가지고 있는 클래스를 사용하는 것 보다 더 직관적 이므로 사용하기 더 편하다. 클래스 내부에 인스턴스 변수가 많아 진다는건 결국 클래스 내부에 함수와 인스턴스 변수들 사이에 응집도가 높아진다는 뜻이다. 이럴 수록 클래스를 분리해야 한다는 걸 의미한다. 긴 함수를 쪼갠다 → 작은 함수 여러 개로 만든다. → 몇몇 변수와 몇몇 함수만 사용 되는 경우가 보이면 클래스로 쪼갠다. 특정 기능이 변경 될 때 마다 코드가 변경되어야 하는..

JAVA/클린코드 2020.07.10

마이크로서비스 조립성 및 정리

마이크로서비스의 조립성은 서비스 디자인 원칙의 하나이다. 서비스를 어떻게 디자인해서 효율적으로 할 수 있는 원칙을 이야기하며 크게 두 가지 요소로 나뉜다. 1. 오케스트레이션(Orchestration)- 여러개의 서비스를 모아 하나의 완전한 기능을 만드는 서비스가 마이크로 서비스이다. 그럴 경우 중앙에서 두뇌 역할을 하는 오케이스트레이터가 여러 서비스를 묶어서 조율할 수 있어야 한다. 이 오케스트레이터는 외부에 노출되는 접점이다.- 예를들어 주문이라는 서비스가 들어오면 고객 서비스, 상품 서비스, 배송 서비스에 역할을 분배하여 요청하는 중재자를 의미한다. 2. 연출 (Choreography)- 특정한 서비스가 실행되면 메시키큐에 producer가 이벤트를 넣고 그 곳을 바라보면서 대기하던 consumer..

프로그래밍 코드 작성 시 주요원칙

단일 책임 원칙 (Single Responsibility Principle) SRP -> 객체는 오직 하나의 책임만을 가져야한다. -> 객체에서 책임이라고 한다면 객체의 역할을 의미한다. 좋은 설계란 => 기본적으로 시스템에 새로운 요구사항이나 변경이 있을 때 가능한 한 영향 받는 부분을 줄여야 한다. 프로그램의 요구사항은 계속해서 변경되기 마련이다. 이를 위해서 항상 변경이 가능하도록 조치가 되어있어야 하며, 이런 시스템이 변화에 잘 적용되도록 설계되어 있는지 확인 하는 것을 회귀 테스트(regression)라고 한다. 개방폐쇄원칙 (Open-Closed principle) OCP - 기존의 코드를 변경하지 않으면서 기능을 추가할 수 있도록 설계가 되어야 한다. 리스코프 치한원칙 - 자식클래스는 최소한..

클래스와 인터페이스 - 규칙 17 계승을 위한 설계와 문서를 갖추거나, 그럴 수 없다면 계승을 금지하라.

16번에서 정의한 것처럼 계승 (이하 상속)을 받을 경우 문제를 야기할 수 있다. 그렇기에 이를 예방하기 위해서 문서를 잘 갖추고 있어야 하는데 문서를 갖춘다는 것은 어떤 의미일까? 이는 재정의 가능 메서드를 내부적으로 어떻게 사용하는지(self-use)반드시 남기라는 것이다. -> 어떤 재정의 가능 메서드를 어떤 순서로 호출하는지, 그리고 호출결과가 추후 어떤 영향을 미치는지 문서로 남기라는 의미이다. 여러 문제를 야기할 수 있기에, 계승에 맞도록 설계하고 문서화하지 않은 클래스에 대한 하위 클래스는 만들지 않아야 한다. 출처 : 조슈아 블로크, 『 Effective Java 2/E』, 이병준 옮김, 인사이트(2014.9.1), 규칙17 인용.

JAVA/Effective Java 2018.05.29

스트래티지 패턴 (Strategy Pattern)

공통적인 특징을 가진 객체를 만들 경우 우리는 대게 다음과 같이 추상클래스나 인터페이스를 만들어 놓고, 그 것을 상속받아 객체를 구현한다.1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465// 추상 클래스package com.wedul.study.strategy; public abstract class Animals { public Animals() {} private String name; public Animals(String name) { this.name = name; } public void eat() { System.out.pri..

JAVA/Design Pattern 2018.05.28

엔티티 관계와 속성 추출 방법

새로운 속성으로 주 식별자 선정의 장 단점대출일, 회원번호, 도서관리번호를 주식별자로 가져야 하는 경우, 너무 많은 속성이 주 식별자가 되어 구별하기 어려울 때, 대출 번호라는 새로운 주 식별자를 도입할 수 있다.-> 하지만 새로운 주 식별자를 도입한경우, 다음과 같은 문제가 발생할 수 있다.-> 대출번호가 키가 되는경우 대출일, 회원번호, 도서관리번호가 중복된 데이터가 있을 수 있다.-> 새로운 개념의 속성을 만들어 주식별자로 지정할 경우 단점과 장점이 있으니 잘 사용해야 한다. 필요없는 속성을 주 식별자로 지정하는 경우.필요없는 속성이 주 식별자가 되는 경우, 문제가 발생할 수 있다.제품번호와 제품가격이 주 식별자가 되었을 때, 제품번호별로 제품가격은 하나여야 하는데 서로 다른 데이터가 존재할 수 있..

정규화를 고려한 모델링

정규화정규화는 ERD 내에서 중복을 찾아 제거해 나가는 과정을 말한다. 관계형 데이터베이스 모델의 기본은 동일한 정보는 한곳에서만 관리하는 것이다. 제 1정규화엔티티에서 하나의 속성이 복수의 값을 갖도록 설계 되었을 때 이를 단일 값을 갖도록 하는 것이다. 정규화 전.사원번호 취미1001 등산, 낚시1002 테니스, 등산 정규화 후사원번호 취미1001 등산1001 낚시1002 테니스1002 등산 다음과 같은 사유도 동일하게 제 1정규화 대상이 된다.사원번호 취미1 취미2 취미31001 등산 낚시 1002 테니스 1003 테니스 운동 독서 해당 테이블 구조는 단일 값을 가지고 있기 때문에 아무 문제가 없어보이지만, 동일한 성격을 가지는 데이터를 다른 속성에 저장하는 것도 문제가 된다. 제 2정규화제 2정규..

설계시 도메인 고려 방법 및 완성된 ERD 검토

도메인도메인은 엔티티의 속성들이 가질 수 있는 값들의 집합.DBMS에서 도메인이란 엔티티와 속성에 대응하는 테이블의 컬럼에 대한 데이터 타입과 길이를 의미 도메인 추출 및 데이터 타입 추출방법1. 테이블에 구성될 컬럼들을 나열한 후 테이블의 도메인을 먼저 지정한다.대출일 - 날짜우수회원여부 - 예아니오회원이름 - 회원이름 2. 도메인에 맞는 데이터 타입을 지정한다.대출일 - date우수회원여부 - char(1)회원이름 - varchar(20) ERD 검토 1. 엔티티 검토 1) 엔티티가 적절히 구성되었는지의 여부 2) 엔티티의 주 식별자가 적절히 선정되었는지 여부 -> 주식별자에 불필요한 요소가 없는지 -> 인스턴스의 유일성을 보장해 주는지 3) 유사한 내용을 관리하는 엔티티가 없는지 -> 분리, 통합이..

REST API 효율적인 설계 방법

REST 구성 구성 요소표현방법내용ResourceHTTP URI자원을 정의VerbHTTP Method자원에 대한 행위를 정의RepresentationsHTTP Message Pay Load자원에 대한 행위의 내용을 정의ex) Resource : /wedul/member Verb : HTTP POST Representations : { "id" : "wedul" }REST 특성 1. 유니폼 인터페이스 -> HTTP 표준만 따르면 어떠한 기술이든 사용가능 (HTTP/JSON, HTTP XML) 2. 무상태성 (STATELESS) 3. 캐시 가능 -> 웹 캐시, CD을 이용한 캐싱 가능 4. 자체 표현 구조 (SELF-DESCRIPTIVENESS) -> API 내용만 보고도 별도의 문서 없이도 쉽게 이해가 가..

web/Web 2018.05.27