
if 조건문
if문은 특정한 조건이 참일 때만 작동하는, 말 그대로의 조건문이다. if문 뒤에 오는 소괄호()의 조건이 참일 때, 하단의 조건 블록 { }을 실행하게 된다.
위 예제에서는 age 변수의 값에 따라 실행되거나 실행되지 않는 if문이 두 개 존재한다. age의 값이 18 이상일 경우에는 "성인입니다."를 출력하고 18 미만일 경우에는 "미성년자입니다."를 출력한다.
해당 코드에서의 age 값은 20이므로, 실행 결과는 "성인입니다." 임을 알 수 있다.
else를 사용한 조건문
else는 if문의 조건이 참이 아닐 경우 자동적으로 실행되는 조건문이다. 항상 if문의 뒤에 올 수 있으며, 따라서 if문이 거짓일 때 if문 다음으로 실행된다.
위 코드는 If1 예제코드와 동일하게 동작하는 코드로, 위에서는 if를 두 번 썼다면 여기에서는 if-else문을 썼다는 것을 알 수 있다. 만약 age가 15라면, if의 값이 거짓이므로 해당 코드 블록이 실행되지 않고 그 아래에 있는 else문의 코드 블록이 실행됨을 알 수 있다.
if문
위 코드는 변수 age의 값에 따라 해당하는 결과를 출력해주는 코드이다. 위 코드에는 총 5개의 if문이 존재한다.
결론부터 말하자면 위 코드는 상당히 비효율적인 코드이다. 위 코드에서, age의 값이 14일 때 이미 두 번째 if문에서 "중학생"이라는 출력값이 나오게 된다. 하지만 아직 3개의 if문이 남아있으므로, 해당 코드는 불필요한 3번의 조건 검사를 더 시행하게 된다. 즉, 이미 조건에 대한 답이 나왔음에도 불구하고 불필요한 조건 연산을 더 수행하게 된다는 의미이다. 게다가 이미 위에서 age의 값이 7 이상임을 확인하였음에도 불구하고 또 다시 8 이하인지를 검사하는, 즉 상당히 비슷한 조건문을 반복 수행하게 된다. 이것은 상당한 낭비라고 볼 수 있다.
위 코드는 else if문을 이용하여 최적화할 수 있다. 해당 결과는 아래 실습에서 다룬다.
else if문
위 If3 실습에서 여러 개의 if문 만을 사용하여 코드를 작성했던 것과 다르게, 해당 실습에서는 else if문을 함께 사용하여 코드를 작성했다.
이처럼 코드를 작성하면 불필요한 연산을 줄일 수 있다. 즉, 쉽게 말해서 위의 5개의 if문을 else if문을 사용하여 하나로 묶은 것과 같다.
위에서는 정답 조건을 수행하고 난 뒤에도 나머지 조건들을 모두 수행해야 코드가 종료되지만, 해당 코드에서는 정답인 조건을 수행하게 되면 그 즉시 해당 else if문을 탈출하고 코드를 종료하게 된다. 또한, 이미 age의 값이 첫 번째 if문인 age <= 7에서 7이라는 값과 비교를 하였으므로 다음 조건문 코드에서는 age의 값이 이미 7 이상이라는 것을 가정하고 조건을 검사하게 된다.
이처럼 불필요한 조건 검사를 줄이고, 필요한 조건을 충족하고 결과를 출력하였을 경우 즉시 조건문을 탈출하는 등 위의 If3 코드보다 훨씬 효율적인 코드로 바뀌었음을 알 수 있다.
if문과 else if문의 사용 상황
위 코드는 물건을 10,000원 이상 구매할 시 1,000원을 할인해주고, 나이가 10세 이하일 경우 또 1,000원을 할인해주는 코드이다. 해당 상황에서는 중복 할인이 가능하다.
이 때는 else if문이 아닌 두 개의 if문을 각각 수행해야 한다. 가격인 price와 나이인 age가 서로 영향을 끼치지 않는 변수이기 때문이다. 따라서 price의 값에 따라 한 번, age의 값에 따라 한 번, 총 두 번 할인을 받을 수 있다.
만일 위 코드를 else if문으로 작성한다면 할인은 최대 한 번 밖에 받을 수 없을 것이다. 첫 번째 조건문인 if문에서, price를 통해 할인을 한 번 받는다면 해당 조건이 충족되었다고 판단한 후 바로 조건문에서 탈출하게 되어버리기 때문이다.
따라서 상황에 따라 적절하게 if문 또는 else if문을 사용할 수 있어야 한다.
Switch문의 사용![]() | ![]() |
|---|
첫 번째 코드는 if문을 사용한, 두 번째 코드는 switch문을 사용한 코드이다. switch문은 조건식의 값이 어떠한 case의 값과 일치한다면, 해당 코드를 실행하는 조건문이다.
위 코드에서는 grade의 값을 비교하여, grade의 값에 따라 coupon의 값을 변경해주고 있다. break는 해당 조건문을 끝내겠다는 의미로, 따라서 조건문은 해당 switch문의 case를 순차적으로 조건 검사를 진행하다가 해당되는 조건이 나왔을 때 break를 만나 조건문을 종료하게 된다.
break문이 존재하지 않을 경우에는 계속해서 조건 검사를 수행하게 되며, 해당 경우에 대해서는 바로 하단의 Switch3 실습에서 다룬다.
Switch문에서의 break 사용
break문이 있으면 해당 조건 연산을 수행한 후 바로 switch문을 탈출하게 되지만, break문이 없다면 계속해서 다음 조건 연산을 수행하게 된다.
위 코드에서는 case: 2일 경우에 수행할 코드 블록과 break문이 따로 존재하지 않는다. 따라서 case: 2일 경우, 계속해서 다음 조건을 수행하고 case: 3일 경우의 출력값을 함께 출력한 후 break에 의해서 조건문을 탈출하게 된다. 따라서 결과적으로 coupon의 값이 3000이 되는 것이다.
Switch문
해당 switch문은 자바 14 이상 버전에서만 실행 가능한 새로운 switch문이다. 기존의 switch문을 보다 간결하고 깔끔하게 사용 가능하도록 개편한 버전으로, ->라는 기호를 사용하고 해당 값을 바로 반환 가능하다는 장점이 있다.
하지만 현재까지도 (아마) 많이 사용되지는 않는다. 따라서 이러한 switch문도 존재한다는 정도만 짚고 넘어가도 좋을 듯하다.

삼항 연산자란 (조건) ? 참_표현식 : 거짓_표현식으로 나타내는 조건문으로써, 해당 조건문이 참일 경우에는 : 앞의 코드를 적용하고 거짓일 경우에는 : 뒤의 코드를 적용하는 조건문이다.
위 코드는 age의 값이 18 이상일 경우에는 앞의 코드를, 미만일 경우에는 뒤의 코드를 수행하고 있다. 따라서 age의 값이 18 이상일 경우에는 status라는 변수에 "성인"이라는 값을, 18 미만일 경우에는 status 변수에 "미성년자"라는 값을 담게 된다.
다만 삼항 연산자는 if문처럼 복잡한 코드 블럭을 넣을 수 없고, 간결하고 단순한 표현식들만 넣을 수 있다. 경우에 따라 삼항 연산자를 사용하면 매우 간결하고 단순하게 코드를 구현할 수 있어 자주 사용된다.
학생의 점수를 기반으로 학점을 출력하는 자바 프로그램을 작성하자.
점수는 변수(int score)로 지정하고, 해당 변수를 기반으로 학점을 출력하자.
학점은 다음과 같은 기준을 따른다.
- 90점 이상 : "A"
- 80점 이상 90점 미만 : "B"
- 70점 이상 80점 미만 : "C"
- 60점 이상 70점 미만 : "D"
- 60점 미만 : "F"

int score로 점수를 저장하는 변수를 선언하여, 해당 값에 학생의 점수를 대입한다. 그리고 학점을 담을 변수 String grade를 선언하여, 학생의 점수에 따라 grade에 학점이 될 문자를 대입한다.
if문을 이용하여 score의 범위를 판단한 후, 해당 범위에 따라 grade의 값에 적절한 알파벳을 대입한 후 최종적으로 System.out.println() 함수를 이용하여 출력 형식에 맞게 결과값을 출력하였다.
주어진 거리에 따라 가장 적합한 운송 수단을 선택하는 프로그램을 작성하자.
거리는 변수(int distance)로 지정하고, 해당 변수를 기반으로 운송 수단을 출력하자.
운송 수단은 다음과 같은 기준을 따른다.
- 거리가 1km 이하이면: "도보"
- 거리가 10km 이하이면 : "자전거"
- 거리가 100km 이하이면 : "자동차"
- 거리가 100km 초과이면 : "비행기"

위 ScoreEx 문제 풀이와 동일하며, 변수의 이름과 출력 형식만 변경된 형태이다.
int distance로 거리를 저장하는 변수를 선언하여, 해당 값에 거리를 대입한다. 그리고 거리에 따른 적절한 운송수단을 담을 변수 String trans를 선언하여, 거리에 맞게끔 운송수단이 될 문자열을 대입한다.
if문을 이용하여 distance의 범위를 판단한 후, 해당 범위에 따라 trans의 값에 적절한 운송수단 문자열을 대입한 후 최종적으로 System.out.println() 함수를 이용하여 출력 형식에 맞게 결과값을 출력하였다.
특정 금액을 미국 달러에서 한국 원으로 변환하는 프로그램을 작성하자.
환율은 1달러당 1300원이라고 가정합니다.
금액은 변수(int dollar)로 지정하고, 해당 변수를 기반으로 한국 원으로의 환전 금액을 출력하자.
다음과 같은 기준을 따른다.
- 달러가 0 미만이면 : "잘못된 금액입니다."
- 달러가 0일 때 : "환전할 금액이 없습니다."
- 달러가 0 초과일 때 : "환전 금액은 (계산된 원화 금액)원 입니다."

int dollar로 달러를 저장하는 변수를 선언하고, int won으로 한국 돈을 저장할 변수를 선언한다.
dollar가 음수일 경우, 즉 0보다 작을 경우에는 잘못된 금액이라는 문자열을 출력한다. dollar가 0일 경우, 환전할 금액이 없다는 문자열을 출력한다. dollar가 0보다 큰 정수일 경우, 해당 금액을 한국 돈으로 환전한 결과를 출력한다.
여기에서 1달러는 1300원으로 가정하므로, 한국 돈은 dollar * 1300을 한 금액이 된다.
요청한 평점 이상의 영화를 찾아서 추천하는 프로그램을 작성하자.
평점 변수는double rating을 사용하세요.
if문을 활용해서 문제를 풀자.
- 어바웃 타임 : 평점 9
- 토이 스토리 : 평점 8
- 고질라 : 평점 7

double rating으로 평점을 저장하는 변수를 선언하고, if문을 이용해 조건을 검사하여 해당되는 영화를 추천하는 출력문을 코드 블럭에 삽입하였다.
이 경우, 문제에서 제시한 바와 같이 else if문이 아닌 연속된 단일 if문을 사용해야 한다. 해당 평점 이상일 때에 해당하는 모든 영화를 출력해야 하기 때문이다.
String grade라는 문자열을 만들고, 학점에 따라 성취도를 출력하는 프로그램을 작성하자.
switch문을 사용해서 문제를 해결하자.
각 학점은 다음과 같은 성취도를 나타낸다."A" : "탁월한 성과입니다!"
"B" : "좋은 성과입니다!"
"C" : "준수한 성과입니다!"
"D" : "향상이 필요합니다."
"F" : "불합격입니다."
나머지 : "잘못된 학점입니다."

String grade로 학점을 저장하는 변수를 만들고, switch문을 이용하여 grade의 값에 따라 해당되는 문자열을 출력하도록 코드를 작성하였다.
학점이 A~F일 경우 그에 맞는 출력값을, 그 외의 값들은 모두 잘못된 학점으로 판단하여 default를 사용하여 "잘못된 학점입니다."를 출력하도록 한다.
여러분은 두 개의 정수 변수
a와b를 가지고 있다.
a의 값은10이고,b의 값은20이다.
삼항 연산자를 사용하여 두 숫자 중 더 큰 숫자를 출력하는 코드를 작성하자.

삼항 연산자는 주어진 조건을 연산한 후, 해당 값이 참일 경우에는 : 앞의 값을 그렇지 않을 경우 : 뒤의 값을 반환한다.
여기에서의 조건은 a > b이며, a의 값이 더 클 경우 참이므로 max 값으로 a를 반환, 거짓일 경우 b의 값이 더 크다는 의미이므로 max 값으로 b를 반환하게 된다. 이후 출력 형식에 맞추어 max 값을 출력하면 끝이다.
정수
x가 주어지면,x가 짝수이면"짝수"를,x가 홀수이면"홀수"를 출력하는 프로그램을 작성하자.
삼항 연산자를 사용해야 한다.
참고로x % 2를 사용하면 홀수, 짝수를 쉽게 계산할 수 있다.

x % 2를 사용하면 홀수 및 짝수 여부를 쉽게 계산할 수 있다. %는 나머지 연산자로, 두 수를 나눈 나머지의 값을 반환한다. 2로 나눈 나머지가 0이라는 것은 즉 짝수라는 의미이므로, x % 2 == 0은 x의 값이 짝수임을 의미한다.
따라서 해당 연산의 결과가 참일 경우에는 String EvenOdd의 값을 "짝수"로, 거짓일 경우에는 "홀수"로 반환한다. 이후 출력 형식에 맞추어 x의 값과 EvenOdd 값을 출력하면 끝이다.
조건문 배우기 시작하니까 문제가... 많아지기 시작함.
필기하는데 시간이 원래 1시간 조금 넘게 걸렸는데 이젠 2시간 가까이 걸리네욘...