본문 바로가기

UML43

객체지향의 사실과 오해 - 개념, 명세, 구현 - 이 글은 조영호의 객체지향의 사실과 오해를 기반으로 작성되었습니다. (가능하면 꼭 읽어보는것을 추천드립니다.) - 개념, 명세, 구현 UML 관련 서적중 마틴 파울러의 UML Distilled 2판 에서는 객체 지향 설계를 개념 관점, 명세 관점, 구현 관점으로 구분한다. 우선 개념 관점은 도메인안에 존재하는 개념과 개념간의 관계를 나타낸것이다. 도메인은 앞에서 말했듯이 사용자가 관심을 가지는 분야를 의미한다. 이 관점에서는 실제 도메인의 규칙을 최대한 유사하게 반영하는것이 핵심이다. 명세 관점부터는 소프트웨어의 세계로 넘어온다. 명세 관점에서는 What/Who 사이클에서 What 에 해당하는 무엇에 초점을 맞추어서 객체의 인터페이스에 해당하는 관점에 집중한다. 구현 관점은 우리와 같은 프로그래머가 .. 2021. 8. 29.
객체지향의 사실과 오해 - 역할, 책임, 협력 - 이 글은 조영호의 객체지향의 사실과 오해를 기반으로 작성되었습니다. (가능하면 꼭 읽어보는것을 추천드립니다.) - 협력 협력은 한 사람이 다른 사람에게 도움을 요청할 때 시작한다. 요청받은 사람은 일을 처리한 후 요청자에게 응답하는데 만약 자신이 혼자서 처리할 수 없는 일을 맞이하면 다른사람에게 요청한다. 이처럼 협력은 다수의 연쇄적인 요청과 응답으로 구성되어 있다. 이상한 나라의 엘리스에서 하트 잭은 파이를 훔쳤다는 혐의로 재판을 받는다. 판사 역할을 맡은 왕은 토끼에게 증인을 부르라고 명령한다. 모자장수가 증인으로 등장하고 증언을 마친 후 퇴장한다. 이렇게 하트 잭을 재판하는 과정은 일종의 협력이라고 볼 수 있다. 위의 다이어그램은 재판의 과정을 도식화하여 나타낸 UML 협력 다이어그램이다. 재판.. 2021. 8. 13.
JPA - 엔티티 맵핑 - 요구사항 분석과 맵핑 - 참조: 자바 ORM 표준 JPA 프로그래밍 - 실전 예제 책에서는 쇼핑몰을 만든다고 가정하고 몇 가지 요구사항을 통해 엔티티 맵핑을 적용해보는 과정이 있다. 내용을 다 기술할수는 없고 몇 가지 생각해볼 내용들이 있다. 회원은 상품을 주문할 수 있다. 주문시 여러 종류의 상품을 선택할 수 있다. - 도메인 모델 분석 JPA 는 도메인 모델을 다루는데에 있어서 Mybatis 보다 상당한 강점이 있다고 생각한다. Spring Data JPA 문서에서도 domain 이라는 단어자체가 상당히 많이 등장하며, Specifications 부분은 직접적으로 에릭 에반스의 DDD 에서 개념을 가져왔다고 말하고 있다. 위에서 언급한 요구사항 2 가지를 적용해보자. 위 그림은 회원, 주문, 제품간의 관계를 나타낸것이다... 2021. 6. 27.
UML - 협력 - 이 글은 UML Distilled (마틴 파울러)책을 기반으로 작성하였습니다. - https://www.visual-paradigm.com/guide/uml-unified-modeling-language/what-is-uml-collaboration-diagram/ - 협력(Collaborations) 경매에는 한 명의 판매자와 여러 명의 구매자들, 많은 상품들 그리고 부르는 가격이 있다. 위의 다이어그램은 이런 요소들을 클래스 다이어그램으로 나타낸것이다. 클래스다이어 그램에서 구매자나 부르는 가격등을 클래스라고 부르지만 협력에서는 다른 이름으로 부른다. 협력 다이어그램의 요소를 하나씩 살펴보자. 경매 협력(Collaboration): 점선의 타원으로 표시된 부분이다. 역할(role): 구매자, 부르.. 2021. 5. 9.
UML - 컴포넌트 다이어그램 - 이 글은 UML Distilled (마틴 파울러)책을 기반으로 작성하였습니다. - Do Components Exist: http://wiki.c2.com/?DoComponentsExist - 컴포넌트 다이어그램(Component diagram) 컴포넌트들은 구현하는 인터페이스와 필요로 하는 인터페이스를 통해서 서로 연결된다. 앞에서 사용한적이 있는 공-소켓 표기법을 사용하며, 복합 구조 다이어그램을 사용해서 컴포넌트를 분해할 수도 있다. 위의 컴포넌트 다이어그램에서 Till 은 sales message 인터페이스를 통하여 Sales Server 에 연결한다. Till은 Sales message 인터페이스를 사용하고(Till -> Sales message, Dependecy), Transaction P.. 2021. 5. 6.
UML - 복합 구조(Composite structure) - 이 글은 UML Distilled (마틴 파울러)책을 기반으로 작성하였습니다. - https://www.visual-paradigm.com/guide/uml-unified-modeling-language/what-is-composite-structure-diagram/ - 복합 구조(Composite Structure) UML2 에서는 클래스를 계층적인 내부 구조로 분해할 수 있다. 내부 구조로 분해한다는것은 복잡한 객체를 여러 개의 부분으로 나눌 수 있도록 해준다는 의미가 된다. TV 뷰어 클래스가 특정 인터페이스를 필요로 하는 상황을 생각해보자. 이때 공-소켓 표기법과 인터페이스의 리스트를 기록하는 방법 2가지가 있는데 StarUML 5.0 에서는 공-소켓 표기법을 지원하고 있으니 공-소켓 표기법.. 2021. 5. 5.
UML - 커뮤니케이션 다이어그램 - 이 글은 UML Distilled (마틴 파울러)책을 기반으로 작성하였습니다. - 커뮤니케이션 다이어그램 교류 다이어그램의 일종으로 요소들 간의 데이터 연결을 강조한다. 시퀀스 다이어그램은 모든 참여 요소들의 생명선을 있고, 수직방향으로 메시지의 순서를 표시한다. 반면 커뮤니케이션 다이어그램에서는 번호를 붙여 메시지의 순서를 나타낸다. 위 그림은 중앙 집중 제어방식의 커뮤니케이션 다이어그램이다. 커뮤니케이션 다이어그램을 통해서 참여 요소들이 어떻게 연결되었는지 보여줄 수 있다. 연관에서의 링크 뿐만 아니라 흐름상에서 발생하는 임시 링크(transient link)도 나타낼 수 있다. 주문에서 상품을 보면 이라고 되어있는데, 이는 지역 변수를 의미한다. 나 도 있는데 UML2 에서는 없어졌지만 유용하므.. 2021. 4. 21.
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.
UML - 액티비티 다이어그램 - 시그널 - 이 글은 UML Distilled (마틴 파울러)책을 기반으로 작성하였습니다. - 시그널 시간 시그널과 수신&전송 시그널이 존재한다. 시간 시그널은 시간흐름에 따라 발생하는 시그널이며, 외부 프로세스로 부터 이벤트를 수신하는 수신 시그널, 메시지를 보내고 더 진행하기전 응답이 올 때 까지 기다려야 할 때 유용한 송신 시그널이 있다. - 시간 시그널(time signal) 시간 시그널은 시간의 흐름에 따라 발생하는 시그널이라고 하였다. StarUML 5.0 커뮤니티 버전에서는 Time Signal이 존재하지 않는다. 아래 다이어그램 중에서 모래시계 마크로 "every monday" 라고 되어있는것이 바로 시간 시그널이다. - 수신 시그널 수신 시그널은 외부 프로세스로부터 이벤트를 수신하는것을 나타낸다... 2021. 2. 22.