T_era

[JAVA] 반복문 본문

Programing/Java

[JAVA] 반복문

블스뜸 2025. 3. 28. 16:53

(do)While의 장점

  • 명확하지 않은 조건일 때 사용하기 좋다

for의 장점

  • 명확한 조건을 가지고 있을 때 사용하기 좋다

예1) while의 사용 용도

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        while(true){
            System.out.println("종료하시겠습니까? Y/N");
            if(sc.nextLine().equals("Y")) {
                break;
            }
        }
    }
}

  • 이 코드와 같이 사용자가 임의로 조작해야하는 경우는 while을 사용하는 것이 편리하다
  • 마찬가지로 do-while의 경우도 한번은 무조건 실행하는 것일 뿐 사용하는 목적은 비슷하다

예2) while의 사용 용도 part 2

public class Main {
    public static void main(String[] args) {
        
        int i = 0;
        while(i < 10){
            System.out.println(i);
            i++;
        }

        System.out.println(i + "번 반복했습니다!");
    }
}

  • 카운터변수를 이후에 이용할 필요가 있을 때 사용하는 것도 좋은 방법이다.
  • 단, for문이라고 못할 것은 아니기 때문에 이 부분은 취향의 영역

foreach문

  • 배열, 리스트, 문자열을 대상으로 반복문을 수행해야하면 사용하기 좋다
public class Main {
    public static void main(String[] args) {
        char[] myChar = {'a', 'b', 'c'};
        // 예1
        for(int i = 0; i < myChar.length; i++){
            System.out.println(myChar[i]);
        }
        // 예2
        for(Character c : myChar){
            System.out.println(c);            
        }
    }
}
  • 예1 코드의 경우는 배열의 크기를 구해서 정수형 변수에 매칭되는 값을 찾는다
  • 예2 코드의 경우는 배열의 값을 하나씩 바로 가져온다

장점) 코드가 간결해지고 편의성이 더해진다

단점) 어떤 배열, 리스트를 사용하냐에 따라서 성능차이가 발생한다

*** 배열의 경우 일반for문이 빠르게 작동하고, list의 경우 비슷하다, linkedList는 foreach가 더 빠르다** *

  • 결국 foreach가 메모리를 통한 값을 가져오는 행동이라 메모리 영역에서 작동하는 linkedList에서 효율적이게 된다

중첩 반복문의 문제점

  • 단순 계산으로 시간복잡도가 O(n^2)이 된다.
  • 가벼운 코드면 크게 상관없지만 무거워질 수록 유의미한 실행속도 차이가 난다
  • 이에 대한 대체 방법으로 재귀 함수가 있다. (재귀함수의 시간복잡도는 O(NlogN) 반복이 있는 경우에서 가장 효율적인 시간복잡도)←이 부분의 알고리즘은 도움이 많이 되기 때문에 한번쯤 공부해보는 것을 추천한다

LinkedList

  • 일반 배열,리스트는 0번방 1번방 연결을 메모리의 바로 다음 칸에 한다
  • LinkedList는 각 방마다 메모리가 연관성이 없이 연결되어있다.

'Programing > Java' 카테고리의 다른 글

[JAVA] HashSet이란???  (0) 2025.03.28
[JAVA] 스코프와 형변환  (0) 2025.03.28
[JAVA] 조건문  (0) 2025.03.28
[JAVA] 연산자  (0) 2025.03.28
[JAVA] 변수  (0) 2025.03.28