2025. 1. 1. 13:00ㆍJAVA
안녕하세요. 진득 코딩입니다.
지난 시간까지는 연산자에 대해 알아보며 코드의 실행흐름이 무조건 위에서 아래로 한 문장씩 순차적으로 진행되었지만 때로는 조건에 따라 코드를 수행해야 할 때가 있습니다.
이러한 프로그램의 흐름(flow)을 바꾸는 역할을 하는 문장들을 제어문(control statement)이라고 합니다.
제어문에는 '조건문'과 '반복문'이 있습니다.
조건문은 조건에 따라 다른 문장이 수행되도록 하고, 반복문은 특정 문장들을 반복해서 수행합니다.
이번 시간에는 조건문중에서도 if문이라는 조건문에 대해서 살펴보도록 하겠습니다.
조건문
- 조건문은 조건식과 문장을 포함하는 블록{}으로 구성되어 있습니다.
- 조건식의 연산결과에 따라 실행할 문장이 달라져서 프로그램의 실행흐름을 변경할 수 있습니다.
- 조건문은 if문과 switch문, 두 가지가 있는데 주로 if문이 사용됩니다.
- 처리할 경우의 수가 많을 때는 if문보다 switch문이 효율적이지만, switch문은 if문보다 제약이 많습니다.
if문
- if문은 가장 기본적인 조건문이며, '조건식'과 '괄호{}'로 이루어져 있습니다.
- 만일(if) 조건식이 참(true)이면 괄호{} 안의 문장들을 수행하라는 의미로 이해하면 됩니다.
if (조건식) {
// 조건식이 참(true)일 때 수행될 문장들을 적습니다.
}
- if문에 사용되는 조건식은 일반적으로 비교연산자와 논리연산자로 구성됩니다.
조건식 | 조건식이 참일 조건 |
90 <= x && x <= 100 | 정수 x가 90이상 100이하일 때 |
x < 0 || x > 100 | 정수 x가 0보다 작거나 100보다 클 때 |
x % 3 == 0 && x % 2 != 0 | 정수 x가 3의 배수지만, 2의 배수는 아닐 때 |
ch == 'y' || ch == 'Y' | 문자 ch가 'y' 또는 'Y'일 때 |
ch == ' ' || ch == '\t' || ch == '\n' | 문자 ch가 공백이거나 탭 또는 개행 문자일 때 |
'A' <= ch && ch <= 'Z' | 문자가 대문자일 때 |
'a' <= ch && ch <= 'z' | 문자가 소문자일 때 |
'0' <= ch && ch <= '9' | 문자가 숫자일 때 |
str.equals ("yes") | 문자열 str의 내용이 "yes"일 때 (대소문자 구분) |
str.equalsIgnoreCase("yes") | 문자열 str의 내용이 "yes"일 때 (대소문자 구분안함) |
- 본격적으로 제어문을 살펴보기 전에 복습할 겸 기본적인 조건식들을 작성해 보았습니다.
- 자바에서 조건식의 결과는 반드시 true 또는 false여야 합니다.
기본적으로 if문은 위 예제와 같이 사용할 수 있습니다.
블럭 {}
- 괄호 {}를 이용해서 여러 문장을 하나의 단위로 묶을 수 있는데, 이를 '블럭(block)'이라고 합니다.
- 블럭 내의 문장들은 탭(tab)으로 들여쓰기(indentation)를 해서 블럭 안에 속한 문장이라는 것을 알기 쉽게 해주는 것이 좋습니다.
- 블럭 안에는 보통 여러 문장을 넣지만, 한 문장만 넣거나 아무런 문장도 넣지 않을 수 있습니다.
- 만일 블럭 내의 문장이 하나뿐 일 때는 괄호{}를 생략할 수 있습니다.
- 블럭 내의 문장이 하나뿐인 경우 괄호{}를 생략할 수 있지만 가능하면 생략하지 않고 사용하는 것이 바람직합니다.
- if문에 수행될 문장을 두 가지 이상을 사용할 경우 괄호{}로 묶어줘야만 모든 문장이 if문에 속한 문장이 됩니다.
- 두 번째 if문은 괄호{}를 생략했기 때문에, 조건식 바로 다음에 오는 하나의 문장만 if문에 속하게 됩니다.
- 그래서 세 번째 출력문이 항상 출력되는 것을 확인할 수 있습니다.
- 만약 두 문장 모두 if문에 속하게 하려면 괄호{}로 묶으면 됩니다.
if-else문
- if문의 변형인 if-else문의 구조는 if문에 'else블럭'이 더 추가된 구조입니다.
- 'else'의 뜻이 '그 밖의 다른'이므로 조건식의 결과가 참이 아닐 때, 즉 거짓일 때 else블럭의 문장을 수행하라는 의미입니다.
if (조건식) {
// 조건식이 참(true)일 때 수행될 문장들을 적습니다.
} else {
// 조건식이 거짓(false)일 때 수행될 문장들을 적습니다.
}
- 조건식의 결과에 따라 이 두 개의 블록 {} 중 어느 한 블럭 {}의 내용이 수행되고 전체 if문을 벗어나게 됩니다.
- 두 블럭 {}의 내용이 모두 수행되거나, 모두 수행되지 않는 경우는 있을 수 없습니다.
- if-else문을 사용한 코드는 하나의 조건식만 계산하면 되므로 더 효율적이고 간단합니다.
- if-else문 역시 블럭 내의 문장이 하나뿐인 경우 괄호{}를 생략할 수 있습니다.
if-else if문
처리해야 할 경우의 수가 셋 이상인 경우에는 한 문장에 여러 개의 조건식을 쓸 수 있는 'if-else if'문을 사용하면 됩니다.
- 첫 번째 조건식부터 순서대로 평가해서 결과가 참인 조건식을 만나면, 해당 블럭{}만 수행하고 'if-else if'문 전체를 벗어납니다.
- 만일 결과가 참인 조건식이 하나도 없으면, 마지막에 있는 else블럭의 문장들이 수행됩니다.
- 또한 else블럭은 생략이 가능한데, 이때 if-else if문의 어떤 블럭도 수행되지 않을 수 있습니다.
- 두 번째 조건식을 'score >= 80'이라고 쓸 수 있는 것은 첫 번째 조건식인 'score >= 90'이 거짓이기 때문입니다.
- 때문에 if-else if문을 조건식을 바꾸지 않고 여러 개의 if문으로 쪼개놓기만 하면 전혀 다른 코드가 되기 때문에 유의해야 합니다.
중첩 if문
- if문의 블럭 내에 또 다른 if문을 포함시키는 것이 가능한데 이를 중첩 if문이라고 하며 중첩의 횟수에는 거의 제한이 없습니다.
- 내부의 if문은 외부의 if문보다 안쪽으로 들여쓰기를 해서 두 if문의 범위가 명확히 구분될 수 있도록 작성해야 합니다.
- 또한 괄호{}를 넣어서 if블럭과 else블럭의 관계를 확실히 해주는 것이 좋습니다.
- 제일 바깥쪽에 있는 if문에서 점수에 따라 학점(grade)을 결정하고, 내부의 if문에서는 학점을 더 세부적으로 나누어서 평가를 하고 그 결과를 출력합니다.
- 외부 if문의 조건식에 의해 한번 걸러졌기 때문에 내부 if문의 조건식은 더 간단해질 수 있습니다.
이번 시간에는 제어문 중에서도 일반적인 조건문인 if문에 대해 살펴보았습니다.
if문을 사용하게 되면 좀 더 다채로운 코드를 작성할 수 있습니다.
다음 시간에는 if문과 비슷한 기능인 switch문에 대해서 살펴볼 예정입니다.
switch문을 살펴보면서 if문과의 차이를 살펴보고 상황에 따라 더 적절한 조건문을 사용하는 것이 좋습니다.
이번 포스팅은 여기까지입니다.
포스팅을 보시면서 궁금한 점이 있거나 의견이 있으신 분은 댓글로 남겨주시면 답글로 열심히 대답해 드리도록 하겠습니다.
끝까지 봐주셔서 감사합니다.😊
'JAVA' 카테고리의 다른 글
자바 반복문 for문에 대해 알아보자 (0) | 2025.01.03 |
---|---|
자바 조건문 switch문에 대해 알아보자 (0) | 2025.01.02 |
비트 연산자와 그 외 여러 연산자들에 대해 알아보자 (0) | 2024.12.31 |
자바 비교 연산자와 논리 연산자에 대해 알아보자 (0) | 2024.12.30 |
자바 산술 연산자에 대해 알아보자 (2) | 2024.12.27 |