해결된 질문
작성
·
249
2
package class1.ex;
public class MovieReviewMain2 {
public static void main(String[] args) {
MovieReview[] reviews = new MovieReview[2];
MovieReview inception = new MovieReview();
inception.title = "인셉션";
inception.review = "인생은 무한 루프";
reviews[0] = inception;
MovieReview aboutTime = new MovieReview();
aboutTime.title = "어바웃 타임";
aboutTime.review = "인생 시간 영화";
reviews[1] = aboutTime;
for (MovieReview review : reviews) {
System.out.println("영화 제목: " + review.title + ", 리뷰: " + review.review);
}
}
}
MovieReview inception이라는 변수를 통해서 .(dot)으로 실제객체에 접근하는 것으로 알고 있습니다. 그러나, 향상된 for문에서는 MovieReview(클래스) 다음에 오는 review를 통해서 접근하여 영화제목과 리뷰를 출력하는 것으로 보입니다.
여기서 질문이 있습니다.
for(MovieReview review : reviews)이 구문에서 review는 어디서 온것인가요?
review가 참조값에 접근할 수 있는 상세한 이유는 무엇일까요?
답변부탁드립니다!
답변 1
1
안녕하세요. 윤기섭님, 공식 서포터즈 코즈위버입니다.
MovieReview inception = new MovieReview();
위 코드에서 new MovieReview(); 부분이 실행되면 MovieReview 클래스를 참조하여 객체를 하나 생성하고 이 객체에 접근할 수 있는 주소값을 inception에 담게 됩니다. 그래서 inception 변수를 이용해 객체에 접근(dot 연산자를 이용)할 수 있지요. 이런 변수를 참조변수라고 하는데요, 객체의 주소값을 담고 있습니다. 추가로, 참조변수 또한 변수이기에 다른 변수에 복사하거나 혹은 다른 변수값으로 덮어씌울 수 있습니다. 예를들면,,
MovieReview inception = new MovieReview();
MovieReview myReview = inception;
이런 코드가 있다면 inception 과 myReview 는 같은 객체를 참조합니다.
for (MovieReview review : reviews) { 코드를 for문으로 풀어쓰면 다음과 같습니다.
for (int index = 0; index < reviews.length; index++) {
MovieReview review = reviews[index];
... code ...
}
reviews 배열의 0번째 있는 객체를 review 라는 변수에 담아 사용합니다.
그리고 이 review는 for문이 한바퀴 돌 때마다 소멸과 생성을 반복합니다. 이 부분은 변수의 스코프 부분 강의를 참조하시면 이해하실 수 있어요 :)
감사합니다.
친절한 답변 감사합니다.