이전 글에서는 원클릭 슴리가 무엇이고 슴리 만드는 방법을 알아봤다.
이번 글에서는 주어진 요구사항을 파악하고 이를 어떻게 객체지향적으로 짜내려갔는지 설명해보려고 한다.
요구사항
- 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 |
음원 사이트는 이 인터페이스를 구현하는 방식으로 코드를 작성하였다.
'Ploject' 카테고리의 다른 글
[원클릭 슴리] 원클릭 스밍리스트 제작 가이드 (2) | 2023.08.03 |
---|---|
[프로젝트] 코드 관리 과정! (0) | 2023.01.10 |
[프로젝트] 트위터 개발자 계정 만들기 (0) | 2022.08.22 |
[프로젝트] 개요. 시작 계기 (0) | 2022.08.15 |