과제를 함에 있어서 새롭게 알아가는 것들이 많고 어떻게 잘 적용할 것인지도 깨닫게 되면서 Java에 흥미가 붙어진 것 같다.

과제의 6번째 요구사항이다.
문제를 보고 선언했던 memory라는 배열에 인덱스값 0 ~ 9까지 다 채워 졌을 때라는 조건이 필요하니까 If문을 활용해서 해당 문제를 풀어야겠다고 생각을 했고, 맨 처음 저장되었던 것을 삭제 시키려면 값을 전부 한칸씩 앞으로 당기면 처음 들어온 값이 삭제가 되고 하나씩 인덱스값이 당겨지니 for문을 통해 이것을 구현하려고 했다.

위의 알고리즘을 생각하고 바로 코드 구현에 들어갔지만 위와 같이 구현을 해놓고 마지막 9번 인덱스에 값을 어떻게 저장해야하지? 라고 의문이 들어 잠시 생각을 해보았다. 처음에는 for문에서 만들어둔 코드를 수정해야하나 생각했지만, 곧바로 해답을 찾았다.
for문 아래에 마지막 인덱스에 값을 저장하는 코드를 구현하면 0~9까지 저장되었던 값들이 한 칸씩 당겨지고 마지막 9번에 새로운 값을 저장할 수 있다.

이렇게 구현해놓고 보니 일단 if문의 조건식도 잘못되었다는 것을 뒤늦게 깨달았고 for문의 조건식과 memory[9]번에 값을 저장하는 것도 자동화를 시킬 수 있지 않을까라는 생각을 하여 다시 코드를 수정하였다.

memory.legth값이 10이므로 -1을 해두어 9라는 숫자로 표현하여 이후 유지보수나 값을 수정할 때 좀 더 수월하게 할 수 있도록 코드를 구현하였다.

오늘 Java Collection에 대해서 강의를 들고 문제를 보았을 때 바로 사용해야할 JCF는 ArrayList라고 떠올렸다. 그 이유는 Set은 순서도 지정이 되어있지 않고 무엇보다 중복되어서 들어갈 수 없어 ArrayList를 사용하기로 했다. Stack과 Queue는 현재 풀고있는 문제의 취지와 맞지 않아서 아예 제외를 하였다.

memory라는 배열을 ArrayList로 재선언을 해주었고, 앞에 문제를 풀면서 필요했던 인덱스의 값을 뜻하는 count는 필요없어졌기에 코드에서 빼버렸다. 주석 처리한 이유는 문제를 풀 때 어떤 식으로 develop했는지 코드 공유를 했을 때 다른 사람이 흐름을 알 수 있게 하기위해 주석 처리로만 코드를 빼두었다.
List를 만들었으니 배열로 풀었던 코드들을 전부 수정하고 삭제해야했다.

해당 코드는 인덱스 값을 저장해둔 count를 사용하여 했지만, List에서 add라는 메서드를 통해 간단하게 코드를 바꿀 수 있었다.

가장 먼저 저장된 값을 삭제하는 것은 너무나 처리가 간단했다. remove(인덱스 주소)를 사용하여 0번째 자리에 있는 값을 삭제 시키는 것이다. 배열을 썼을 때는 if문과 for문을 통해 코드가 길어지면서 알고리즘에 대해 생각을 하면서 문제를 풀어야했던 반면에, 메서드를 쓰면서 문제를 푸니까 코드가 너무 간결해졌다.

레벨 1과제의 마지막이다. 정말 간단하다 해당 문구가 입력되었을 때 출력을 하는 것이기 때문이다.
여기서는 if문과 향상된 for문을 사용하면 될 것 같았다. 향상된 for문을 사용해본 적이 없었는데 이번 기회에 쓰게 되어서 또 하나 알아가는 기분이다.

일반적인 for문이 아니라 향상된 for문을 써야하는 상황은 필드가 거대해지고 객체를 가지고 있을 때 활용하기 적합하다고 배웠다. 이렇게 해서 개인과제 레벨 1은 모두 끝났다 !
한번도 사용하지 않았던 구문과 Collection을 사용하면서 새로운 것을 배워나가는 것이 좋았다. 그리고 요구사항을 하나씩 따라가며 푸니까 어떤 문제가 주어졌을 때, 생각한 알고리즘을 가장 쉬운 단계에서부터 하나씩 구현해나가면서 빌드업을 해나가니까 중간에 꼬이는 일도 없고 오류를 범하는 것도 많이 줄일 수 있는 것 같다. 다음 과제에서 코드를 빌드업 해나가는 과정을 기억하고 적극적으로 활용하면서 역량을 늘릴 수 있을 것 같아서 기대된다.