들어가기 전 이 글은 백기선님의 GOF 강의를 복습하며 작성한 글입니다. 옵저버 패턴 GOF : 다수의 객체가 특정 객체 상태 변화를 감지하고 알림을 받는 패턴 Component Subject 여러 Observer를 가지고 있음. Observer를 등록 / 해지할 수 있는 기능 제공. Subject는 자신의 상태를 변경할 수 있는 메서드를 제공함. Subject는 상태가 변경되면, 자신에게 등록된 Observer를 순회하면서 Observer가 제공하는 메서드를 모두 호출함. (알림) Observer 인터페이스 하나 제공함. Observer가 이벤트를 받아서 해야할 일을 정의함. 옵저버 패턴을 적용하면 Pub - Sub 패턴을 쉽게 구현할 수 있음. Polling 구조를 적용하기 어려울 때, Pub - S..
들어가기 전 이 글은 백기선님의 GOF 디자인 패턴 강의를 공부하며 작성한 글입니다. 메멘토 패턴 GOF : 캡슐화를 유지하면서 객체 내부 상태를 외부에 저장하는 방법. 클라이언트는 복원하고 싶을 때, 외부에 저장된 객체 내부 상태 정보에 어떤 필드가 있는지 몰라도 됨. 이 정보를 이용해 복원도 할 수 있게 됨. Component Originator 저장하고자 하는 본래의 상태를 의미함. CareTaker Originator의 내부 정보를 가지고 와서 저장하고 있음. 이 때 Originator의 내부 정보를 Memento 타입으로 가지고 있음. Originator의 내부 정보를 CareTaker를 통해서 복원할 수 있음. Memento Originator의 내부 정보 추상화한 객체. Memento에 Or..
들어가기 전 CascadeType.ALL은 생애주기를 함께 하는 엔티티를 다루는데 있어서는 좋은 도구가 될 수 있다. 그렇지만 CascadeType.ALL을 사용할 때 발생할 수 있는 문제점은 잘 파악해야 필요한 위치에 사용할 수 있게 될 것 같다. Cascade.ALL 동작 방식 CascadeType.ALL은 부모 엔티티의 영속화 상태가 변할 때, 그 변화가 자식 엔티티에도 고스란히 전파되는 것을 의미한다. 예를 들어 아래 코드에서는 다음과 같이 동작하는 것을 상상해 볼 수 있다. Team을 영속성 컨텍스트에 영속화 한다 → Team과 연관된 Member들도 모두 영속화 된다. Team이 영속성 컨텍스트에서 삭제된다 → Team과 연관된 Member들도 영속성 컨텍스트에서 삭제된다. @Entity @G..
Erlang에서의 프로세스 프로세스는 함수에 불과함. 프로세스는 함수를 실행하고, 함수가 끝나면 사라짐. 프로세스는 단순한 함수이지만, '메세지 사서함' 같은 숨겨진 상태도 있음. 새 프로세스를 시작하기 위해 Erlang은 단일 함수를 가져와 실행하는 함수 spawn/1을 제공합니다: # SMP 24개 사용 PS C:\dev\rebar\myapp\src> erl +S 24 Erlang/OTP 26 [erts-14.1] [source] [64-bit] [smp:24:12] [ds:12:12:10] [async-threads:1] [jit:ns] # SMP 기본값 PS C:\dev\rebar\myapp\src> erl Erlang/OTP 26 [erts-14.1] [source] [64-bit] [smp:1..
7.1 특정 구현체에 의존했을 때 단점 프로그램에서 객체 간의 의존을 막을 수 있는 방법은 없다. 그렇지만 객체 간의 의존을 약화시키는 방법은 있다. 객체끼리 강하게 결합하면 한 객체가 변화할 때 마다 다른 객체가 변화해야하는 것을 의미한다. 의존 관계 제어를 통해 객체 간의 결합, 특히 비즈니스 로직과 기술적 요소를 분리해서 어플리케이션을 유연하게 만들 수 있다. 7.2 객체 간의 의존이란 무엇인가? 한 객체가 다른 객체를 알고 있는 것만으로도 '의존'이 발생한다고 볼 수 있다. Solution 클래스는 Comparator, Stream 클래스에 의존함. Solution 클래스는 MyClass에 의존함. import java.util.Comparator; import java.util.stream.St..