제어문이란?
흔히 제어문이라 불리는 조건/반복문은 코드의 실행 흐름을 제어한다고 하여 제어문이라고 불린다.
JAVA에서 코드의 실행흐름은 위에서 아래로 내려가는 흐름을 가지고있는데 이 전체 흐름에서 제어문을 이용해
다양한 코드의 흐름이 발생하게 된다
어떠한 조건에의해 코드의 실행이 중간에 멈추어 다시 제어문 코드블럭으로 돌아갈지 아니면 제어문 코드블럭을 빠져나와
정상적인 흐름으로 돌아갈지는 제어문을 어떻게 사용하느냐에 달려있다.
제어문 안에서 또다른 제어문도 사용이 가능하며 이를 이용해 개발자가 원하는 다양한 코드의 흐름을 만들수 있다.
If문을 사용하면?
조건문의 하나인 if문을 예제를 통해 코딩해 보았는데
if문을 사용하려면 if 다음 ()안에 조건식을 적고 그 조건식에 맞으면 어떠한 코드가 실행이 되고 맞지 않다면 제어문을 빠져나와 정상흐름의 코드로 돌아가 실행이된다.
if문에 조건식을 작성할 때에는 값을 산출하는 식이나 boolean 변수가 올 수 있는데 코드로 작성하면
if(i < 10) {
System.out.println("i는 10보다 작다.");
}
if(a == true) {
System.out.println("a는 참이다.");
}
이런 형식으로 작성하거나 boolean 변수를 만들어 조건식에 넣을 수 있다.
if문에서 사용하는 else 블럭이 있는데 이는 if의 조건식이 참일때 실행한다면 else 블럭을 사용해 false일때 사용할
코드를 작성해 좀더 간결하고 가독성이 있는 코드로 만들수도 있다.
if(a < 20) {
System.out.println("a는 20보다 작다.");
} else {
System.out.println("a는 20보다 크다.");
}
이런 형식으로 true일경우 "a는 20보다 작다" 를 출력하고 false일 경우에는 "a는 20보다 크다"를 출력하는걸 확인할 수 있다.
하지만 좀더 많은 조건식을 작성하고 싶다면 else if를 사용하여 조건식의 개수 제한 없이 사용이 가능한데
int money = 300;
if(money >= 300) {
System.out.println("넉넉하구만.");
} else if(money >= 200) {
System.out.println("조금 부족한걸...");
} else if(money >= 100) {
System.out.println("나는 거지야...");
} else {
System.out.println("돈을 벌어야해!");
}
조건식 3개를 통해 코드의 실행흐름을 제어했는데 아직까진 어려운 점은 나타나지 않아서 수월하게 개념을 잡고 넘어갈수 있었다.
또한 if문 안에 if문을 작성해서 중첩된 if문을 사용할 수 있는데
int coke = (int)(Math.random()*10) + 6
System.out.println("가격:" + coke);
String rank;
if(coke >= 12) {
if(coke >= 15) {
rank = "A";
} else {
rank = "B";
}
} else {
if(coke >= 6) {
rank = "C";
} else {
rank = "D";
}
}
System.out.println("coke의 rank는:" + rank);
우선 Math.random() 메소드를 사용해서 5 ~ 15까지의 정수를 하나 뽑아서 조건식에 대입하면 바깥의 if문에서 1차로 구분되어 나누어 지게 되고 그중 하나의 조건에 부합하면 안쪽의 if문의 조건식에 대입을 하게되고 그 결과에 따라 rank의 결과가 출력되도록 코드를 작상해 보았다.
단 2개의 조건식만 중첩했을 뿐인데 상당히 복잡하다고 느껴지는 실행흐름이 발생되었고 이를 해석하면서 코드를 작성했지만 다시보면 살짝 어지럽다.
좀더 많이 사용해보고 익숙해져야 이 흐름에 적응하고 좀더 원활히 작성할수 있을 것 같다.
SWITCH 문
if문에서 조건식의 결과는 true와 false 2가지의 결과만 가지고 있어 다양한 경우의 수가 많아지면 코드가 길어지고 else if 를 무한 반복해야 된다는 단점을 가지고있다.
switch문에서는 case로 변수의 값에 따른 다양한 실행결과를 얻을 수 있어 같은 상황에서의 if문보다 코드가 간결해진다는 장점을 가지고있다. 물론 항상 코드의 흐름과 필요에 의해서 if문과 switch문을 번갈아 가며 사용도 가능하다.
그림과 같이 switch문을 사용할 경우에는 case 로 어떠한 값일 경우의 코드를 실행하도록 다양한 case를 작성하며 사용을 할 수 있다. 맨 밑의 default는 값에 해당하는 case가 없을경우 default의 실행문을 실행하다.
int a = (int)(Math.random()*6) + 1;
switch(a) {
case 1:
System.out.println("주사위 숫자가 1입니다.");
break;
case 2:
System.out.println("주사위 숫자가 2입니다.");
break;
case 3:
System.out.println("주사위 숫자가 3입니다.");
break;
case 4:
System.out.println("주사위 숫자가 4입니다.");
break;
case 5:
System.out.println("주사위 숫자가 5입니다.");
break;
default:
System.out.println("주사위 숫자가 6입니다.");
}
if문에서 사용했던 Math.random() 메소드를 사용해 주사위를 굴릴경우 숫자의 경우의 수에 따라 case를 만들었고 마지막 default로는 숫자 6일경우의 수를 만들어 코드를 작성해 보았다.
case마다 있는 break라는 코드를 작성해주지 않는다면 어떠한 숫자가 나오던지 모든 case의 결과값을 출력해 break를 작성해 하나의 case에 해당하는 숫자가 나오고 그에 따른 결과값이 출력되면 거기서 코드를 종료시킨다는 의미를 가진다.
switch문에서 ()안에 오는 변수는 정수타입(byte, char, short, int, long)과 문자열(string) 변수를 사용할 수 있다.
확실히 간단하더라도 코드로 작성해 만들어보면서 손과 눈에 java코드가 익숙해진다는 느낌을 받을수 있었다.
java12 버전부터는 break문을 없애고 표현식(Expressions)이라는 것을 사용해 더욱 간단하게 작성할 수 있는데
int a = (int)(Math.random()*6) + 1;
switch(a) {
case 1 -> {
System.out.println("주사위 숫자가 1입니다.");
}
case 2 -> {
System.out.println("주사위 숫자가 2입니다.");
}
case 3 -> {
System.out.println("주사위 숫자가 3입니다.");
}
case 4 -> {
System.out.println("주사위 숫자가 4입니다.");
}
case 5 -> {
System.out.println("주사위 숫자가 5입니다.");
}
default -> {
System.out.println("주사위 숫자가 6입니다.");
}
}
이런식으로 화살표와 중괄호를 이용해 좀더 간결하고 가독성도 있는 형식으로 코드를 작성할 수 있다.
이 표현식을 사용하여 스위치된 값에 변수를 직접대입도 할 수있는데 중괄호를 사용한다면 yield키워드로 값을 지정해야 하지만 중괄호 없이 작성할 경우 변수값만을 대입할 수도 있다.
(yield키워드는 java13버전부터 사용이 가능하다.)
'백엔드 > JAVA' 카테고리의 다른 글
새로운 학원을 신청한 후... (1) | 2023.03.15 |
---|---|
JAVA 조건/반복문 #2 (0) | 2023.03.14 |
JAVA 연산자에 대해 (0) | 2023.03.09 |
JAVA 변수 (2) (0) | 2023.02.22 |
JAVA 변수 (0) | 2023.02.20 |
댓글