리뷰 1. 도서관 도메인에서 엔티티 클래스 설계

요구사항을 보고 서로 관련된 데이타와 기능을 encapsulation하여 Entity 클래스를 도출하고, 클래스간의 연관관계를 정의하여 클래스 설계를 완성한다. 

요구사항

OO 대학교 도서관 시스템은 학생들이 도서관 자원을 효과적으로 이용할 수 있도록, 시스템을 이용하는 사용자 정보와 도서관에서 소장하는 도서 정보를 관리하고 이를 기반으로 도서 검색, 대출, 반납, 연체 관리 기능을 제공한다.

도서관에서 소장하는 도서는 공통적으로 시스템에서 사용하는 도서의 고유 식별자, 제목, 저자, ISBN, 출판사, 출판연도, 장르 정보를 관리해야 한다. 도서는 형태에 따라 종이책(PaperBook)전자책(EBook) 으로 구분된다. 종이책은 추가적으로 서가 위치(shelf location)대출 가능한 복본 수(available copies) 를 관리해야 하며, 전자책은 파일 형식(file format), 파일 크기(file size), 동시 이용 가능 사용자 수(max simultaneous users) 를 관리해야 한다. 새로운 도서는 시스템에 등록하고, 등록된 도서는 수정, 삭제를 지원한다. 또한 등록된 도서는 키워드, 제목, 저자, 장르를 조건으로 검색할 수 있으며, 검색 결과에서는 제목, 저자, 출판사, 출판연도, 장르와 함께 도서 유형 정보를 보여준다.

도서관 시스템을 사용하는 학생은 학번, 이름, 이메일, 전화번호, 비밀번호, 전공, 선호 장르를 저장한다. 학생 정보는 신규 입력, 수정, 삭제(탈퇴)가 가능하며, 비밀번호 재설정은 현재 비밀번호를 확인한 후 수정할 수 있다.

도서를 대출하기 위해 사서는 사용자로부터 사용자 ID와 대출하려는 도서 정보를 전달받아 시스템에 사용자 ID와 도서 ID를 입력한다. 시스템은 누가(사용자 ID), 어떤 도서를(도서 ID), 언제 대출했는지를 저장한다. 대출 기한은 기본 2주(14일)이며, 한 사용자는 최대 5권까지 대출할 수 있다. 연체 중인 사용자는 새로운 도서를 대출할 수 없으며, 연체 도서를 반납한 이후에만 다시 대출할 수 있다. 종이책은 복사본 수가 남아 있을 때만 대출할 수 있고, 전자책은 동시 이용 가능 사용자 수를 초과하지 않는 범위에서 대출할 수 있다.

도서관 시스템은 매일 아침 연체 중인 사용자들에게 연체 상태 메일을 보낸다. 사용자가 대출한 도서를 사서에게 반납하면, 사서는 도서 정보를 확인하여 해당 사용자의 대출 상태를 반납 완료로 변경한다.

 

클래스 다이어그램

 

  classDiagram
    class Student {
        -userId : String
        -name : String
        -email : String
        -phone : String
        -password : String
        -major : String
        -preferredGenre : String
        +register()
        +modify()
        +delete()
        +resetPassword(currentPw, newPw)
        +hasOverdueLoans() bool
        +canBorrow() bool
    }

    class Book {
        #bookId : String
        #title : String
        #author : String
        #isbn : String
        #publisher : String
        #publishedYear : int
        #genre : String
        +register()
        +modify()
        +delete()
        +search()
    }

    class PaperBook {
        -shelfLocation : String
        -availableCopies : int
        +isAvailable() bool
    }

    class EBook {
        -fileFormat : String
        -fileSizeMB : float
        -maxSimultaneousUsers : int
        +isAvailable() bool
    }

    class BookLoan {
        -loanId : String
        -loanDate : Date
        -dueDate : Date
        -returnDate : Date
        -status : String
        +borrow()
        +returnBook()
        +isOverdue() bool
        +markReturned()
    }

    Book <|-- PaperBook
    Book <|-- EBook

    Student "1" <-- "0..5" BookLoan 
    Book "1" <-- "0..*" BookLoan 
    

  

 

 

 

 

실습 1. 키오스크 도메인에서 엔티티 클래스 다이어그램 완성하기

요구사항

OO 카페 키오스크 시스템은 고객이 카페 메뉴를 빠르고 편리하게 주문할 수 있도록 지원하는 시스템이다. 이 시스템은 카페에서 판매하는 메뉴 정보를 기본 데이터로 관리하며, 이를 기반으로 메뉴 조회 및 검색, 메뉴 선택, 주문 생성, 결제 및 주문 내역 저장 기능을 제공한다.


카페에서 판매하는 메뉴는 공통적으로 시스템에서 사용하는 메뉴의 고유 식별자(Menu ID), 메뉴명, 가격, 메뉴 설명, 판매 상태(판매중, 품절) 정보를 관리해야 한다. 메뉴는 종류에 따라 커피류(CoffeeMenu)와 디저트류(DessertMenu)로 구분된다. 커피류 메뉴는 추가적으로 원두 종류(bean type), HOT 제공 가능 여부, ICE 제공 가능 여부 정보를 관리해야 한다. 디저트류 메뉴는 추가적으로 칼로리(calories)와 알레르기 정보(allergy information)를 관리해야 한다.


사용자는 키오스크 화면에서 메뉴 목록을 조회할 수 있어야 하며, 각 메뉴에 대해 메뉴명, 가격, 판매 상태가 표시되어야 한다. 품절 상태의 메뉴는 화면에 표시되더라도 선택이 불가능해야 한다. 또한 사용자는 메뉴명이나 키워드를 이용하여 메뉴를 검색할 수 있어야 하며, 검색 결과로는 메뉴명, 가격, 메뉴 종류(커피류/디저트류) 정보가 제공되어야 한다.


사용자가 주문을 진행하기 위해 메뉴를 선택하면, 시스템은 해당 메뉴의 상세 정보를 보여주고 사용자는 수량을 선택할 수 있어야 한다. 선택한 메뉴는 주문 항목으로 추가되며, 사용자는 여러 개의 메뉴를 하나의 주문에 포함시킬 수 있어야 한다.
사용자가 주문을 확정하면 시스템은 주문을 생성하고 관련 정보를 저장해야 한다. 저장해야 할 정보에는 주문번호(고유 식별자), 주문 항목 목록(메뉴 ID, 메뉴명, 수량, 항목별 금액), 총 주문 금액, 주문 생성 시간(주문 시각), 주문 상태(예: 주문접수)가 포함된다.


주문 생성 후 사용자는 결제를 진행해야 한다. 결제는 공통적으로 결제번호, 결제금액, 결제시간, 결제상태(결제완료, 결제실패), 결제방식을 관리해야 한다. 결제 방식은 신용카드(CreditCardPayment)와 카카오페이(KakaoPayPayment)를 지원한다. 신용카드 결제는 카드사(card company)와 카드번호(card number)를 관리해야 하며, 카카오페이 결제는 카카오 계정 ID를 관리해야 한다. 하나의 주문은 하나의 결제와 연결되며, 결제가 완료되면 주문 상태는 “결제완료”로 변경된다.


주문이 정상적으로 생성되고 결제가 완료되면 키오스크는 사용자에게 주문번호와 함께 주문 내역(메뉴명, 수량, 총액, 결제방식)을 화면에 표시해야 한다.
.

 

제출. 클래스 다이어그램

 

클래스 다이어그램 예시

더보기

아래 클래스 다이어그램은 일반적인 예시 입니다. 표현의 상세도와 설계의도는 다양할 수 있습니다.

 

 

+ Recent posts