JAVA

[JAVA] 조건문, 반복문

개발 공주 2023. 5. 24. 00:32
728x90

📌 Java 프로그래밍에서 특정 조건에 따라 다른 연산을 수행하고싶을때 조건문을 사용합니다.
또는, 특정 조건에 따라 반복해서 동일한 연산을 수행하고 싶을때 반복문을 사용합니다.

  • 조건문: “물이 끓으면 강불에서 약불로 줄여주세요.” “물이 끓으면”이 조건이 만족하면 “약불로 줄이는” 연산을 수행하는 조건문 입니다.
  • 반복문: “하얗게 색이 변하기 전까지 계속 저어주세요.” “하얗게 색이 변하기 전” 조건이 만족할 동안 “저어주세요” 연산을 반복하는 반복문 입니다.

1. 만약에 : 조건문 - if, switch

  • if 문(조건)
    • 특정 조건에 따라 다른 연산을 수행하고 싶을때 사용하는 문맥입니다.
    • 기본적인 조건에 따른 연산을 수행하기 위해 if(조건) { 연산 } 형태로 사용합니다.
    • if 의 소괄호() 안의 조건이 boolean 값 true 를 만족하면 중괄호 {} 안의 연산을 수행합니다.
// 조건문
boolean flag = true;

if (flag) {
	System.out.println("flag 값은 true 입니다."); // flag 값은 true 입니다. 출력
}
  • if(조건) - esle
    • if문 조건이 거짓일 경우에 따른 연산을 수행하기 위해 else { 연산 } 형태로 사용합니다.
    • if 의 소괄호() 안의 조건이 boolean 값 false 를 만족하면 else 의 중괄호 {} 안의 연산을 수행합니다.
// 조건문 with else
boolean flag = false;

if (flag) {
	System.out.println("flag 값은 true 입니다."); // 미출력
} else {
	System.out.println("flag 값은 false 입니다."); // flag 값은 false 입니다. 출력
}
  • if(조건) - else if(조건)
    • if문 조건이 거짓일 경우에 다시한번 다른조건으로 체크해서 참일 경우에 연산을 수행하기 위해 else if(조건) {연산} 형태로 사용합니다.
    • else if의 소괄호() 안의 조건이 boolean값 true를 만족하면 else if의 중괄호 {} 안의 연산을 수행합니다.
// 조건문 with else if
int number = 2;

if (number == 1) {
	System.out.println("number 값은 1 입니다."); // 미출력
} else if (number == 2) {
	System.out.println("number 값은 2 입니다."); // number 값은 2 입니다. 출력
} else {
	System.out.println("number 값은 모르는 값입니다."); // 미출력
}
  • 중첩 if (조건)
    • if 문에 else, else if 로 해결할 수 없는 복잡한 조건이 있을 수 있습니다.
    • 이럴때 중첩해서 if 문 또는 else if문 또는 else 문 안에 if 문을 넣을 수 있습니다.
// 중첩 조건문
boolean flag = true;
int number = 2;

if (flag) {
	if (number == 1) {
		 System.out.println("flag 값은 true, number 값은 1 입니다."); // 미출력
  } else if (number == 2) {
		 System.out.println("flag 값은 true, number 값은 2 입니다."); // flag 값은 true, number 값은 2 입니다. 출력
	}
} else {
	if (number == 1) {
		 System.out.println("flag 값은 false, number 값은 1 입니다."); // 미출력
  } else if (number == 2) {
		 System.out.println("flag 값은 false, number 값은 2 입니다."); // 미출력
	}
}
  • 중첩 if 문 활용
  • 📌 사용해서 가위바위보의 승자를 알려주는 프로그램을 만들어 볼까요?
    • 입력 
      • 첫번째 입력값으로 A 유저가 낸 가위바위보
      • 두번째 입력값으로 B 유저가 낸 가위바위보
    • 출력
      • A, B 유저중에 누가 이겼는지 출력
// 조건문으로 가위바위보 만들기

import java.util.Objects;
import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);

		System.out.print("A 입력 : ");
		String aHand = sc.nextLine(); // A 입력

		System.out.print("B 입력 : ");
		String bHand = sc.nextLine(); // B 입력

		if (Objects.equals(aHand, "가위")) { // 값을 비교하는 Obects.equals() 메서드 사용
			if (Objects.equals(bHand, "가위")) {
				System.out.println("A 와 B 는 비겼습니다."); // A 와 B 의 입력값을 비교해서 결과 출력
			} else if (Objects.equals(bHand, "바위")) {
				System.out.println("B 가 이겼습니다.");
			} else if (Objects.equals(bHand, "보")) {
				System.out.println("A 가 이겼습니다.");
			} else {
				System.out.println(" B 유저 값을 잘못 입력하셨습니다.");
			}
		} else if (Objects.equals(aHand, "바위")) {
			if (Objects.equals(bHand, "가위")) {
				System.out.println("A 가 이겼습니다.");
			} else if (Objects.equals(bHand, "바위")) {
				System.out.println("A 와 B 는 비겼습니다.");
			} else if (Objects.equals(bHand, "보")) {
				System.out.println("B 가 이겼습니다.");
			}
		} else if (Objects.equals(aHand, "보")) {
			if (Objects.equals(bHand, "가위")) {
				System.out.println("B 가 이겼습니다.");
			} else if (Objects.equals(bHand, "바위")) {
				System.out.println("A 가 이겼습니다.");
			} else if (Objects.equals(bHand, "보")) {
				System.out.println("A 와 B 는 비겼습니다.");
			}
		}

	}
}
  • switch(피연산자) / case(조건)
    • switch 문은 case 문과 함께 사용하며 if문 보다 좀더 가독성이 좋은 조건문 표현식 입니다.
    • switch(피연산자) { case(조건): (연산) } 이러한 형태로 많이 쓰입니다.
    • switch 피연산자가 case 조건을 만족하면 case: 뒤에 명시되어 있는 연산을 수행합니다.
    • case(조건): (연산) 은 여러개를 설정할 수 있습니다.
      • 각 case 의 연산문 마지막에는 break; 를 꼭 넣어줘야 합니다.
      • break; 문은 해당 case 의 연산문이 끝났다는것을 알려주어 switch 문을 종료시켜줍니다.
    • switch문 중괄호 안의 제일 마지막에 default: (연산) 을 명시해주어 case 조건들이 모두 만족하지 않을때 수행할 연산을 정해주어야 합니다.
      • default: (연산) 은 아무것도 만족하지 않을때 수행하는 것이라, 없다면 생략해도 됩니다.
// switch/case 문 

int month = 8;
String monthString = "";
switch (month) {
    case 1:  monthString = "1월";
             break;
    case 2:  monthString = "2월";
             break;
    case 3:  monthString = "3월";
             break;
    case 4:  monthString = "4월";
             break;
    case 5:  monthString = "5월";
             break;
    case 6:  monthString = "6월";
             break;
    case 7:  monthString = "7월";
             break;
    case 8:  monthString = "8월"; 
             break;
    case 9:  monthString = "9월";
             break;
    case 10: monthString = "10월";
             break;
    case 11: monthString = "11월";
             break;
    case 12: monthString = "12월";
             break;
    default: monthString = "알수 없음";
}
System.out.println(monthString); // 8월 출력
  • if 문과 switch문
    • 우리가 배운 if 문과 switch 문 모두 조건문을 구현하는 문맥 입니다.
    • 차이점1. 복합조건
      • if 문은 복합조건을 지원합니다.
        • 복합조건 : 괄호()안에 조건 여러개를 지정하여 조건문을 수행할 수 있습니다.
      • switch 문은 피연산자 한개에 대한 조건만 지원합니다.
    • 차이점2. 코드중복
      • if 문은 상대적으로 코드중복이 많습니다.
      • switch 문은 코드중복이 적습니다.

2. 반복문 - for, while, do-while

  • for문
    • 특정 조건에 따라 연산을 반복해서 수행하고 싶을때 사용하는 문맥입니다.
    • for (초기값; 조건문; 증가연산) { (연산) } 형태로 사용합니다.
    • 특정 조건은 초기값과 조건문을 통해서 정의합니다.
    • 반복할때마다 값을 증가 시키려면 증가연산을 정의합니다.
    • 초기값이 조건문을 만족할때까지 (연산)을 수행하면서 회차마다 증가연산을 수행합니다.
// for 문

for(int i=0; i < 4; i++) { // 변수 i 값은 0 ~ 3 까지 반복
    System.out.println(i + "번째 출력"); // i 변수와 문자열 합치기
}
  • 향상된 for 문
    • for 소괄호 안에 값이 3개나 들어가기 때문에 이걸 2개로 줄여주는 방법이 향상된 for문 입니다.
    • 향상된 for 문은 연속된 변수목록을 출력할때 쓰입니다.
    • for (변수 타입 변수 명 : 목록변수) { (연산) } 형태로 사용합니다.
    • 변수 타입 과 변수 명 은 for 문안에서 연산을 수행할 변수를 정의 합니다.
    • 목록변수는 3,6,9,12,15 처럼 값여러개를 하나의 변수로 저장하고 싶을때 사용합니다.
// 향상된 for 문

int[] numbers = {3,6,9,12,15};
for(int number: numbers) {
    System.out.print(number + " "); 
}

// 출력
3 6 9 12 15
  • while 문, do-while 문
    • for 문과 동일하게 특정 조건에 따라 연산을 반복해서 수행하고 싶을때 사용하는 문맥입니다.
    • 다만, 초기값 없이 조건문만 명시하여 반복합니다.
    • while(조건문) { (연산) } 형태로 사용합니다. (while 문)
      • 위처럼 while 문으로 사용하면 조건문을 만족해야지만 연산이 반복수행됩니다.
      • 한번 반복할때마다 조건문을 체크해서 조건문이 불만족(false) 이면 반복을 중단합니다.
    • do { (연산) } while(조건문) 형태로도 사용합니다. (do-while 문)
      • 위처럼 do-while 문으로 사용하면 최초 1회 연산수행 후 조건문을 체크하여 더 반복할지 결정합니다.
      • 반복하게 된다면 그 이후에는 한번 반복할때마다 조건문을 체크해서 조건문이 불만족(false) 이면 반복을 중단합니다.
// do-while 문

int number = 4;
do {
    System.out.println(number + "출력"); 
} while(number < 3); // 연산을 한번 수행 후 조건문 체크

// 출력
4출력
  • break 명령
    • break : 명령을 호출하면 가장 가까운 블럭의 for 문 또는 while 문을 중단합니다. (또는 switch)
    • 반복문 안에서 break; 형태로 사용합니다.
    • break : 명령을 통해 가장 가까운 반복문을 종료시킨다고 했는데 실습을 통해 더 알아볼까요?
// break 명령

int number = 0;
while(number < 3) {
		number++;
		if (number == 2) {
			break;  // 2일때 반복 중단
		}
    System.out.println(number + "출력"); 
}

// break 명령 범위

for (int i = 0; i < 10; i++) {
	System.out.println("i: " + i);
	if (i == 2) {
		break; // i 가 2일때 가장 바깥 반복문이 종료됩니다.
	}
	for (int j = 0; j < 10; j++) {
		System.out.println("j: " + j);
		if (j == 2) {
			break; // j 가 2일때 가장 안쪽 반복문이 종료됩니다.
		}
	}
}
  • continue 명령
    • for 문 또는 while 문에서 해당 순서를 패스하고 싶을때 continue 명령을 사용합니다.
    • 반복문 안에서 continue; 형태로 사용합니다.
// continue 명령

int number = 0;
while(number < 3) {
		number++;
		if (number == 2) {
			continue;  // 2일때 반복 패스
		}
    System.out.println(number + "출력"); 
}

 

'JAVA' 카테고리의 다른 글

[JAVA] 참조형 배열로 정리하기 (컬렉션)  (0) 2023.05.27
[JAVA] 배열  (2) 2023.05.26
[JAVA] 연산자  (0) 2023.05.24
[JAVA] 변수  (0) 2023.05.23
[JAVA] JVM  (0) 2023.05.22