안녕하세요 강의 잘 듣고 있습니다. 객체 배열에서 궁금한게 있어서 질문드립니다.
아래의 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);
}
}
goodlife1359님의 답변
## 객체선언 과 객체배열
객체를 생성할때 사용하는 변수와 객체배열에서 객체를 접근하는 것은 다릅니다.
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() 호출해줘야 합니다.
따라서 배열에 저장된 객체에 접근할때는 배열 인덱스를 사용하여 접근해야 합니다.