We will find a way, we always have.

-interstellar

Ploject

[원클릭 슴리] 요구사항 파악

Redddy 2023. 9. 3. 23:18

이전 글에서는 원클릭 슴리가 무엇이고 슴리 만드는 방법을 알아봤다. 

 

이번 글에서는 주어진 요구사항을 파악하고 이를 어떻게 객체지향적으로 짜내려갔는지 설명해보려고 한다. 

 


 

요구사항

  • 4개의 음원 사이트
  • 3개의 OS 환경
  • 8개의 곡

 

각 음원 사이트마다 음원의 songid 가 다르다. 그리고 OS 마다 URL 형식이 다르고, 또 이는 음원 사이트 마다 다르다. 

 

가장 먼저 들었던 고민거리는 8개의 songId 를 어떤 형태로 저장할지가 고민이였다. 이 한 음원에 대한 songid는 사이트마다 다르지만 그 음원의 타이틀은 동일하다. 예를들어 CAKE 라는 곡의 songId 는 멜론에서는 11223344 이지만, 지니에서는 56785678 인 것이다. 

음원사이트 마다 타이틀은 중복되기에 이 타이틀를 enum으로 관리하였다. 

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public enum Song {
    DALLA_DALLA,
    ICY,
    WANNABE,
    NOT_SHY,
    MAFIA_IN_THE_MORNING,
    LOCO,
    SNEAKERS,
    CHESHIRE,
    BET_ON_ME,
    CAKE,
    NONE_OF_MY_BUSINESS,
    BRATTY,
    PSYCHIC_LOVER,
    KILL_SHOT
}
cs

 

그리고 각각의 음원사이트별로 클래스를 만들고 클래스 안에서 Map을 생성하여 songId 를 넣어주었다. 

 

사이트의 각각의 OS는 서로 URL 형태는 달랐지만, 파라미터 값은 동일하였다. 이 부분을 이용하여 URL을 가져오는 메서드는 인터페이스를 활용하였다. 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public interface StreamSite {
    default String getUrl(String environment, Song[] songs) {
        return null;
    }
 
    default String getAndroidSeg(Song[] songs) {
        return null;
    }
 
 
    default String getIos(Song[] songs) {
        return null;
    }
 
 
    default String getPcSeg(Song[] songs) {
        return null;
    }
 
 
    default String join(String delimiter, Song[] songs) {
        return "";
    }
}
cs

 

음원 사이트는 이 인터페이스를 구현하는 방식으로 코드를 작성하였다. 

 

전체 레포