제어문
Java의 핵심 명령어인 제어문에 대해 알아보자.
자바를 실행하면 코드를 읽는 방향은 위에서 아래로, 왼쪽에서 오른쪽이다.
이 방향으로 순서가 정해지고 그에 따라 결과값이 달라지기도 한다.
하지만 이 방향을 무조건적으로 따르기엔 단순 반복이 너무 많아져서 비효율적인데다가 지저분하기때문에, 이 흐름을 통제해서 코드를 더욱 간결하게 정리해주는 제어문이 나타난 것이다.
1) 조건문
첫번째 제어문으로 조건문이 있다.
조건문에는 if, if~else, if~else if, switch~case가 있다.
if(조건문){ // 조건식이 true일때 실행
...
...
}
가장 기본적인 if문의 형태는 이렇다. 조건문의 true/false여부가 중괄호 안에 있는 명령의 실행여부를 결정한다.
예시로 살펴보면 이렇다.
public class if {
public static void main(String[] args) {
/* 조건문 - if 형식)
* if(조건식){ // 관계연산자, 논리연산자 숙지 필수!!
* 문장들;
* ...
* ...
* }
*/
int x=20;
if(x>10) { // 20 > 10 --> if(1) --> run
System.out.println("10보다 큰 수입니다.");
System.out.println("x: " + x); // x: 20
} // 조건이 true일때만 실행된다
System.out.println("오늘은 힘들고 어려워요! 하지만 재밌습니다!\n");
int y=50;
if(y>0 && y<100) { // 50 > 0 && 50 < 100 --> if(1) --> run
y+=200; // y=y+200
System.out.println(y + "\n");
}
int num=52;
int value=24;
if(num>value) { // 52 > 24 --> if(1) --> run
System.out.println("num > value");
}
if(num==value) { // 52 == 24 --> if(0) --> don't run
System.out.println("num == value");
}
if(num<value) { // 52 < 24 --> if(0) --> don't run
System.out.println("num < value");
}
int su=20;
if(su%2 == 0) { // 20을 2로 나눈 후 나머지가 0 --> if(1) --> run
System.out.println("짝수입니다.");
}
if(su%2 != 0) { // 20을 2로 나눈 후 나머지가 1 --> if(0) --> run
System.out.println("홀수입니다.");
}
}
}
가장 중요하게 봐야 할 부분은 당연히 조건문이다. 조건문이 true일 때만 코드가 실행되고 false일 때는 아예 존재하지 않은 취급을 해주기 때문이다.
if~else와 if~else if도 알아보자.
// if ~ else
if(조건식){ // if(1)일때
문장들;
...
...
}else{ // if(0)일때
문장들;
...
}
// if ~ else if
if(조건식){
문장들;
...
}else if(조건식){
문장들;
...
}else{
문장들;
...
}
if(1)은 조건식이 true일때, if(0)은 false일때를 말한다.
기본적인 if문의 조건식이 false일때는 코드 자체를 넘어가버렸다면, if~else문에서는 false일때의 명령어를 추가해서 무조건 실행하게 되는 코드로 바뀌었다.
더 나아가서 if~else if문에서는 조건식을 true/false에서 진화시켜서 원하는 만큼 경우의 수를 추가할 수 있게 되었다.
예시로 살펴보자.
public class if_else {
public static void main(String[] args) {
//if~else 예시
int a=-24;
if(a>0) { // -24 > 0 --> if(0) --> don't run
System.out.println(a + "는 양수입니다.");
}else { // if(1) --> run
System.out.println(a + "는 음수입니다.");
}
if(a%2==0) { // -24%2 == 0 --> if(1) --> run
a+=100;
System.out.println(a + "짝수입니다.");
}else {
a*=200;
System.out.println(a + "홀수입니다.");
}
// if~else if 예시
// 학년 예
int value=3;
if(value==1) { // 3 == 1 --> if(0) --> don't run
System.out.println("1학년입니다.");
}else if(value==2) { // 3 == 2 --> if(0) --> don't run
System.out.println("2학년입니다.");
}else if(value==3) { // 3 == 3 --> if(1) --> run
System.out.println("3학년입니다.");
}else if(value==4) {
System.out.println("4학년입니다.");
}
}
}
※ 조건문 응용
if는 중첩해서 사용할 수 있다.
여러개의 조건문을 겹쳐서 더 구체적인 조건을 완성시켜보자.
public class if_applied {
public static void main(String[] args) {
// 조건문 응용 예시
int num=150; // 양수 or 음수, 200보다 큰 수 작은 수?
if(num>0) { // 150 > 0 --> if(1)
System.out.println("양수입니다.");
if(num>200) { // 150 > 200 --> if(0) --> don't run
System.out.println("200보다 큰 수 입니다.");
}else { // 150 < 200 --> if(1) -->run
System.out.println("200보다 작은 수 입니다.");
}
}else if(num<0) {
System.out.println("음수입니다.");
}
System.out.println("");
// 학점 예제 A : A+ >= 97, A0 96 ~ 94, A- <= 93, B : B+ B0 B-
int score=84;
String grade=null;
if(score>=90) {
if(score>=97) {
grade="A+";
}else if(score>=94 && score<=96) {
grade="A";
}else if(score<=93) {
grade="A-";
}
}else if(score>=80) {
if(score>=87) {
grade="B+";
}else if(score>=84 && score<=86) {
grade="B";
}else if(score<=83) {
grade="B-";
}
}else if(score>=70) {
if(score>=77) {
grade="C+";
}else if(score>=74 && score<=76) {
grade="C";
}else if(score<=73) {
grade="C-";
}
}else if(score<70) {
grade="F";
}
System.out.println("학생의 점수는 " + score + "이고, 학점은 " + grade + "입니다");
}
}
마지막으로 switch~case를 알아보자.
switch(조건식){ // 정수형 또는 문자열, 실수 및 논리관계 연산자 사용X
case 값:
문장들;
...
break;
case 값:
문장들;
...
}
if문과 유사한 면이 있지만, 한 가지 다른 점은 조건문의 결과값이 될 수도 있는 case들을 중괄호 안에 하나하나씩 나열한다는 점이다.
또 한가지 차이점은 if문의 경우 조건이 true가 되는 경우의 명령어를 실행한 후 조건문 전체를 빠져나오는 기능이 기본적으로 탑재된 반면, switch문의 경우엔 그 기능이 없다는 점이다.
만약 맨 위에 있는 case의 값이 조건식의 출력값이라서 실행을 하면, 그 밑에 있는 모든 명령어들도 다 같이 실행되어버린다.
이 때 등장하는 녀석이 break다. break는 위에 얘기한 if문에 기본적으로 탑재된 그 기능의 역할을 해낸다. 마치 집 나올때 에어컨을 끄는 리모컨 같은 명령어라고 볼 수 있겠다.
public class switch {
public static void main(String[] args) {
// switch 예시
int su=3;
switch(su) {
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;
}
}
'Java' 카테고리의 다른 글
10.20.(목) Java-07: 배열 (0) | 2022.10.21 |
---|---|
10.20.(목) Java-06: 제어문(반복문) (0) | 2022.10.20 |
10.18.(화) Java-04: 연산자 예시 (0) | 2022.10.19 |
10.18.(화) Java-03: 연산자 (0) | 2022.10.19 |
10.18.(화) Java-02: 자료형 (0) | 2022.10.19 |