[JAVA] 내가 while문보다 for문을 선호하는 이유(속도, 구조 비교)

토끼는 개발개발·2024년 6월 1일
0

Java

목록 보기
4/32
post-thumbnail
post-custom-banner

오랜만에 쓰는 포스팅이다.
Java강의를 들으며 오랜만에 쓰고 싶은 주제가 생각나 포스팅을 시작해본다.

코테 좀 해봤다는 사람이면, 특정한 경우를 제외하고는 효율성 테스트를 통과하기 위해 while문보다 for문을 사용할 것이다. for문이 효율성면에서 훨씬 유리하기 때문이다.

결론부터 말하자면, for문이 while문보다 속도, 구조적으로 유리하다.


📌 1. for문과 while문의 구조적 차이(스코프 관점)


지역변수는 변수가 선언된 코드블록내에서만 생존한다.
자신이 선언된 코드 블록을 벗어나면 제거되어 접근할 수 없다.

가독성이 좋은 코드를 짜기 위해서는 변수가 생존해야하는 코드블록을 잘 파악하고 선언해야한다.
코드가 복잡할수록 고려해야할 변수가 많아지므로 변수의 적절한 선언위치는 필수적이다.

이제 for문과 while문의 변수 선언 위치를 살펴보자.

//for문
public class For2 {
 public static void main(String[] args) {
 	int sum = 0;
 	int endNum = 3;
	for(int i=0; i<2; i++){
    	sum = sum + i;
    } //for문은 초기식에 직접 변수 선언
  }
}


//while문
public class While1 {
 public static void main(String[] args) {
    int sum = 0;
    int i = 1;
    int endNum = 3;

    while (i <- endNum){
        sum = sum + i;
    }
  }
}

- for문 : 초기식에 직접 변수 선언 (변수 i의 스코프 : for문 안으로 한정)
- while문 : while 코드블록 바깥에 선언 (변수 i의 스코프 : main() 메서드 전체)

따라서, 변수 i와 같이 for문안에서만 사용되는 카운터 변수가 있다면 while문보다는 for문을 사용해 스코프의 범위를 제한하는 것이 메모리 사용과 유지보수 관점에서 더 좋다.


이에 대한 차이는 코드의 복잡성이 증가할수록 더 커진다.
이제는 이로인한 속도의 차이를 알아보자.



📌 2. for문과 while문의 속도 차이

for문이 while문보다 미세하지만, 빠른 속도를 가지고 있다.

출처: for문과 while문의 속도 비교 실험


사실, for문과 while문의 속도 차이는 유의미다고 볼만큼 크게 나지 않는다.
그럼에도 효율성 테스트를 하나라도 더 통과해야하는 코테러에게는 유의미하다.

이 미세한 속도차이는 (1)에서 설명한 구조적차이에 있다.

for문은 초기식에 직접 변수를 선언하여 사용하므로 반복문이 끝나면 바로 할당된 메모리를 해제하는 반면 while문은 반복문에 활용되는 변수를 계속 가지고 있기 때문이다.




한줄메모

java가 메모리 할당 및 자원관리에 매우 엄격한 언어인만큼(javascript는 훨씬 유연),
개발자도 이를 활용하여 효율성 및 가독성이 좋은 코드를 짜야한다는 생각이 들었다.

별로 중요한 내용의 포스팅은 아니지만,
이런 사소한 차이가 더 좋은 코드를 만들고, 코드가 더 복잡해질수록 중요해지는 부분이라고 생각하기 때문에 포스팅을 작성해보았다.

profile
하이 이것은 나의 깨지고 부서지는 기록들입니다
post-custom-banner

0개의 댓글