프로그래밍 한다 는 것은 어떤 기능을 처리하기 위한 명령들을 구현하는 것이다.
프로그램을 실행한다는 것은 프로그램에서 구현한 명령들을 실행하는 것을 의미한다.
조건문은 명령문을 실행시킬 때, 특정 조건에 따라 다음에 실행할 명령문을 지정하기 위해서 사용한다.
조건문을 알면 프로그램의 실행 흐름을 조절할 수 있다.
조건문을 작성했을 때의 실행흐름은 아래와 같다.
조건문을 만났을때 조건을 검사해서 true이면 실행문1을 수행하고, false 이면 실행문2를 수행하게끔 구현한다.
좀 더 구체적인 예시를 들어보자.
개발자가 시험성적에 관련한 프로그램을 구현했다고 가정하자.
성적이 70점보다 높은 학생은 통과이고, 아닌 학생은 재시험 처리를 할 것이다.
이럴 때 조건문을 사용한다
같은 그림을 적용시켜 이해해보자.
점수>70 인 조건문을 만났을때 true이면 통과, false이면 재시험 이라는 실행문을 수행한다.
이처럼 자바에서는 조건에따라 실행 흐름을 달리할 수 있다.
이러한 조건문은 If~else 와 Switch~case 가 있다.
지금부터 각각에 대해서 자세히 알아보자.
If~ else if~ else 문
if~else 문을 쓰는 형식은 다음과 같다.
if ( 조건문 ) { 조건문이 true 일때 수행 할 실행문 }
else { 조건문이 false 일때 수행 할 실행문 }
if 뒤 () 괄호 안에 조건식을 쓴다. 비교연산자를 이용한 조건식이 대부분이다.
그리고 () 안에 써준 조건식이 true 일 때 수행할 문장을 if문의 { } 안에 작성한다.
() 의 조건식이 false 일 때 수행할 문장을 else 의 { } 안에 작성한다.
아래의 예시는 점수가 70점보다 높을 때 "통과"이고, 낮을때 "재시험"인 조건문을 구현했다.
성적을 나타내는 변수를 타입은 int, 변수명은 grade 로 지정하고 60으로 초기화했다.
grade가 70점 이상일시 "통과" 를 출력하고 그렇지 않을시 "재시험" 을 출력하는 조건문을 작성했다.
grade에는 60이 저장되었기 때문에 조건문에서 false 가 도출되어 else문의 실행문을 수행했다.
true이면 if 문의 실행문을 수행하고, false 이면 else 문의 실행문을 수행한다.
else를 꼭 쓰지 않아도 된다.
만약 else문을 쓰지 않고 if (조건문) 만 작성한다면, 조건문이 false 일때는 그냥 if 문의 바깥으로 넘어간다.
else문은 조건문이 false 인 경우의 실행문까지 지정해주고 싶을 때 쓴다.
만약 조건을 여러개를 쓰고싶다면?
else if 를 추가로 사용한다.
else if 를 사용하는 형식은 다음과 같다.
if ( 조건문 1 ) { 조건문1이 true 일때 수행 할 실행문 }
else if ( 조건문 2 ) { 조건문2가 true 일때 수행 할 실행문 }
else { 조건문 1과 2 가 모두 false 일 때 수행 할 실행문 }
예시는 아래와 같다.
grade>70 일때 "통과", grade<20 일때 "탈락", 그 외는 "재시험" 인 조건문을 작성했다.
이런식으로 여러 개의 조건을 적용할 때 else if 를 사용할 수 있다.
else if 문은 if문과 else문 사이에 여러 번 써도 상관없다.
단. if 문와 else 문은 단 한번만 작성 가능하다.
Switch~case 문
if ~ else 문은 여러 개의 조건을 지정하려면 else if 문을 계속 생성하며 코드가 길어지는 반면,
switch~case 문은 비교적 코드가 쉽고 간단한게 장점이다.
if 문을 switch 문으로 변환할 수 있고, switch 문을 if 문으로 변환할 수 있지만
'모든' if 의 문장을 switch 로 바꿀 수는 없다.
if 는 비교연산자를 통해 범위를 지정하는 조건식을 작성 가능하지만
switch 문은 변수의 값 어떤 수치나 문자로 명시되는 경우로 분류되어 상대적 제약이 있기 때문이다.
예를들어, if 문은 조건식에 if (a > 20 && a < 50) 와 같이 포괄적인 범위 지정이 되지만
switch문은 switch (a) { case 20 : 실행문; } 이렇게 a가 20일때, 30일때 등등 딱 명시되는 경우만 분류 가능하다.
형식은 다음과 같다.
switch ( 변수 ) {
case 값1 : 실행문1 ;
case 값2 : 실행문2 ;
case 값3 : 실행문3 ;
default : 실행문 4 ;
}
switch 의 () 안에 변수를 지정하고,
변수가 값1 일 때 실행문1, 실행문2, 실행문3, default 를수행하고
값2 일 때 실행문2, 실행문3, default 를 수행하고
값3 일 때 실행문3, default 을 수행하고
값1, 값2, 값3 이 전부 아닐 때 default 의 실행문4 를 수행한다.
아래 예시들을 통해 switch~case 에 대해 이해하고, if문과의 차이점에 대해 알아보자.
처음 접하는 switch 문은 어려울 수 있으니 코드를 자세히 해석 해 보겠다.
switch() 의 괄호 안에 있는 grade가 조건문의 기준이되는 변수이다.
case 뒤에 쓴 숫자들은 grade의 조건값이다.
case 1 은 "grade가 1 이라면" 의 의미이다.
case 2 는 "grade가 2 이라면" 의 의미이다.
case 3 은 "grade"가 3 이라면" 의 의미이다.
default 는 "case로 적어준 값이 모두 아닌 경우라면" 의 의미이다.
여기서 grade는 2로 초기화 해주었으니,
결과는 case 2 에 해당한다.
case2, case3, default 의 실행문을 수행하여 출력 된 모습이다.
아래는 동일한 코드에 grade를 3으로 초기화 했을때의 결과이다.
grade는 3으로 초기화 해주었으니,
결과는 case 3 에 해당한다.
case3, default 의 실행문을 수행하여 출력 된 모습이다.
그러니까 결국, switch 는 내가 지정한 값에 해당하는 case의 수행문과 그 아래까지 전부 수행한다.
이 점이 if문과 다르다.
아래 예시는 위의 switch문 코드를 같은 내용 그대로 if문으로 변환한 것이다.
위처럼 if문은 grade가 3인 경우, 딱 grade==3 의 조건문에 해당하는 실행문만 출력한다.
위와같이 값이 명시 된 경우의 분류에서는
분명 switch가 코드상 더 간단해 보이긴 하는데, 밑의 case 들까지 전부 수행되는것이 문제이다.
내가 원하는 조건에 해당하는것만 수행할 수는 없을까?
break문을 이용하면 가능하다.
break 문 : 실행을 멈추고 블록 빠져나오기
switch문은 해당 조건에 맞는 case를 찾으면 실행문을 수행 후,
그 밑의 나머지 case들도 조건에 상관없이 실행한다.
switch문의 이런 흐름을 이용한 프로그래밍에는 물론 유용하겠지만,
때에따라 멈추고 싶을 때도 있을 것이다.
그럴 때 break문 을 사용한다.
아래의 예시도 계속 보았던 위의 예시와 같은 코드이다.
이번에는 break문을 사용하여 if문처럼 해당 조건에 맞는 case만 출력되게 하였다.
그냥 막연하게 'switch문에 break문을 넣으면 원하는 실행문만 수행시킬 수 있구나' 라고 생각하면 안된다.
다음과 같은 실행흐름으로 기억하자.
1. switch문에서 ( ) 안의 변수 값에 해당하는 조건을 가진 case 를 찾아간다.
2. 해당 case의 실행문을 수행한다.
3. switch문의 특성상 아래의 case문들을 수행하러 가려다가 , 중간에 break문을 만난다.
4. 실행을 중단하고 해당 블록을 빠져나가는 명령어 break 로 인해 switch블록을 벗어난다.
지금까지 if문과 switch문에 대해 알아보았다.
아래 코드는 Switch의 활용 코드이다.
먼저 스스로 어떤 결과가 도출될지 생각해보자.
'Java' 카테고리의 다른 글
비트 연산자의 이해 (0) | 2020.06.17 |
---|