04 조건문과 반복문

winA·2025년 7월 1일

BE/Java

목록 보기
6/16
post-thumbnail

💛 코드 실행 흐름 제어

  • 실행 흐름: main() 메소드의 시작 중괄호({)에서 끝 중괄호(})까지 위부터 아래로 실행되는 흐름이다.
  • 흐름 제어문: 실행 흐름을 개발자가 원하는 방향으로 바꿀 수 있도록 해주는 것이다.
  • 루핑: 반복문이 실행 완료된 경우, 제어문 처음으로 다시 되돌아가 반복 실행되는 것이다.

제어문의 종류

조건문반복문
if문, switch문for문, while문, do-while문

💛 if문

조건식의 결과에 따라 블록 실행 여부 결정

조건식에는 true 또는 false 값을 산출할 수 있는 연산식이나 boolean 변수가 올 수 있다.

조건식이 true이면 블록을 실행하고 false면 블록을 실행하지 않는다.

if-else

조건식이 true이면 if문 블록이 실행되고, false이면 else 블록이 실행된다.

다중 if-else

조건문이 여러개인 if문이다.

else if는 상위 조건식이 false일 경우 평가되고, else if가 true일 때 해당 블록이 실행된다.

모든 조건식이 else일 때 해당 블록을 실행하고, if문을 벗어난다.

랜덤한 수 만들기

Math.random()

0.0<=~<1.0 사이의 double 타입 난수를 리턴한다.

정수 범위의 랜덤한 수 만들기

((int) (Math.random() * 범위 + 시작값)

시작값~시작값+범위-1의 정수 범위의 랜덤한 수를 생성한다.

중첩 if

if문의 블록 내부에 또 다른 if문을 사용할 수 있다. 중첩문은 한번만 사용해도 매우 복잡한 실행 흐름이 생기기 때문에 정말 필요한 상황, 완벽한 논리 흐름이 구축되지 않은 상태에서 사용한다면 오류 발생의 확률이 높아진다.

💛 switch 문

if문은 조건식의 결과가 true, false 두가지로 한정돼있기 때문에 경우의 수가 많아질 수록 else if를 반복적으로 추가해야 하므로 코드의 복잡성이 높아진다. 이 점을 해결하기 위해서 switch문을 사용한다.

switch문은 변수의 값에 따라서 실행문이 결정된다.

switch문: 괄호 안의 변수값에 따라 해당 case로 가서 실행문을 실행시킨다.

만약 변수값과 동일한 값을 갖는 case가 없으면 default로 가서 실행문을 실행시킨다. default는 생략이 가능하다.

switch문의 변수로 사용될 수 있는 것은 정수타입, 문자열타입을 사용할 수 있다. double은 검사하지 않는다. 동일한지 정확하게 판단이 잘 되지 않기 때문이다. char은 대소문자를 구분한다.

만약 case마다의 실행문에 break를 사용하지 않으면 에러는 발생하지 않지만, switch문 밖으로 나가는 것이 아닌 break를 만나기 전까지 아래로 모든 코드문이 실행된다.

switch Expression

같은 작업을 반복적으로 해야 하는 여러 데이터들을 과거에는 switch문으로 하나하나 case를 나눠서 처리해야 했다. 자바 12부터는 이를 더 간결하게 표현할 수 있도록 람다 스타일의 switch 표현식이 도입됐다.

switch(alphabet){
	case: 'A','a'->{
		//여러 case를 한번에 처리 가능
	}	
}

스위치된 값을 변수에 바로 대입할 수도 있다. 단일 값일 경우에는 화살표 오른쪽에 값을 기술하면 되고, 중괄호를 사용할 경우 해당값을 변수 값으로 지정하겠다는 yield 키워드로 값을 지정하면 된다. 이 경우에는 반드시 default가 있어야 한다.

타입변수=switch(alphabet){
	case "a"->"소문자 A";
	case "B"->{
		...
		yield "대문자 B";
	}
	default->"기타 문자";
};

💛  for 문

똑같은 실행문의 반복횟수를 조건문을 통해서 실행문의 수를 획기적으로 감소

for(초기화식; 조건식; 증감식){
	실행문;
}

순서

  1. 초기화식이 제일 먼저 실행된다
  2. 조건식을 평가한다
    1. true이면 실행문을 실행시킨다
    2. false이면 for문을 종료하고 블록을 건너뛴다
  3. 조건식이 true가 되어 실행문을 모두 실행하면 증감식을 실행한다.
  4. 조건식을 다시 평가한다.

특징

  • 초기화식: 실행문, 증감식에서 사용할 변수를 초기화하는 역할을 한다.
  • 초기화, 증감식은 둘 이상 있을 수도 있다.
  • 초기화식에서 부동 소수점을 쓰는 float타입의 사용은 하지 않아야 한다. 정확한 값을 표현하지 못하기 때문에 정확한 연산이 진행되지 않을 수 있다.

중첩 for문

바깥 for문이 한번 실행될 때마다 중첩된 for문은 지정횟수만큼 반복하고 다시 바깥 for문으로 돌아간다.

public class MultiplicationTableExample {

  public static void main(String[] args) {
    for (int m = 2; m <= 9; m++) {
      System.out.println("*** " + m + "단 ***");
      for (int n = 1; n <= 9; n++) {
        System.out.println(m + " x " + n + " = " + (m * n));
      }
    }
  }
}

💛  while 문

순서

  1. 조건식을 평가한다.
    1. 평가 결과가 true이면 실행문을 실행한다.
  2. 실행문이 모두 실행되면 조건식으로 되돌아가서 조건식을 다시 평가한다.

입력

System.in: 표준 입력 장치를 사용하여 사용자의 입력을 컴퓨터가 인식한다.

import java.util.Scanner;
Scanner sc= new Scanner(System.in);

이를 통해서 모든 입력을 받아들어올 수 있다. 개발자는 어떤 입력이 들어오는지만 주입해주면 된다.

buffer.out: 표준 출력 장치

buffer.err: 표준 에러 출력 장치

💛  do-while 문

반드시 한번은 실행되는 while문

조건식에 의해 반복 실행한다는 점에서는 while과 동일하지만, do-while문을 블록 내부를 먼저 실행시키고, 실행 결과에 따라서 반복 실행을 계속할지에 대한 여부를 결정한다.

do{
	실행문;
}while(조건식);

반드시 while뒤에 ;(세미콜론)을 붙여줘야 한다.

💛  break 문

반복문, 조건문을 강제 종료할 때 사용

break문은 대개 if문과 같이 사용되어 조건식에 따라 for, while 문을 종료한다.

만약 반복문이 중첩되어 있을 경우 break 문은 가장 가까운 반복문을 종료하고 바깥쪽 반복문은 종료시키지 않는다.

명명 break

중첩된 반복문에서 하나의 break로 가장 바깥의 반복문까지 종료시키고 싶다면 바깥쪽 반복문에 이름을 붙이고, break: 이름;을 사용하여 한번에 원하는 위치까지 빠져나올 수 있도록 할 수 있따.

Label: for(){
	for(){
		break Label;
	}
}

💛  continue문

블록 내부에서 continue 문이 실행되면 for문의 증감식 또는 while문의 조건식으로 바로 이동한다.

while(){
	continue;
}

continue문은 반복문을 종료하지 않고, 계속 반복을 수행한다는 점이 break 문과 다른 점이다.

0개의 댓글