Java (조건문과 반복문_ if와 switch, for와 while)

yihyun·2024년 7월 24일

Java

목록 보기
3/12

조건문(condition statement)

1. if

조건문은 만약에(if)를 해주는 것이다.

예를들어 누군가에게 심부름을 시킬 때 어떠한 물건을 사와야 하는지, 그 물건이 없을 때 어떻게 행동해야 하는지를 알려주지 않으면 그 심부름을 간 사람은 자리에서 정지해버릴 것이다.

사람은 어느정도 상황에 맞춰 행동이 가능하지만 컴퓨터는 이러한 부분을 상세하게 명령해주어야 하기 때문에 우리는 if문을 잘 활용해야 한다.

if 는 만약에 어떤 상황(조건)이 일어 났을 경우(true) 특정 내용({...})을 실행 하도록 하는 것으로 작성 방법은 아래와 같다.

if(조건문) {
	명령문
}

만약 cup이 있으면 사온다 라는 것을 가정한다면 이렇게 작성해볼 수 있다.

int cup = 1;

if(cup > 0) {
	System.our.println("컵을 사온다.");
}

위에 코드를 보면 cup가 1개 이상이 있다면 "컵을 사온다" 라는 명령을 했다.
현재 cup은 1개가 있으므로 "컵을 사온다"가 출력될 것이다.

2. else 와 else if

하지만 만약 cup이 없다면 즉 조건이 하나가 아닌 조건이 여러개일 경우에는 어떻게 해야할까?

방법은 여러가지가 있을 수 있는데 첫 번째 방법은 if문을 여러번 사용하는 것이다.

if(조건) {명령문}
if(조건) {명령문}

하지만 이런 형태로 작성할 경우 if문 사이에 틈이 전혀 없어야 한다.
만약 틈이 있다면 그 사이로 빠져버리는 위험이 있기 때문에 사이에 공백이 생겨도 괜찮은지 판단해줘야 한다.

빈틈이라는 것은 만약 C < 1 일 경우 A를 출력 하고 C > 1 일 경우 B를 출력하고자 했을때 C = 1 인 상황은 해결할 수 없는 등의 상황을 말한다.

그렇다면 if를 여러번 쓰지 않기 위해서 elseelse if를 사용해줄 수 있다.

사용방법은 다음과 같다.

// esle 사용
if(조건문) {
	명령문
} else {
	명령문
}

// else if 사용
if(조건문) {
	명령문
} else if(조건문) {
	명령문
} else { // else는 생략이 가능하다.
	명령문
}

여기서 else if 는 만약에 1번이 없으면 2번이 있는지 확인하고, 2번도 없으면 3 번이 있는지 확인해서 출력하는 등의 작업을 할 수 있고, else는 그 중 아무것도 없으면 esle 뒤에 있는 명령문을 출력하도록 작성해줄 수 있다.


3. switch

또 다른 조건문은 switch문이 있는데 switch문은 if문과 달리 특정 조건을 확인할 때에만 사용할 수 있다.

switch 에는 case , break , default 를 사용해서 조건을 확인하고, 조건에 해당하는 명령을 실행한다.

switch() {
	case:
    	해야할 일
        break;
    default :
    	해야할 일
        break;
String item = "커피";

switch(itme) {
	case "콜라" :
    	System.out.println("콜라가 나왔습니다.");
        break;
    default :
    	System.out.println("해당 음료는 없습니다.");
        break;
}

사용된 코드들의 역할을 자세하게 살펴보면...

case : case 뒤에는 값을 작성하고 :를 붙여준다. 그리고 값이 일치할 경우 해야하는 일을 작성한 후 그 일을 끝마쳤으면 빠져나오는 형식으로 실행된다.

break : java에서는 코드블록 안에 있는 코드는 무조건 실행이 된다. 그렇기 때문에 break를 작성해주지 않으면 일치하는 값을 찾은 이후부터 코드블럭이 끝날 때 까지 실행이 되게 될 것이다. 그렇기 때문에 break를 사용해서 명령을 수행한 후 해당 코드블록을 빠져나올 수 있도록 해주어야 한다.

default : 모든 case가 일치하지 않을 경우 실행되는 것이다.

*switch 는 java 1.6 이하에서는 문자열을 사용할 수 없다.


4. if문과 switch문의 차이점

그렇다면 우리는 어떠한 경우에 if 를 사용하고 어떠한 경우에 switch를 사용해야 할까?

이 질문에 답을 하기 위해서는 먼저 이 둘의 차이점을 알아봐야 한다.

if 문은 실행할 경우 조건을들 비교하면서 들어가게 되는데, switch 문은 비교가 아닌 해당하는 값으로 바로 이동해서 실행된다.

그렇기 때문에 switch 가 더 빠른 속도를 가지고 있다.

하지만 비교하지 않고 바로 찾아가기 위해 모든 값을 메모리에 저장해두어야 하기 때문에 메모리 저장 공간을 조금 더 사용한다는 단점이 있다.


예를 들어보면 우리가 게임을 할 때 캐릭터를 이동하거나 공격을 하는 등의 조작에는 시간 텀이 있으면 안된다. 내가 몬스터를 공격했는데 그 공격이 1초 후에 실행된다면 내 캐릭터는 이미 사망했을 수도 있기 때문에 바로 답을 찾아가는 ```switch``` 문이 사용되어야 한다.

하지만 만약 몬스터에게 피격을 당했을 경우 내 캐릭터의 레벨과 착용한 아이템 등에 따라서 내가 받는 데미지가 달라지게 되는데, 이런 조건이 필요할 때에는 if 문을 사용해줄 수 있다.

if 는 조건이 만족되면 코드블록이 실행되고, 조건이 만족되지 않을 때 else를 사용하지만, switch 는 특정 case 마다 특정 내용을 실행한다.

  • 하나씩 비교하면서 들어가기 vs 바로 이동하기
  • 조건을 달 수 있는지 vs 답을 넣어줘야 하는지



반복문 (loop statement)

반복은 자동화를 위해 사용한다.

무언가 반복된 행동을 해야 하는 경우 계속해서 명령하는 것이 아닌 반복문을 사용해주면 한 번의 명령만으로 내가 중단을 원할 때까지 행동을 반복할 수 있다.

반복문에는 for 문과 while 문이 있는데, 반복하는 값이 정해져 있을 경우 for문 반복횟수가 정해져있지 않은 경우 while 문을 사용해준다.


1. for 문

for 문은 반복하는 횟수가 정해져 있을 때 사용해줄 수 있는데 사용 방법은 아래와 같다.

for(초기값; 조건; 증감;){ 
	해야할 일
}

만약 철수에게 물을 10잔 떠오라는 명령을 내릴 때 그 말을 10번 하는 것이 아닌 for문을 이용해 주면 한 번의 명령으로 10번을 반복하게 할 수 있다.

for(int i = 0; i < 10; i++){
	System.out.println("물" + i + "컵 떠 왔습니다.");
}

2. 이중 for문

그렇다면 물을 10잔 떠오는데 물 1잔 당 커피믹스를 2개 넣어오라고 시키기 위해서는 어떻게 해야할까?

이럴 때에는 이중 for문을 사용해 줄 수 있다

물 한 잔에 커피믹스를 2개 넣어야 하니 물을 뜨러갈 때 2번 커피믹스를 넣도록 코드를 구성할 수 있다.

for(int i = 1; i <= 10; i++){
	System.out.println("물" + i + "컵 떠 왔습니다.");
    for(int j = 1; j <= 2; j++){
	    System.out.println("커피믹스" + i + "개 추가");
    }
}

이렇게 해주면 내가 원하는 명령을 전달할 수 있을 것이다.

하지만 for 문을 중첩해서 사용하는 것에는 주의가 필요하다!

100번 반복하는 것을 또 100번 반복하고 또 100번 반복하다 보면 반복이 너무 커져 성능이 저하될 수 있으므로 for 문은 최대 2번 까지 사용하는 것이 좋다.

2. while 문

while 문은 조건을 만족하면 반복한다.
내가 그만이라고 말하지 않는다면 계속해서 반복한다는 것이다.

즉 반복 횟수가 정해지지 않은 경우 유용하게 사용할 수 있다.

그래서 while문은 끝나지 않은 조건(true)을 주어주게 되면 프로그램이 종료될 때 까지 계속해서 동작하는 무한루프에 빠지게 되므로 주의가 필요하다.

무한 반복이 되도록 while 을 작성하고, 그 아래에 코드를 입력해주면 unrecheable code 에러가 발생하는데 이는 위의 while 문이 무한으로 반복되기 때문에 아래 코드까지 닿을 수 없다는 뜻이다.

해결방법에는 2가지가 있다.
1. 아래 코드를 지운다.
2. 무한반복을 끝낼 수 있는 조건을 정해준다. (while 조건, if조건에 만족하면 break)

3. do while

while는 일단 조건을 먼저 체크하지만 do while은 일단 실행하고 조건을 체크한다.

그렇기 때문에 조건을 만족하면 아무런 문제가 없지만 조건이 만족하지 않으면 문제가 생긴다.

예를들어 먼저 카드를 찍는 선불제 버스와 내릴 때 카드를 찍는 후불제 카드가 있다고 가정해보자

만약 A, B 두 명의 사람이 버스를 이용할 때 두 사람 모두 잔액이 있을 경우 아무런 문제가 없겠지만 만약 잔액이 없다면 버스를 타지 못하는 사람과 그럼에도 타는 사람이 생기게 된다.

whiledo while은 조건이 같을 때에는 같은 결과를 내지만 조건에 맞지 않는 경우 다른 결과를 내게된다.


break 와 continue

1. break

위에서 switch 문을 살펴볼 때 함께 나왔던 break 는 해당 코드블록을 빠져다가는 역할을 수행한다.

// i 가 3일 경우 중단하고 빠져 나오기
for (int i = 0; i < 10; i++) {
	if (i == 3) {
		break;
	}
	System.out.println(i);
} // 0, 1, 2 출력

만약 위 코드에서 3까지 출력하고 3 이후부터 break를 통해 출력을 멈추고 싶다면 (코드블록을 빠져나오고 싶다면) 출력문을 if 위로 옮겨주면 된다.

2. continue

그렇다면 아예 빠져나가는 것이 아닌 특정한 값만 출력하지 않고 싶다면 어떻게 해야할까?

이런 경우에는 continue를 사용해주면 된다.

break 가 코드블록을 아예 빠져나가는 거라면 continue는 무시하고 지나치는 것이다.

for (int i = 1; i <= 10; i++) {
	if (i % 3 == 0) {
		continue;
	}
	System.out.println(i);
} // 1, 2, 4, 5, 7, 8, 10 출력
profile
개발자가 되어보자

0개의 댓글