1. if else 조건문
프로그램이 외부 상황이 어떻게 변하든 항상 똑같은 일을 한다면 쓸모가 크지 않을 것입니다. 프로그램은 다양한 상황에 맞춰 어떤 경우에는 이런 동작을, 다른 경우에는 다른 동작을 할 수 있어야 합니다.
Java에서는 이를 조건문 — if와 else라는 키워드를 통해 구현합니다. 조건의 참/거짓에 따라 서로 다른 명령 블록을 실행하도록 해 줍니다.
조건문은 세 부분으로 이루어집니다: 조건, 명령 1, 명령 2. 조건이 참이면 명령 1이 실행되고, 그렇지 않으면 명령 2가 실행됩니다. 두 명령이 동시에 실행되지는 않습니다. 일반적인 형태는 다음과 같습니다:
if (조건)
명령1;
else
명령2;
if-else
if는 “만약 ~라면”, else는 “그렇지 않으면”을 뜻합니다. 사람의 말로 쓰면 다음과 같습니다:
만약 조건이 참이라면
명령1을 수행하라;
그렇지 않으면
명령2를 수행하라;
if-else를 자연어로 표현
예시:
// 화면에는 다음 문구가 출력됩니다: 당신은 아직 어린이입니다
int age = 17;
if (age < 18)
System.out.println("당신은 아직 어린이입니다");
else
System.out.println("당신은 이미 성인입니다");
// 화면에는 다음 문구가 출력됩니다: 따뜻합니다
int temperature = 5;
if (temperature < 0)
System.out.println("밖은 매우 춥습니다");
else
System.out.println("따뜻합니다");
// 화면에는 다음 문구가 출력됩니다: 운전면허 시험을 볼 수 있습니다
int age = 18;
if (age == 18)
System.out.println("운전면허 시험을 볼 수 있습니다");
else
System.out.println("이제 차를 위해 저축할 수 있습니다");
2. 블록
조건이 참이거나 거짓일 때 여러 명령을 실행하고 싶다면, 이를 하나의 블록으로 묶을 수 있습니다.
명령들을 블록으로 묶으려면 중괄호로 감싸면 됩니다. 일반적인 형태는 다음과 같습니다:
{
명령1;
명령2;
명령3;
}
블록 안의 명령 개수에는 제한이 없습니다. 심지어 0개도 가능합니다.
if-else와 블록을 함께 사용하는 예:
// 화면에는 다음 문구가 출력됩니다: 너는 아직 어린이야. 어른들과 말다툼하지 마
int age = 17;
if (age < 18)
{
System.out.println("너는 아직 어린이야");
System.out.println("어른들과 말다툼하지 마");
}
else
{
System.out.println("당신은 이미 성인입니다");
System.out.println("요즘 젊은이들 참...");
}
// 화면에는 다음 문구가 출력됩니다: 따뜻합니다
int temperature = 5;
if (temperature < 0)
{
System.out.println("밖은 매우 춥습니다");
System.out.println("모자를 쓰세요");
}
else
System.out.println("따뜻합니다");
// 빈 블록이 실행됩니다. 화면에는 아무 것도 출력되지 않습니다.
int age = 21;
if (age == 18)
System.out.println("운전면허를 받을 수 있습니다");
else
{
}
3. if 구문의 축약 문법
else 블록의 코드가 없다면 생략할 수 있습니다. 그러면 if 구문은 다음과 같은 형태가 됩니다:
if (조건)
{
명령1;
}
if
예:
int age = 19;
if (age >= 18)
{
System.out.println("당신은 성인입니다!");
}
어떻게 작동하나요?
조건이 참이면 블록의 코드가 실행됩니다. 거짓이면 아무 일도 일어나지 않고 — 프로그램은 다음으로 진행합니다.
프로그램에 else 블록이 있더라도, 그 블록이 비어 있다면(중괄호 사이에 아무 명령도 없다면) 그냥 없애도 됩니다. 프로그램 동작은 달라지지 않습니다.
4. 조건 결합: else if
가끔은 단순히 “예/아니오”가 아니라 여러 선택지 중에서 하나를 골라야 합니다. 이럴 때 else if 조합이 도움이 됩니다:
if (uslovie1)
{
// uslovie1이 참인 경우 실행됨
}
else if (uslovie2)
{
// uslovie2가 참이고, uslovie1이 거짓인 경우 실행됨
}
else
{
// 위 조건들 중 어느 것도 해당하지 않을 때 실행됨
}
예:
int hour = 13;
if (hour < 12)
{
System.out.println("좋은 아침입니다!");
}
else if (hour < 18)
{
System.out.println("좋은 오후입니다!");
}
else
{
System.out.println("좋은 저녁입니다!");
}
무슨 일이 일어나나요?
- 12시 이전이면 — 아침입니다.
- 12시부터 18시까지면 — 낮입니다.
- 그 이후면 — 저녁입니다.
- 프로그램은 하나의 선택지만 고릅니다! 어떤 조건이 만족되면 — 나머지는 아예 검사하지 않습니다.
5. 도식적 일러스트: 분기 흐름도
흐름도로 보면 다음과 같습니다:
조건이 여러 개라면:
이건 테이블탑 롤플레잉 게임의 갈림길과 아주 비슷합니다: 왼쪽으로 가면 — 한 가지, 오른쪽으로 가면 — 또 다른 것, 직진하면 — 또 다른 무언가!
6. 어떤 조건을 검사할 수 있을까?
if 뒤의 괄호 안에는 결과가 true 또는 false가 되는 논리 표현식이 들어가야 합니다.
주요 비교 연산자:
| 연산자 | 의미 | 예시 |
|---|---|---|
|
같다 | |
|
같지 않다 | |
|
크다 | |
|
작다 | |
|
크거나 같다 | |
|
작거나 같다 | |
조건 예시:
if (number == 10)
if (age != 18)
if (temperature > 36)
if (balance <= 0)
주의하세요: =(하나)은 대입입니다. ==(두 개)는 비교입니다. 이는 초보자가 가장 많이 하는 실수 중 하나입니다! 만약 실수로 다음과 같이 쓴다면:
if (x = 5) // 오류!
— 컴파일러가 혼내줄 것이고, 매우 잘하는 일입니다.
7. 조건에서 문자열 다루기
Java에서 == 비교는 숫자에 대해서는 올바르게 동작합니다. 부동소수점 숫자는 ==로 비교하지 않는 것이 좋고, 문자열은 ==로 비교하면 안 됩니다 — 문자열은 문자열의 내용을 비교하는 equals() 메서드를 사용하세요(참조가 아니라 내용을 비교합니다).
문자열 비교의 미묘한 점들은 나중에 더 자세히 이야기하겠습니다. 올바른 비교 방법은 아래 예시처럼 하면 됩니다:
String password = console.nextLine();
if (password.equals("qwerty")) // equals() 메서드를 호출하고 두 번째 문자열을 인수로 전달합니다
{
System.out.println("입장하셨습니다!");
}
8. 특징과 주의점:
중괄호: 꼭 필요할까?
if 또는 else 뒤에 한 줄짜리 명령만 있다면, 중괄호를 생략할 수 있습니다:
if (age > 18)
System.out.println("당신은 18세를 넘었습니다!");
// 하지만 항상 괄호를 쓰는 것이 더 안전합니다:
if (age > 18)
{
System.out.println("당신은 18세를 넘었습니다!");
}
팁: 항상 중괄호를 쓰세요. 특히 코드를 확장할 때 수많은 오류를 예방할 수 있습니다.
논리 오류: 조건을 조심하세요!
다음을 이렇게 작성하면:
if (age > 18)
System.out.println("당신은 18세를 넘었습니다!");
System.out.println("환영합니다!");
컴파일러는 이 코드를 이렇게 해석합니다:
if (age > 18)
{
System.out.println("당신은 18세를 넘었습니다!");
}
System.out.println("환영합니다!");
두 번째 줄은 항상 실행됩니다 — 두 줄 모두를 같은 “분기” 안에 넣으려면 중괄호가 필요합니다.
GO TO FULL VERSION