본문 바로가기
Blog/TIL

[240610] 유스케이스 다이어그램을 작성해보다

by 코젼 2024. 6. 10.
728x90
반응형

🔶해시

🔶유스케이스


목차

    / 오늘의 TIL /


    해시

    https://school.programmers.co.kr/learn/courses/30/lessons/131127

     

    프로그래머스

    코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

    programmers.co.kr

    풀이

    import java.util.HashMap;
    import java.util.Map;
    
    class Solution {
        /**
         * @param want 원하는 제품
         * @param number 원하는 제품의 수량 마트 할인 제품
         * @param discount 회원등록 날짜의 일수
         * @return
         */
        public static int solution(String[] want, int[] number, String[] discount) {
    
            Map<String, Integer> want_map = new HashMap<>();
            Map<String, Integer> dis_map;
    
            //초기 값 세팅
            for (int i = 0; i < want.length; i++) want_map.put(want[i], number[i]);
    
            int answer = 0;
    
            //회원 가입 최대 날짜 범위
            A: for (int i = 0; i <= discount.length-10; i++) {
                dis_map = new HashMap<>();
    
                //회원은 10개만 할인 받을 수 있음
                for (int j = i; j < i+10; j++) {
                    //원하는 물건이 아닌 경우
                    if (!want_map.containsKey(discount[j])) continue A;
    
                    dis_map.put(discount[j], dis_map.getOrDefault(discount[j], 0) + 1);
    
                    //연속적으로 일치가 안되는 경우(원하는 물건보다 개수가 많은 경우)
                    if (dis_map.get(discount[j]) > want_map.get(discount[j])) continue A;
                }
                answer++;
            }
            return answer;
        }
    }

    리팩토링

    할인하는 상품의 개수가 수량과 일치하면 answer 값에 +1 한다.

    import java.util.HashMap;
    import java.util.Map;
    
    class Solution {
        /**
         * @param want 원하는 제품
         * @param number 원하는 제품의 수량 마트 할인 제품
         * @param discount 회원등록 날짜의 일수
         * @return
         */
        public static int solution(String[] want, int[] number, String[] discount) {
    
            Map<String, Integer> want_map = new HashMap<>();
            Map<String, Integer> dis_map;
    
            //초기 값 세팅
            for (int i = 0; i < want.length; i++) want_map.put(want[i], number[i]);
    
            int answer = 0;
    
            //회원 가입 최대 날짜 범위
            for (int i = 0; i <= discount.length-10; i++) {
                dis_map = new HashMap<>();
    
                //회원은 10개만 할인 받을 수 있음
                for (int j = i; j < i+10; j++) {
                    dis_map.put(discount[j], dis_map.getOrDefault(discount[j], 0) + 1);
                }
    
                //할인하는 상품의 개수가 수량과 일치하는 경우
                if (dis_map.equals(want_map)) answer++;
            }
            return answer;
        }
    }

    유스케이스(UseCase) Diagram

    1) 유스케이스 식별

    • 액터가 원하는 시스템 제공 기능은 무엇인지
    • 시스템에 어떤 정보를 CRUD하고 싶은지
    • 모든 기능 요구사항을 만족할 수 있도록 유스케이스가 모두 식별 되었는지

    2) 관계 정의

    • 연관 관계: 액터와 유스케이스 간 상호 작용이 존재하는지
    • 포함 관계: 유스케이스를 실행하기 위해 반드시 실행되어야 하는 유스케이스가 존재하는지
    • 확장 관계: 유스케이스를 실행함으로써 선택적으로 실행되는 유스케이스가 존재하는지
    • 일반화 관계: 액터 또는 유스케이스가 구체화 된 다른 액터 또는 유스케이스를 가지고 있는지

     

    구성요소: 시스템, 액터, 유스케이스, 관계

    • 시스템: 현재 개발할 프로그램
    • 액터: 시스템 외부에 존재하며 시스템과 상호작용 하는 모든 것
      시스템을 사용자는 사용자, 시스템을 사용함으로서 상호작용되는 다른 시스템 등
      ex) 고객, 회원, 신용카드 인증 회사, 관리자...
      • 프라이머리 액터: 시스템 사용 주체
      • 세컨더리 액터: 시스템과 상호작용하는 다른 시스템
        <<actor>>를 포함하여 표기한다.
    • 유스케이스: 사용자의 입장에서 바라본 시스템의 추상적인 기능
      ex) 회원가입, 상품검색, 주문...
    • 관계: 액터 <-> 유스케이스, 유스케이스 <-> 유스케이스 관계
      • 연관(Assosiation): 실선 표현
        • 고객 -> 회원가입, 상품목록조회, 상품검색...
      • 의존(Dependency)
        • 포함(Include)
          • <<include>>, <<포함>>
          • 상품 주문 -<<include>>-> 사용자 인증
        • 확장(Extend)
          • <<extend>>, <<확장>>
          • 상품상세 조회 -<<extends>>-> 상품목록 조회
      • 일반화(Generalization)
        • 추상화한 유스케이스 또는 액터를 그룹화 시킨다.
        • 실선 표기
        • 카테고리관리 <- 카테고리 등록, 수정, 삭제...
    728x90
    반응형

    'Blog > TIL' 카테고리의 다른 글

    [240612] swagger ui api 사용하기  (0) 2024.06.12
    [240611] 해시맵 활용  (0) 2024.06.11
    [240609] 배울 게 태산  (0) 2024.06.09
    [240608] 환경설정 끄적끄적  (0) 2024.06.08
    [240607] queue 복습2  (0) 2024.06.07

    댓글