안녕하세요 강의 잘 듣고 있습니다. 객체 배열에서 궁금한게 있어서 질문드립니다. 아래의 for문에서 songs[i].toStr() 대신에 si.toStr()을 넣으면 오류가 나는데 이유를 모르겠습니다. 제 생각에는 for문이 돌면서 s0.toStr() 이랑 s1.toStr() 이랑 s2.toStr() 이 생길것같은데 아닌가요?;; [아래] public class SongTest { public static void main(String[] args) { // 객체 생성 Song s0 = new Song("별헤는 밤", "유재하"); Song s1 = new Song("비상", "임재범"); Song s2 = new Song("비밀", "박완규"); // 객체 배열 생성 Song[] songs = {s0,s1,s2}; // 모든 배열 속 객체 출력 for (int i = 0; i < songs.length; i++) { /* 2. 객체 정보를 출력하세요. */ System.out.println(songs[i].toStr()); } } } class Song { // 필드 String name; String singer; // 생성자 Song(String n, String s) { name = n; singer = s; } // 메소드 String toStr() { return String.format("Song { name: %s, singer: %s }", name, singer); } }
## 객체선언 과 객체배열 객체를 생성할때 사용하는 변수와 객체배열에서 객체를 접근하는 것은 다릅니다. Song s0 = new Song(“별헤는 밤”, “유재하”); Song s1 = new Song(“비상”, “임재범”); Song s2 = new Song(“비밀”, “박완규”); 객체를 각각 생성하고 객체 정보를 출력할때는 s0.toStr() 로 접근하는 것이 맞습니다. Song[] songs = {s0,s1,s2}; 위 코드가 실행되면 위에서 생성한 new Song(“별헤는 밤”, “유재하”); , new Song(“비상”, “임재범”); , new Song(“비밀”, “박완규”); 객체를 songs 객체 배열의 각 인덱스가 가리키게 됩니다. 즉 , songs[0] 변수가 new Song(“별헤는 밤”, “유재하”); 객체를 가리키고 songs[1] 변수가 new Song(“비상”, “임재범”); 객체를 가리키며 songs[2] 변수가 new Song(“비밀”, “박완규”); 를 가리키고 있는 상태 입니다. // 모든 배열 속 객체 출력 for (int i = 0; i < songs.length; i++) { /* 2. 객체 정보를 출력하세요. */ System.out.println(songs[i].toStr()); } 즉 , songs 배열의 0 번째 인덱스가 new Song(“별헤는 밤”, “유재하”); 객체를 가리키고 있으므로 해당 객체에 저장된 데이터를 출력하려면 songs[0].toStr() 호출해줘야 합니다. 따라서 배열에 저장된 객체에 접근할때는 배열 인덱스를 사용하여 접근해야 합니다.