이론은 하단에 정리
https://velog.io/@ansebin1022/class-diagram-%EC%A0%95%EC%9D%98-%EB%B0%8F-%EC%9E%91%EC%84%B1%EB%B2%95


+) 클래스 다이어그램 X 부분 처리
프로필 이미지 테이블은 부속성으로 남겨두기 => user attribute로 남겨두기
채팅방 인원수 count join table => user - chatroom 1:n 연결
인원수 count는 따로 코딩 처리
UserSampleSelect 같은 조인 테이블을 굳이 표현 X => User, Theme, SampleToDo 클래스 간의 관계만 처리
UserSampleSelect 는 따로 코딩을 통해 db에 적절히 저장하는 부분만 잘 처리해주면 됨

- 사용자가 ToDo를 관리하는 역할
- ToDo 객체는 사용자에 의해 생성, 사용자 삭제 = 함께 삭제
- 관리자는 사용자를 정지시키거나 삭제하는 등의 관리 작업을 수행
- 테마는 여러 사용자가 공유할 수 있으므로 독립적인 엔티티로 존재, 하지만 사용자의 선택에 따라 연결
- 관리자는 테마를 관리하는 역할
- 사용자가 샘플 ToDo를 선택해서 추가 가능, 하지만 샘플 ToDo 자체는 여러 사용자와 공유
- 관리자가 샘플 ToDo를 관리하는 과정에서 샘플 ToDo 객체와 상호작용
- 게시물은 사용자가 작성한 후에도 독립적으로 존재할 수 있는 객체
- 관리자는 게시물 관련 기능을 수행하며 Post 클래스에 의존
- 사용자가 채팅방 개설 / 참여해도 채팅방 자체는 독립적으로 존재
- 채팅방이 삭제 > 메시지도 삭제, 메시지는 채팅방에 종속적인 객체
- 메시지는 사용자가 작성한 후에도 독립적으로 존재할 수 있는 객체
- 월말 평가도 독립적으로 존재할 수 있는 객체
- 샘플 ToDo는 특정 테마에 의존해 존재하는 객체
- 테마가 삭제 = 함께 삭제
User -> ToDo
Admin -> User
User -> Theme
Admin -> Theme
User -> SampleToDo
Admin -> SampleToDo
User -> Post
Admin -> Post
User -> ChatRoom
ChatRoom -> ChatMessage
User -> ChatMessage
User -> MonthlyEvaluation
Theme -> SampleToDo
위 사항을 입력한 후 수정사항이 있나 질문함
ToDo와 User 관계
- 현재 상태: Aggregation으로 설정되어 있음.
- 왜 수정해야 할까?
Aggregation은 두 객체 간의 관계가 느슨한 경우를 나타내. 즉, 부모 객체(여기서는 User)가 삭제되면 자식 객체(ToDo)는 여전히 존재할 수 있어. 하지만 ToDo가 User와 깊은 연결이 없다고 생각하면, 단순한 연관 관계가 더 적합해. 이 경우, ToDo는 User의 관리하에 있지만, 그 자체로도 독립적으로 존재할 수 있는 객체라고 봐야 해.
- 수정할 화살표
일반적인 연관 관계 화살표로 변경해. 이는 두 클래스 간의 관계가 있지만, 서로에 대해 큰 의존성이 없음을 나타내.
Theme -> SampleToDo 관계
- 현재 상태: 합성(Composition)으로 설정되어 있음.
- 왜 수정해야 할까?
합성 관계는 자식 객체(SampleToDo)가 부모 객체(Theme)에 종속적이라는 뜻이야. 만약 Theme가 삭제되면 그에 속한 SampleToDo도 같이 삭제돼. 하지만, SampleToDo는 다른 사용자와 공유될 수 있기 때문에, Theme가 없어도 여전히 존재할 수 있어야 해. 그러므로 Aggregation으로 바꾸는 게 적합해.
- 수정할 화살표
Aggregation 화살표로 변경하거나, 일반적인 연관 관계 화살표로 변경해. 이로 인해 SampleToDo는 특정 Theme에 속할 수 있지만, 독립적인 객체로서 다른 Theme에 재사용될 수 있음을 나타낼 수 있어.
ChatRoom과 ChatMessage 관계
- 현재 상태: 합성(Composition)으로 설정되어 있음.
- 왜 수정해야 할까?
합성 관계는 ChatMessage가 ChatRoom에 종속적이라는 의미야. 즉, ChatRoom이 삭제되면 ChatMessage도 삭제되는 구조이지. 하지만, ChatMessage는 사용자 간의 대화 내역을 나타내므로 독립적인 객체로 남길 수 있어야 해. ChatRoom이 없어도 대화 기록은 유지될 수 있으니, 이 관계는 Aggregation으로 변경해야 해.
- 수정할 화살표
Aggregation 화살표로 변경하거나, 일반적인 연관 관계 화살표로 변경해. 이렇게 하면 ChatMessage는 특정 ChatRoom에 소속되지만, 독립적으로 존재할 수 있다는 점을 강조할 수 있어.
https://gmlwjd9405.github.io/2018/07/04/class-diagram.html
https://ainayoon.tistory.com/9