본문 바로가기

분류 전체보기333

객체 생성 패턴- 단일체 - 참조: GoF의 디자인 패턴 - 참조: Effective Java 2/E - 단일체(Singleton) 패턴 단일체 패턴은 한 개의 클래스 인스턴스만을 갖도록 보장하며, 이에 대해 접근점을 제공한다. 보통 단일체 패턴의 예로는 창 관리자나 파일 시스템과 같은 예가 있다. 가장 단순하게 구현하려면 전역 변수를 선언하면 되지만 이 방식은 문제가 상당히 많다. 단일체 패턴을 구현할 때에는 클래스가 자체적으로 인스턴스 접근방법을 관리하도록 한다. 위의 그림은 단일체 패턴의 구조를 UML로 나타낸것이다. 단일체 패턴은 참여자가 1개밖에 존재하지 않는다. Singleton: Instance() 연산을 정의하여, 유일한 인스턴스로 접근할 수 있도록 한다. 이때 Instance는 클래스 연산(static)이다. 단.. 2021. 4. 12.
UML - 액티비티 다이어그램 - 플로우 끝과 조인조건 - 이 글은 UML Distilled (마틴 파울러)책을 기반으로 작성하였습니다. - token 이미지 출처: https://www.ionos.com/digitalguide/websites/web-development/uml-activity-diagram/ - 플로우 끝 확장 영역처럼 토큰이 여러개 있는 경우 전체 액티비티가 끝나지 않았어도 플로우를 멈춰야 하는 경우가 있다. 플로우 끝은 전체 액티비티를 중단하지 않으면서 특정한 플로우를 끝내는것을 표현한다. 기사의 출판이 거부되면 토큰은 플로우끝에서 파괴된다. 하지만 나머지 액티비티는 계속 진행된다. 원래는 주제리스트를 여러개의 핀으로 표현할 수 있지만, StarUML 5.0 무료버전에서는 확장영역과 핀을 지원하지 않는듯하다. 아래에서 Expansion.. 2021. 4. 12.
UML - 액티비티 다이어그램 - 플로우와 엣지 - 이 글은 UML Distilled (마틴 파울러)책을 기반으로 작성하였습니다. - 커넥터 diagram 출처: https://forum.plantuml.net/2407/connector-in-activity-diagram - 플로우와 엣지 UML 2 에서는 두 액션의 연결을 플로우와 엣지라고 표현하며 이 둘은 같은 의미이다. 보통의 경우에는 아래처럼 두 액션을 화살표로만 이어도 충분하다. - 커넥터 복잡한 다이어그램에서는 선을 연결하기 힘든 경우가 있는데 이때 커넥터를 활용할 수 있다. 들어오는 플로우와 나가는 플로우에 하나씩 쌍을 이루며 같은 이름을 가져야 한다. 하지만 화살표로 표현하는 경우보다는 시각적인 인지력이 떨어질 수 있기 때문에 특별한 경우가 아니면 사용을 자제해야 한다. StarUML .. 2021. 4. 12.
객체 생성 패턴- 프로토타입 - 참조: GoF의 디자인 패턴 - 참조(refactoring.guru): https://refactoring.guru/design-patterns/prototype - 참조(refactoring.guru - java example): https://refactoring.guru/design-patterns/prototype/java/example - 프로토타입(Prototype) 패턴, 원형 패턴 원형이 되는 인스턴스를 사용하여 생성할 객체의 종류를 명시하고, 이렇게 만든 견본 인스턴스를 복사하여 새로운 객체를 생성한다. 또한 코드가 클래스에 의존하지 않고, 객체를 복사할 수 있다. 시나리오: 그래픽을 편집하는 프레임워크가 있다고 해보자. 이 프레임워크를 기반으로 음표, 쉼표, 보표(악보의 5줄)를 표.. 2021. 2. 25.
UML - 액티비티 다이어그램 - 시그널 - 이 글은 UML Distilled (마틴 파울러)책을 기반으로 작성하였습니다. - 시그널 시간 시그널과 수신&전송 시그널이 존재한다. 시간 시그널은 시간흐름에 따라 발생하는 시그널이며, 외부 프로세스로 부터 이벤트를 수신하는 수신 시그널, 메시지를 보내고 더 진행하기전 응답이 올 때 까지 기다려야 할 때 유용한 송신 시그널이 있다. - 시간 시그널(time signal) 시간 시그널은 시간의 흐름에 따라 발생하는 시그널이라고 하였다. StarUML 5.0 커뮤니티 버전에서는 Time Signal이 존재하지 않는다. 아래 다이어그램 중에서 모래시계 마크로 "every monday" 라고 되어있는것이 바로 시간 시그널이다. - 수신 시그널 수신 시그널은 외부 프로세스로부터 이벤트를 수신하는것을 나타낸다... 2021. 2. 22.
객체 생성 패턴- 팩토리 메소드 - 참조: GoF의 디자인 패턴 - Template method: https://en.wikipedia.org/wiki/Template_method_pattern - 팩토리 메소드 객체를 생성하기 위한 인터페이스를 정의하지만, 어떤 클래스의 인스턴스를 생성할지에 대한 결정은 서브클래스가 내린다. 팩토리 메소드의 예제를 검색하면 흔히 메소드의 매개변수의 타입에 따라 반환하는 객체가 다른 예제가 많이 나온다. 그래서 흔히 객체를 매개변수타입에 따라 다르게 반환하는것이 팩토리 메소드라고 생각한다. 물론 나도 예전에는 그렇게 생각했다. 하지만 위의 정의를 다시한번 생각해보면 팩토리 메소드의 핵심은 매개변수에 따라 다른 인스턴스를 반환하는것이 아님을 알 수 있다. 이 패턴의 주요핵심은 어떤 인스턴스를 생성할지에 .. 2021. 2. 21.
UML - 액티비티 다이어그램 - 분해와 파티션 - 이 글은 UML Distilled (마틴 파울러)책을 기반으로 작성하였습니다. - 액션 위의 다이어그램에서 배송 로직을 아래처럼 독립적인 액티비티로 정의할 수 있다. 위처럼 독립적인 액티비티로 정의한것을 액션으로 부른다. 아래 다이어그램에서 주문 배송 오른쪽 하단에 SubMachine을 포함하는 표시가 생겼다. 사실 UML 에서 하위 액티비티를 나타내는 다이어그램에는 갈퀴 심볼을 나타내야 한다. 하지만 StarUML 5.0 (무료버전) 에서는 갈퀴 심볼은 없는 것 같다. 이것을 다르게 표현할 수도 있다. 송장 발송을 보면 클래스명::메소드명 형식으로 나타내면 메소드 호출로서 이를 표현할 수 있다. - 파티션 위의 다이어그램들을 살펴보면 어떤 액티비티들이 일어나는가는 잘 보이지만 누가 하는지 보이지 않.. 2021. 2. 17.
UML - 액티비티 다이어그램 - 이 글은 UML Distilled (마틴 파울러)책을 기반으로 작성하였습니다. - 액티비티 다이어그램 액티비티 다이어 그램은 순차로직, 업무절차, 워크 플로우를 기술하는 방법이다. 플로우차트와 비슷하지만 액티비티 다이어그램은 병렬 행동을 지원한다. 액티비티 다이어그램은 위의 그림처럼 생겼다. 위에서 아래의 방향으로 차례차례 요소들을 살펴보자. '초기노드' 액션에서 시작하여 주문 접수 액션을 수행한다. 초기노드액션은 시작점이 되며 액션은 액티비티 다이어그램의 아주 기본적인 요소이다. 주문접수 액션 수행 후 '포크'라는 것을 만난다. 포크는 이름에서 유추할 수 있듯이 하나의 들어오는 플로우와 여러개의 나가는 플로우로 이어져있다. 포크에서 나가는 플로우가 만나는 주문서 작성과 주문발송 액션간에는 순서없이 .. 2021. 2. 17.
객체 생성 패턴 - 빌더 패턴 - 참조: GoF의 디자인 패턴 - https://ko.wikipedia.org/wiki/%EB%B9%8C%EB%8D%94_%ED%8C%A8%ED%84%B4 - http://www.javabyexamples.com/builder-vs-fluent-interface - 빌더 패턴 빌더 패턴이란 복잡한 객체를 생성하는 방법과 표현하는 방법을 정의하는 클래스를 분리하여, 서로 다른 표현의 결과에 대해서도 동일한 생성 절차를 제공하는 패턴이다. 요리사는 피자를 만든다. 매운 피자와 하와이안피자를 만들 수 있으며, 서로 다른 피자를 만든다고 해도 1명의 요리사가 레시피만 바꿔가면서 만들 수 있어야 한다. 빌더 패턴의 참여자는 4 요소가 있다. 추상 빌더(Builder): 제품(피자)의 일부(도우, 소스, 토핑)를.. 2021. 2. 17.
객체 생성 패턴- 추상 팩토리 패턴 - 참조: GoF의 디자인 패턴 - 참조: https://www.baeldung.com/java-abstract-factory-pattern - 추상 팩토리 추상 팩토리는 상세화된 서브 클래스를 정의하지 않고, 관련성이 있거나 독립적인 여러 객체 군을 생성하기 위한 인터페이스를 제공한다. 문장이 어려워 이해하지 못했더라도 낙담할 필요는 없다. 다음에 나올 내용들을 살펴본 뒤 이 문장을 이해하면 된다. 모티프, 프리젠테이션 매니저와 같은 사용자 인터페이스 툴킷 프로그램은 서로 다른 룩앤필을 가지고 있다. 만약 이 툴킷을 이용하여 응용프로그램을 개발한다고 가정해보자. 프로젝트 초반에 모티프 툴킷을 이용하여 개발하자고 표준을 잡고 개발을 시작한다. 개발자들은 열심히 모티프 툴킷을 이용하여 개발을 완료하였다. .. 2021. 2. 15.