프로그래밍 공부/Java

[Java] enhanced for-loop

내 머리속 어딘가 2025. 5. 31. 15:52
반응형

코테를 풀다가 어떤 배열을 선언하고,

해당 배열에 입력값을 대입해야되는 상황이 있었다.

 

매번 for(int i = 0; i < list.length(); i++) { } 이렇게 쓰기가 싫어서

enhanced for문을 사용해보려고 아래와 같이 코드를 작성했다.

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int[] angle = new int[3];

        for(int x : angle) x = Integer.parseInt(br.readLine());
    }
}

 

그니까 나는 angle의 요소를 하나씩 사용해서 해당 값에다가 읽어온 값을 대입하려고 했던 것이다.

 

그런데 출력을 해보니 angle에는 모든 값들이 초기값 그대로 0으로만 출력이 되었다.

 

 

지피티에게 도움을 청했다.

왜 값이 입력되지 않는 것일까?

 

원인은 간단했다.

enhanced for문이 어떻게 동작하는 것인지 제대로 파악하지 못한 것이다.

for(int x : list) { ]

이 줄이 의미하는 동작은

 

int x를 선언하고, list 내부에 있는 값을 하나씩 순차적으로 가져와서 x에 대입한 후 for문 내부의 구문을 실행하고

list 의 요소들을 모두 사용했다면 반복을 종료해라

대충 이런 의미인 것이다.

 

따라서 나는 list내부의 요소에 값을 입력한 것이 아니고,

해당 값을 복사한 새로운 변수 x에 값을 대입 한 것이기 때문에 list내부의 값에는 변화가 없었던 것이다.

 

때문에 enhanced for문은 배열 내부의 요소들을 읽어올 때에만 사용을 하는 것이 좋고,
내부 요소의 값을 변경하기 위해서는 일반 for문을 사용하는 것이 좋겠다.

반응형