구현해야하는 기능이 작아서 그런지, 생각보단 더 잘해놨었더라 🙄
problem1 리팩토링과 마찬가지로 MVC 패턴을 적용하고자 노력해봤다!
[ 기능 ]
- [ ] 암호문 입력 받기
- [ ] 중복 문자 인덱스 구하기
- [ ] 해당 인덱스 삭제하기
[ 예외 ]
- [ ] 암호문 길이가 1이상 1000이하가 아닌 경우
- [ ] 암호문이 알파벳 소문자가 아닌 다른 형식으로 구성된 경우
일급컬렉션을 활용하고 싶어서, String으로 관리했던 암호문을 Queue를 활용해 관리했다.
일급 컬렉션으로 해당 Queue를 wrapping 했는데, 생성자 주입을 받을 때 밖에서부터 Queue를 주입받을까 고민했지만, 그 부분은 객체 안에서 알아서 생성해주는 것이 맞는 것 같아서 String으로 주입받고, 객체 안에서 Queue로 바꿔주는 과정을 거쳤다.
public class Cryptogram {
Queue<Character> cryptoCharacters;
public Cryptogram(String cryptogram) {
Validator.validateCryptogram(cryptogram);
cryptoCharacters = new LinkedList<>();
for (int index = 0; index < cryptogram.length(); index++) {
cryptoCharacters.add(cryptogram.charAt(index));
}
}
public Queue<Character> getCryptoCharacters() {
return new LinkedList<>(cryptoCharacters);
}
public void updateCryptogram() {
Queue<Character> tmp = new LinkedList<>();
Character zero = ' ';
while (!cryptoCharacters.isEmpty()) {
Character first = cryptoCharacters.poll();
Character second = cryptoCharacters.peek();
if (first != zero && first != second) {
tmp.add(first);
}
zero = first;
}
this.cryptoCharacters = tmp;
}
public boolean isSameSize(Queue<Character> originCryptoCharacters) {
return cryptoCharacters.size() == originCryptoCharacters.size();
}
}
해당 클래스 내부에서 중복 문자를 제거해주는 updateCryptogram()
메소드도 구현했고, 외부 컨트롤러에서 중복 문자열이 남았는지 체킹하기위해 필요한 `isSameSize() 메소드도 구현했다.
근데 Queue
를 사용해서 그런지, 인접한 중복 문자열 제거 로직이 조금 복잡해졌다😭
String
을 활용해서 겹치는 index를 체킹하는 것이 조금 더 나은 로직이었나?하는 생각이 든다~
사용하는 최종 컨트롤러 메인 로직은 아래와 같다.
public void run() {
outputView.printInputGuide();
Cryptogram cryptogram = getCryptogram();
updateResult(cryptogram);
outputView.printResult(cryptogram);
}
아래는 원래 작성한 solution()
메소드인데,
public static String solution(String cryptogram) {
sb = new StringBuilder();
initDuplicatedIndexList(cryptogram);
while (duplicatedIndexList.size() > 0) {
cryptogram = createNewCryptogram(cryptogram);
addDuplicatedIndex(cryptogram);
}
return cryptogram;
}
해당 메소드가 해야하는 요구사항이 다르지만, 그래도 나름 가독성을 위해 노력한 흔적이 드러나지 않나...! 싶다..!
이전 코드도 나름 괜찮았다고 생각하긴 하지만 ^____^