[사전캠프] 랜덤 닉네임 생성기

2024. 8. 13. 23:17내일배움캠프

문제 : 랜덤한 닉네임을 생성하는 코드를 작성해보세요.

조건 : 사용자는 최소 27가지 이상의 닉네임 중 하나를 랜덤으로 출력할 수 있다.

package generator;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Random;

/**
 * 사용자는 최소 27가지 이상의 닉네임 중 하나를 랜점으로 출력 할 수 있다.
 * 사용 가능한 키워드는 {기절초풍, 멋있는, 재미있는}, {도전적인, 노란색의, 바보같은}, {돌고래, 개발자, 오랑우탄} 이다.
 * 키워드 그룹에서 하나씩 키워드를 랜덤하게 선택해 닉네임을 생성하고 출력한다.
 */
public class Main {
    public static void main(String[] args) {

        // 사용되는 키워드 리스트들을 선언 및 초기화
        List<String> keywordsA = new ArrayList<>(Arrays.asList("기절초풍", "멋있는", "재미있는"));
        List<String> keywordsB = new ArrayList<>(Arrays.asList("도전적인", "노란색의", "바보같은"));
        List<String> keywordsC = new ArrayList<>(Arrays.asList("돌고래", "개발자", "오랑우탄"));

        // 키워드를 조합해 생성할 StringBuffer 객체 생성
        // new 로 인한 메모리 낭비를 막고자 StringBuffer 클래스를 사용함
        StringBuffer nickname = new StringBuffer();

        // 리스트에서 랜덤한 요소를 꺼내오기 위해 Random 객체를 생성
        Random random = new Random();

        // 키워드 선택에 사용할 인덱스들을 랜덤하게 구하는 과정
        int[] useIndex = new int[3];
        useIndex[0] = random.nextInt(keywordsA.size()); // 키워드의 개수가 키워드 리스트별로 달라질 수 있어 반복문 사용 X
        useIndex[1] = random.nextInt(keywordsB.size());
        useIndex[2] = random.nextInt(keywordsC.size());

        // 선택한 키워드들을 조합해 닉네임 생성
        nickname.append(keywordsA.get(useIndex[0]));
        nickname.append(" ");   // 키워드간 구분을 위해 공백 문자열 추가
        nickname.append(keywordsB.get(useIndex[1]));
        nickname.append(" ");
        nickname.append(keywordsC.get(useIndex[2]));

        System.out.println(nickname);

    }
}

 

 작성하는데 별다른 어려움은 없었다. 하지만 작성을 하고나서 현재 주어진 키워드보다 더 많은 키워드가 주어지거나 추가 키워드 묶음이 주어졌을 때의 코드 수정을 염두하고 작성해둔 코드를 조금 더 손보았다. 나름 추후에 어떠한 수정 작업이 생길까 고민하였는데 대부분 키워드의 추가였다.

 

 이전 코드와 달라진 점이라면 키워드 선택시 사용할 인덱스를 구하는 과정에 반복문(for문)을 사용했었는데 추후 키워드 묶음별로 가지는 키워드의 개수가 각각 현재보다 적어지거나 많아 질수도 있고, 묶음별로 키워드 개수가 달라질 수 있기에 반복문을 사용하지 않게 되었다.

 

 만약 키워드가 추가되도 리스트 초기화시 문자열만 추가하면 되고(삭제도 마찬가지 삭제만 하면됨), 설령 키워드 리스트별로 키워드 개수가 달라지더라도 따로 수정할 부분이 없다. 새로운 키워드 리스트가 추가되어도 코드를 3~5 줄만 추가하면되고 'useIndex' 배열의 길이만 수정하면 되니 최대한 수정할 부분을 줄인 것 같다 생각된다.