자바 27

[leetcode] Product of Array Except Self

https://leetcode.com/problems/product-of-array-except-self/ Product of Array Except Self - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 인덱스 위치의 요소를 제외한 모든 요소를 곱한 결과를 구하는 문제입니다. [1,2,3,4] 배열이 주어졌다면, [ 2*3*4, 1*3*4, 1*2*4, 1*2*3 ]으로 반환합니다. 제가 구현한 코드입니다. 저는 모든 요소를 곱한 뒤, 각 요소로 나눠주면 ..

[DDD] Entity와 Value Object

Entity 엔티티는 식별자(identity)를 가지는 객체(Object)입니다. 예를 들어 도서는 ISBN을 식별자로 같은 Entity가 될 수 있습니다. 엔티티는 식별자를 갖기 때문에, Equals 비교에서 식별자가 값이 같으면 같은 객체로 인식합니다. 엔티티는 데이터 변경 이력을 관리하는 대상입니다. 즉 시간이 지남에 따라 정보를 추적할 수 있는 객체입니다. 식별자 생성 방법 채번 규칙 날짜값+일련번호와 같이 정해진 규칙에 따라 식별자를 만드는 방식 UUID(Universally unique identifier) java.util.UUID 클래스를 이용해서 식별자를 만드는 방식 직접 입력 회원 ID나 전화번호, 이메일 등과 같이 사용자가 입력하는 방식 일련번호 DB의 auto_increment 칼럼..

JAVA/Architecture 2022.01.30

의존성 주입 Dependency Injection

의존성 주입 Dependency Injection 의존성 주입이란, 사용하는 객체를 클래스 내부에서 직접 생성/정의하지 않고, 외부에서 독립적으로 생성된 객체를 전달받아 사용하는 것을 의미한다. 런타임(실행) 시점에 외부에서 실제 구현 객체를 전달받아 사용하는 것을 의미한다. 의존성 주입 방법 생성자 주입 Constructor Injection 생성자를 이용해 객체를 주입받는 방법을 말한다. 컴파일 타임에 의존성을 확인할 수 있다. 객체가 올바르게 생성되기 위해서, 필수적으로 주입받아야 할 객체를 명시할 수 있다. public class 컴퓨터(){ private final 키보드 키보드; private final 모니터 모니터; //생성자 constructor public 컴퓨터(키보드 keyborad..

JAVA/Architecture 2022.01.11

Design Pattern 디자인 패턴 Visitor Pattern 방문자 패턴

Visitor Pattern 방문자 패턴 행동 패턴으로, 알고리즘이 작동하는 객체와 알고리즘을 분리하는 패턴입니다. 방문자 객체가 알고리즘이 작동하는 객체의 알고리즘을 관리합니다. Visitor Pattern 방문자 패턴이 적합한 경우 복잡한 객체 구조의 모든 요소에 대해 기능을 수행해야 하는 경우. 부수적인 비즈니스 로직을 정리해야 하는 경우 기능이 일부 클래스에서만 의미가 있고, 다른 클래스에서는 의미가 없을때. 장단점 장점 기존 객체를 수정하지 않고, 다른 객체와 함께 동작하는 기능을 추가할 수 있습니다. (개방폐쇄원칙) 같은 기능을 다양한 버전으로 관리할 수 있습니다. (단일책임원칙) 방문자 객체가 유용한 정보를 축적할 수 있습니다. 이 정보는 복잡한 객체 구조를 탐색하고, 이 구조의 각 객체에 ..

JAVA/DesignPattern 2022.01.03

Design Pattern 디자인 패턴 Template Pattern 템플릿 패턴

Template Pattern 템플릿 패턴 행동 패턴으로, 상위 클래스(인터페이스, 추상클래스)에서 알고리즘의 골격만 정의하고, 하위 클래스에서 재정의(Override)할 수 있도록 하는 패턴입니다. Template Pattern 템플릿 패턴이 적합한 경우 기존 알고리즘에서 몇가지 기능만 추가한 객체를 만들고 싶은 경우 (몇가지 기능이 추가된 하위 클래스를 생성) 서로 조금씩만 다른 클래스가 여러개 있는 경우 (공통의 기능을 템플릿으로 묶어내어 코드의 중복을 줄일 수 있음) 장단점 장점 많은 기능 중에서 몇가지만 재정의하여 객체를 생성할 수 있습니다. 다른 객체가 받는 영향을 줄일 수 있습니다. 중복되는 코드를 상위 클래스로 옮길 수 있습니다. 단점 몇몇 객체들은 알고리즘 구조를 생성하기 어려울 수 있습..

JAVA/DesignPattern 2021.12.31

Design Pattern 디자인 패턴 Startegy Pattern 전략 패턴

Startegy Pattern 전략 패턴 행동 패턴으로, 런타임에 객체의 행동이나 알고리즘을 결정할 수 있는 패턴입니다. 다양한 전략을 나타내는 객체와 전략 객체에 따라 행동이 다른 컨텍스트 객체를 생성합니다. Startegy Pattern 전략 패턴이 적합한 경우 런타임에 객체의 기능이나 알고리즘을 변경하고 싶은 경우 몇개의 행동(메소드)만 다른, 비슷한 객체가 많은 경우 비즈니스 로직에서 분리하고 싶은 경우 클래스에 알고리즘이나 기능을 변환하기 위한 대량의 조건 연산이 있는 경우 장단점 장점 런타임에 객체 내부의 알고리즘을 바꿀 수 있습니다. 알고리즘을 사용하는 코드에서 알고리즘을 구현하는 세부 기능을 분리할 수 있습니다. 합성(Composition)으로 상속(inheritance)을 대체할 수 있습..

JAVA/DesignPattern 2021.12.30

Design Pattern 디자인 패턴 State Pattern 상태 패턴

State Pattern 상태 패턴 행동 패턴으로, 상태변화에 따라 클래스의 행동을 바꾸는 패턴입니다. 상태 패턴에서는 다양한 상태를 나타내는 객체와 상태 객체가 변경됨에 따라 동작이 달라지는 컨텍스트 객체를 생성합니다. State Pattern 상태 패턴 사용이 적합한 경우 현재 상태에 따라 행동(기능)이 변화되는 객체인 경우, 상태의 가짓수가 많고, 상태가 빈번하게 변경되는 경우 클래스의 상태 필드에 따라서 기능을 변경하는, 수많은 조건문으로 코드가 복잡해진 경우 상태 필드를 변경하는 조건 코드가 많이 중복해서 사용되고 있는 경우 장단점 장점 상태를 관리하는 로직을 클래스 객체에서 분리해 관리할 수 있습니다. (단일책임원칙) 기존 상태 클래스와 컨텍스트 객체의 수정 없이 새로운 상태를 추가할 수 있습..

JAVA/DesignPattern 2021.12.29

Design Pattern 디자인 패턴 Observer Pattern 옵저버 패턴

Observer Pattern 옵저버 패턴 행동 패턴으로, 1대다 (1 : N, one-to-many) 관계에서 사용됩니다. 객체 하나를 수정했을때, 연관된 다른 객체들에게 알림을 자동적으로 보내는 패턴입니다. Observer Pattern 옵저버 패턴이 적합한 경우 한 객체의 변경사항이 다른 객체들에게도 전달되어야 하는 경우, 다른 객체들이 사전에 변경사항을 알아채지 못하거나, 동적으로 변경되는 경우 몇 개의 오브젝트가 다른 오브젝트들에 의해 감시되어야 하는 경우 장단점 장점 publisher(알림을 보내는 객체) 코드를 수정하지 않고 새로운 subscriber(observer) 를 추가할 수 있습니다. (개방/폐쇄원칙) 런타임에 객체의 관계를 설정할 수 있습니다. 단점 Observer들은 무작위 순서..

JAVA/DesignPattern 2021.12.28

Design Pattern 디자인 패턴 Memento Pattern 메멘토 패턴

Memento Pattern 메멘토 패턴 행동 패턴으로, 객체의 과거 버전을 저장하기 위해 사용됩니다. 프로세스가 진행되는 중에 원하는 지점에서 객체를 저장하고, 나중에 저장한 지점으로 복원할 수 있습니다. (Undo) Memento Pattern 메멘토 패턴 사용이 적합한 경우 객체의 상태 변화 이력을 저장하고 싶은 경우 (스냅샷을 남기고 싶은 경우) field나 getter/setter를 이용해서 객체에 직접 접근하여 캡슐화가 손상된 경우 장단점 장점 캡슐화는 손상시키지 않고 객체의 상태 변화 이력을 저장할 수 있습니다. 객체의 상태 변화 이력을 관리함으로써 객체의 코드를 단순하게 할 수 있습니다. 단점 메멘토 패턴이 너무 자주 사용되면, RAM 사용량이 많을 수 있습니다. 과거 이력을 삭제할 수 있..

JAVA/DesignPattern 2021.12.27