조건문 형식
if문
// if문의 기본 구조
if (조건식) {
<수행할 문장1>;
<수행할 문장2>;
...
} else if(조건식) {
<수행할 문장A>;
<수행할 문장B>;
...
} else {
<수행할 문장3>;
<수행할 문장4>;
...
}
- 조건에 따라 참이면 if문을 수행하고, 거짓이면 else if문에 속한 조건을 판단해 참이면 else if문을 수행하고, 거짓이면 else문을 수행한다.
- if와 조건식은 필수 구성 요소이고, 나머지는 필수 요소가 아니다.
- 조건식에는 boolean 타입만 들어갈 수 있다.
- 조건문은 중첩할 수 있다.
- if와 else는 하나의 조건문에 딱 한 번만 가능, else if는 여러 개 가능
생각해보기
1) 조건문을 중첩해서 사용하는 것과 그렇지 않는 것은 어떤 장단점이 있을까요
조건문을 중첩하여 사용하면 코드의 연관성을 확인하기 힘들고, 중간에 다른 코드의 삽입 가능성이 있기 때문에 else if문을 사용하는 것이 바람직하다.
2) else와 else if는 무슨 차이가 있을까요, 그리고 이 둘이 없다면 작업이 어떻게 진행될까요
else는 if문의 조건이 거짓이라면 바로 실행되지만, else if는 한번 더 조건식을 추가할 수 있다.else는 하나의 조건문에 한 번만 사용 가능하고, else if는 여러 개도 사용 가능하다.
조건문 응용(equals 메소드)
boolean을 리턴하는 메소드
- String 클래스의 contains 메소드
- String 클래스의 equals 메소드 👉 이 메소드를 사용하여 간단한 인증 기능을 구현해보자!
1) 먼저 AuthApp.java 파일을 만든 후, Run Configurations 탭으로 이동한다.
2) Arguments 탭에 id를 적고, Apply 버튼을 클릭한다.
3) 다음과 같이 작성한다.
아규먼트로 아이디를 입력받아 마스터 아이디와 비교하고 그 결과에 따라 콘솔에 다른 문자열을 출력하는 프로그램이다.
public class AuthApp {
public static void main(String[] args) {
// if문 응용
String id = "oneul";
String inputId = args[0];
System.out.println("Hi.");
//if(inputId == id) { 이렇게 하면 의도한 결과가 나오지 않는다.
if(inputId.equals(id)) {
System.out.println("Master!");
} else {
System.out.println("Who are you?");
}
}
}
== vs equals()
inputId와 id는 내용이 일치하지만, 다음과 같이 작성하면 의도한 결과가 나오지 않는다.
if(inputId == id) // false
==와 같은 비교 연산자는 int, boolean과 같은 기본형 타입(primitive type)에 대해서는 값을 비교하고,
String과 같은 참조형 타입(reference type)에 대해서는 주소 값을 비교한다.
따라서, 문자열의 '내용'이 같은지 비교하기 위해서는 String 클래스의 equals() 메소드를 사용한다.
다음과 같이 작성할 수 있다.
if(inputId.equals(id)) // true
조건문 응용(논리 연산자)
아이디 인증에 이어 비밀번호까지 인증하는 기능을 구현해보자!
1) 마찬가지로 Arguments 탭에 password를 적고, Apply 버튼을 클릭한다. (Argument의 구분은 공백으로 한다.)
2) 디버거를 이용하여 Argument값이 잘 들어왔는지 확인한다.
3) 다음과 같이 작성한다.
아규먼트로 아이디와 비밀번호를 입력받아 if문을 중첩 사용하여 마스터 아이디, 비밀번호와 비교하고 그 결과에 따라 콘솔에 다른 문자열을 출력하는 프로그램이다.
public class AuthApp {
public static void main(String[] args) {
// if문 응용
String id = "oneul";
String inputId = args[0];
String pass = "1234";
String inputPass = args[1];
System.out.println("Hi.");
// if문 중첩해서 사용
if(inputId.equals(id)) {
if(inputPass.equals(pass)) {
System.out.println("Master!");
} else {
System.out.println("Wrong Password!");
}
} else {
System.out.println("Who are you?");
}
}
}
4) 위의 코드도 문제없이 작동하지만, 논리 연산자를 사용하면 더 간단하게 코드를 나타낼 수 있다.
아이디와 비밀번호가 모두 같은지 확인하기 위해 &&(AND) 연산자를 사용한다.
public class AuthApp {
public static void main(String[] args) {
// if문 응용
String id = "oneul";
String inputId = args[0];
String pass = "1234";
String inputPass = args[1];
System.out.println("Hi.");
// 논리 연산자 && 사용
if(inputId.equals(id) && inputPass.equals(pass)) {
System.out.println("Master!");
} else {
System.out.println("Who are you?");
}
}
}
논리 연산자
- boolean 데이터를 연산하기 위한 연산자
- 연산의 결과가 true 혹은 false로 반환된다.
논리 연산자 | 기능 |
&& (AND) 우선순위👍 | 두 항이 모두 참일 경우 참을 반환 그렇지 않으면 거짓 반환 |
|| (OR) | 두 항 중 하나의 항만 참이면 참을 반환 두 항이 모두 거짓이면 거짓 반환 |
생각해보기
1) 논리 연산자 없이 조건문을 중첩해서 사용해도 되지 않을까요? 논리 연산자는 왜 필요할까요?
조건문을 중첩하여 사용하면 코드의 가독성과 명확도가 떨어진다.
논리 연산자는 여러 boolean 데이터를 한 번에 연산하기 위해 필요하다.
※ 이 글은 생활코딩 JAVA - 제어문 강의를 듣고 정리한 내용입니다.
※ 참고자료
'🌎 Web > Java' 카테고리의 다른 글
[Java] 정수 나눗셈 연산, 증감 연산자, while문과 조건식 (0) | 2022.11.18 |
---|---|
[Java] 논리 연산자 (0) | 2022.03.16 |
[Java] == vs equals (0) | 2022.03.13 |
[Java] Boolean 데이터 타입 (0) | 2022.03.11 |
[Java] 제어문(Java Flow Control) (0) | 2022.03.11 |