본문 바로가기

전체 글

(28)
Spring WebFlux 리액티브 프로그래밍 개념 잡기 1 (기초, 용어) 시작하기 자바를 주 프로그래밍 언어로 선택한 개발자들이 웹 프로그래밍을 하기 위해선 자연스럽게 스프링 프레임웍 (Spring Framework) 을 사용 합니다. 프레임웍(Framework) 이란 레고와 같이 미리 만들어진 개별 컴포넌트를 내가 원하는 형태로 가공해 프러덕(Product) 을 만드는걸 도와 주는 일종의 뼈대와 같은 기능을 제공 합니다. 스프링 프레임웍은 2003년에 최초에 발표되고 나서 웹 프로그래밍 관련해 한번도 이 기본 뼈대가 변경되지 않았고 Spring MVC 를 기반으로 하는 방법만 제공 되었습니다. 하지만 리액티브(Reactive) 프로그래밍 방식을 지원하기 위해 이 구조가 처음으로 변경이 됩니다. 이제 스프링 프레임웍은 고전적인 형태의 Spring MVC 와 리액티브 프로그래밍..
널오브젝트 패턴 개요 자바에 변수가 선언되어 있고 여기에 값이 할당되지 않은 상태에서 변수를 참조하면 null pointer exception 이 발생 됩니다. 이게 의도했던 의도하지 않았던 unchecked exception 이 발생되기 때문에 시스템이 오류 상황을 미리 알기란 참 어려운 문제 입니다. 널오브젝트(NULL OBJECT) 패턴은 이와 같이 값이 null 일때 발생할 수 있는 문제를 최대한 방어하기 위한 패턴 입니다. 설명 먼저 계정 정보를 반환하는 service 함수가 있다고 가정해 보겠습니다. 이때 계정 정보가 없다면 null 을 반환 하는게 일반적인 함수 구현 방식인데 이때 null 을 반환 하는게 아니라 넬오브젝트를 반환하자는게 이 패턴의 핵심 입니다. 클래스다이어그램을 살펴보면 널오브젝트 Null..
모노스테이트 패턴 개요 모노스테이트 (MONOSTATE) 패턴은 싱글톤 (SINGLETON) 패턴과 같이 동일하게 객체의 단일성을 구성하기 위한 패턴 입니다. 하지만 싱글톤 패턴은 단일 인스턴스를 제공하는 구조를 제공하고 모노스테이트는 단일 상태를 가지는 행위를 제공 하는점이 차이점 입니다. 설명 모노스테이트 패턴은 변수를 static 으로 구성하지만 메소드를 static 로 구성 하지 않는 특징을 가지고 있습니다. 이는 모노스테이트 클래스나 모노스테이트를 상속 받은 하위 클래스에서 생성되는 모든 인스턴스는 동일한 상태 변수를 가지게 된다는 것을 의미 합니다. 인스턴스를 많이 생성 하더라도 결국 하나의 상태 값을 서로 공유 하는 것이죠. 즉 어떤 클래스라도 변수를 static 으로 구성하고 이를 사용 한다면 모노스테이트 ..
싱글톤 패턴 개요 싱글톤 (SINGLETON) 패턴은 아주 단순한 형태의 패턴 입니다. 주로 프로그램에서 단일 인스턴스만 가져야 하는 객체가 있을 수 있는데 싱글톤 패턴은 이를 강제 함으로써 싱글톤 패턴 객체의 인스턴스가 프로그램에 단 하나만 있다는 것을 보장해 줄 수 있게 됩니다. 설명 싱글톤 패턴은 프로그램에 단일 인스턴스가 존재 한다는 것을 보장해 주기 위해서 클래스에 private 생성자로 생성을 외부에서 할 수 없게 제한하고 static 인스턴스 변수와 static 조회 함수를 이용해 단일 인스턴스를 제공해 주면 됩니다. 싱글톤은 static 키워드 특징으로 인해 호출되기 전까진 메모리에 생성이 되지 않습니다. 또한 한번 메모리에 생성이 되면 인스턴스를 제거하기가 어렵다는 문제도 같이 포함 하고 있습니다. ..
파사드 패턴 개요 파사드 (FACADE) 패턴은 여러 인터페이스를 가지는 객체들에서 간단하고 구체적인 형태의 인터페이스를 제공하고자 할때 사용 됩니다. 예를 들어 A 클래스와 B 클래스에 있는 인터페이스를 조합해 Facade 클래스에서 새로운 인터페이스 제공 하는 형태로 구성 할때 사용 됩니다. Facade 클래스에서는 흐름을 제어하기 위한 비지니스 로직이 일정 부분 포함 될 수 있습니다. 설명 파사드 패턴은 일정 부분 프록시 (PROXY) 패턴과 유사해 보일 수도 있는데요. 프록시 패턴은 대상 클래스와 동일한 인터페이스를 제공하고 요청 받으면 바로 대상 클래스에게 전달 하는 형태로 구성 됩니다. 하지만 파사드 패턴은 대상 클래스의 인터페이스를 조합하여 일련의 흐름을 제공하는 비지니스 로직을 포함 하는 새로운 인터페..
스트래티지 패턴 개요 스트래티지 (STRATEGY) 패턴은 앞서 이야기 드린 템플릿 메소드 (TEMPLETE METHOD) 패턴과 비지니스 로직과 같은 공통으로 반복해서 사용 되는 부분을 세부 구현으로 부터 분리하는 패턴이라는 점에서 동일 합니다. 하지만 템플릿 메소드 패턴은 상속을 사용하고 스트래티지 패턴은 인터페이스를 구현 한다는 점이 차이점으로 볼 수 있습니다. 설명 앞서 템플릿 메소드 패턴에서 설명 드린 클래스 다이어그램과 스트래티지 패턴의 클래스 다이어그램을 비교해 차이점에 대해서 살펴 보겠습니다. 먼저 세부 구현에 대한 부분이 GrinderHandle 인터페이스로 분리되어 있는 것을 볼 수 있습니다. 그리고 실제 비지니스 로직을 가지고 있는 부분이 Grinder 클래스로 도출되어 있으며 Grinder 의 생성..
템플릿 메소드 패턴 개요 템플릿 메소드 (TEMPLETE METHOD) 패턴은 비지니스 로직이나 알고리즘과 같이 공통으로 반복해서 사용 되는 부분을 세부 구현으로 부터 분리하는 패턴 입니다. 이것은 스트래티지 (STRATEGY) 패턴과 접근 방식과 내용이 유사하지만 차이점은 템플릿 메소드 패턴의 경우 상속을 이용한다는 점과 스트래티지 패턴은 인터페이스를 이용한다는 점에서 차이가 있습니다. 설명 템플릿 메소드 패턴은 비지니스 로직에 해당하는 공통 부분을 미리 구현해 놓고 세부 구현 부분을 비워 두는 형태로 구성 됩니다. 템플릿 메소드가 정의된 클래스를 상속하는 하위 클래스에서 구현을 강제하기 위해 주로 추상 클래스 형태가 사용 되지만 빈 함수로 구성된 일반 클래스로 구성이 되어도 상관 없습니다. 하지만 이와 같이 템플릿 메소..
커맨드 패턴 개요 커맨드(COMMAND) 패턴은 디자인 패턴 중 가장 단순한 형태의 디자인 패턴 입니다. 커맨드 패턴은 대체로 인터페이스에 한개의 함수를 가지게 됩니다. 하지만 꼭 한개의 함수를 가지는 것은 아니며 경우에 따라 여러개의 함수로 구성 되기도 합니다. 설명 커맨드 패턴을 이용하면 어떤 것이 좋은지에 대해 의아할 수도 있겠지만 이를 활용하면 객체가 동작되기 위해 외부의 변수에 의존되는 현상을 막고 함수 자체를 캡슐화 하여 행위 자체에 집중할 수 있게 만들어 줍니다. 즉 클래스 자체를 커맨드의 함수로 추상화하여 바라 보게 해줄 수 있다는 것 이죠. 이것은 호출하는 대상이 커맨드의 상세 동작에 대해 알지 못하더라도 단지 이벤트에 의해 해당 커맨드를 실행 시키기만 하면 된다는 것을 의미 합니다. 그리고 호출 당..