클라이언트/ 서버/ 엔지니어 " 게임 개발자"를 향한 매일의 공부일지

클래스와 객체 8 - 객체 배열 2 : 객체 배열 어려운 예제 풀어보기 본문

프로그래밍 언어/자바

클래스와 객체 8 - 객체 배열 2 : 객체 배열 어려운 예제 풀어보기

huenuri 2024. 8. 17. 19:42

이어서 객체 배열 학습을 진행해볼 것이다. 이번에는 책 관리 프로그램을 만들고 다른 예제 문제도 풀어보려고 한다. 바로 학습을 시작해보자!


 

 

 

 

책 관리 프로그램 만들기

 

 


 

 

BookData 클래스

 

이번에는 자동완성 기능으로 해당 내용을 작성하였다. 이렇게 일일이 쓰지 않아도 되니 얼마나 편리한지 모른다. 그래도 익숙해질 때까지는 수동으로 작성하는 훈련을 해야 한다. 이 학습일지를 쓰기 전까지만 해도 난 이러한 기능을 잘 몰랐었다. 


 

 

 

 

main 클래스 만들기

 

이렇게 책을 관리할 객체를 생성했고 이를 객체 배열로 담아주었다. 이제는 금액을 출력해볼 차례이다.


 

 

 

 

 

 

책 가격과 사용자가 입력한 값을 비교하여 구매 가능한 책을 목록으로 보여주게 하는 출력문을 작성했다. 근데 난 책과 책 사이에 콤마를 넣어 구별하고 싶고, 책 금액보다 더 적은 금액을 입력하면 구매 가능한 책이 없다는 문구를 넣고 싶었다. 그래서 이 부분을 수정해서 코드를 작성해보았다.


 

 

책 구입 가능 여부와 콤마를 찍는 기능 추가하기

 

 

 

가격이 적을 때는 조건문을 통해 검사하기 때문에 괜찮지만 책 가격 이상의 가격을 입력하자 이런 오류가 떴다. 이것은 객체의 길이를 조정할 때 발생하는 StringIndexOutOfBoundsException 오류이다. 이 문제는 StringBuilder에서 마지막에 붙은 콤마를 제거하기 위해 setLength() 메서드를 호출할 때 발생할 수 있다고 한다. 오류의 근본적인 원인은 setLength() 메서드에 잘못된 인덱스가 전달되었기 때문이다.

 

문제를 해결하려면, StringBuilder에 문자열을 추가하는 과정에서 콤마를 관리하는 방법을 개선해야 한다. 특히, 마지막에 추가된 콤마를 제거하는 방식 대신, 콤마를 추가하기 전에 책이 첫 번째 책이 아닌지 확인하여 콤마를 추가하는 방법으로 문제를 해결할 수 있다.


 

 

마지막으로 수정한 코드

 

 

 

출력이 아주 잘 되고 있다. 이렇게 직접 코드를 수정하며 새로운 사실을 많이 배웠다. result.append를 쓰면 원하는 값을 print 구문 없이도 붙일 수 있었다.


 

 

 

 

 

학습을 마치고

오늘 여기까지 공부해보았다. 이제 객체 배열 수업 예제는 끝났고 다음 포스트에서는 책에 있는 내용을 정리하며 예제 문제를 풀어보려고 한다. 오늘로써 매일 하루도 쉬지 않고 12시간 이상 공부한지 17일째 되는 날이다. 

이 시간이 결코 헛되지 않을 거라 믿는다. 공부에 대한 습관을 만드는데 거의 1년 가까이 걸린 것 같다. 그래도 난 포기하지 않았고 여기까지 왔다. 앞으로는 개발 공부하는 일이 점점 더 쉬워질 것 같다.