자바의 정석 4장 - 조건문과 반복문

청포도봉봉이·2023년 11월 13일
0

자바의 정석

목록 보기
4/16
post-thumbnail

조건문과 반복문

코드의 실행흐름이 조건에 따라 문장을 건너뛰고, 때로는 같은 문장을 반복해서 수행해야할 때가 있다. 이처럼 프로그램의 흐름을 바꾸는 역할을 하는 문장들을 제어문(control statement)이라고 한다. 제어문에는 조건문과 반복문 이 있는데, 조건문은 조건에 따라 다른 문장이 수행되도록 하고, 반복문은 특정 문장들을 반복해서 수행한다.

조건문 - if, switch

조건문은 조건식과 문장을 포함하는 블럭{}으로 구성되어 있으며, 조건식의 연산결과에 따라 실행할 문장이 달라져서 프로그램의 실행흐름을 변경할 수 있다.

if문

만일(if) 조건식이 참(true)이라면 괄호{} 안의 문장들을 수행하라 라는 의미로 이해하면 된다.

if (조건식) {
	//조건식이 참(true)일 때 수행될 문장들을 적는다.
}

if문에 사용되는 조건식은 일반적으로 비교연산자와 논리연산자로 구성된다.

if-else문

if문에 else블럭이 더 추가되었다. else의 뜻이 그 밖에 다른이므로 조건식의 결과가 참이 아닐 때, 즉 거짓일 때 else블럭의 문장을 수행하라는 뜻이다.

if (조건식) {
	// 조건식이 참(true)일 때 수행될 문장들을 적는다.
}
else {
	// 조건식이 거짓(false)일 때 수행될 문장들을 적는다.
}

if-else if문

처리해야할 경우의 수가 셋 이상인 경우 사용한다.

if (조건식1) {
	// 조건식1의 연산결과가 참일 때 수행될 문장들을 적는다.
}
else if (조건식2) {
	// 조건식2의 연산결과가 참일 때 수행될 문장들을 적는다.
}
else if (조건식3) {
	// 조건식3의 연산결과가 참일 때 수행될 문장들을 적는다.
}
else { // 마지막에는 보통 else블럭으로 끝나며, else블럭은 생략가능하다.
	// 위의 어느 조건식도 만족하지 않을 때 수행될 문장들을 적는다.
}

중첩 if문

if문의 블럭 내에 또 다른 if문을 포함시키는 것이 가능하고 중첩의 횟수에는 거의 제한이 없다.

if (조건식1) {
  if (조건식2) {
	// 조건식1과 조건식2가 모두 true일때 수행
  }
  else {
  	// 조건식1과 조건식2가 모두 false일때 수행
  }
}

switch문

switch문은 조건식을 먼저 계산한 다음, 그 결과와 일치하는 case문으로 이동한다. 이동한 case문 아래에 있는 문장들을 수행하며, break문을 만나면 전체 switch문을 빠져나가게 된다.

switch (조건식) {
	case1 :
    	// 조건식의 결과가 값1과 같을 경우 수행될 문장들
        // ...
        break;        
	case2 :
    	// 조건식의 결과가 값2과 같을 경우 수행될 문장들
        // ...
        break; // switch문을 벗어난다.
	default :
    	// 조건식과 결과가 일치하는 case문이 없을때 수행될 문장들
        // ...
}

switch문의 제약 조건
1. switch문의 조건식 결과는 정수 또는 문자열이어야 한다.
2. case문의 값은 정수 상수만 가능하며, 중복되지 않아야 한다.

반복문 - for, while, do-while

반복문은 어떤 작업이 반복적으로 수행되도록 할 때 사용된다.

for문

for문은 반복횟수를 알고 있을때 적합하다.

for (int i=1; i<=5; i++) {
	System.out.println("Hello ~");
}

초기화: i=1은 1부터
조건식: i <= 5은 5까지
증감식: i++은 1씩 증가

위의 for문은 블럭{} 내의 문장을 5번 반복한다.

for문은 위와 같이 초기화, 조건식, 증감식, 블럭{} 모두 4부분으로 이루어져 있다.

제일 먼저 1️⃣초기화가 수행되고, 그 이후부터는 조건식이 참인 동안 2️⃣조건식 -> 3️⃣수행될 문장 -> 4️⃣ 증감식의 순서로 계속 반복된다. 그러다가 조건식이 거짓이 되면, for문 전체를 빠져나간다.

주의할 점은 조건식이 생략된 경우, 참(true)으로 간주되어 무한 반복문이 된다.

향상된 for문

JDK1.5부터 배열과 컬렉션에 저장된 요소에 접근할 때 기존보다 편리한 방법으로 처리할 수 있도록 for문의 새로운 문법이 추가되었다.

for (타입 변수명 : 배열 또는 컬렉션) {
	//반복할 문장
}

위의 코드에서 타입은 배열 또는 컬렉션 요소의 타입이어야 한다.

int[] arr = {10, 20, 30, 40, 50};

for (int i=0; i < arr.length; i++} {
	System.out.println(arr[i]);
}

//향상된 for문
for (int tmp : arr) {
	System.out.println(tmp);
}

위의 코드를 보면 향상된 for문이 더 간결하다는걸 알 수 있다. 향상된 for문은 일반적인 for문과 달리 배열이나 컬렉션에 저장된 요소들을 읽어오는 용도로만 사용할 수 있다는 제약이 있다.

while문

while문은 조건식이 참(true)인 동안, 즉 조건식이 거짓이 될 때 까지 블럭{} 내의 문장을 반복한다.

while (조건식) {
	// 조건식의 연산결과가 참(true)인 동안, 반복될 문장들을 적는다.
}
// for문
for (int i=1; i <= 10; i++) {
	System.out.println(i);
}

//while문
int i=1;

while (i <= 10) {
	System.out.println(i);
    i++;
}

위 for문과 while문의 코드는 완전히 동일하다.

while문 사용 시 주의할 점은 조건식을 생략할 수 없다.

do-while문

do-while문은 while문의 변형으로 기본적인 구조는 while문과 같으나 조건식과 블럭{}의 순서를 바꿔놓은 것이다. 그래서 while문과 반대로 블럭{}을 먼저 수행한 후에 조건식을 평가한다.

do {
	// 조건식의 연산결과가 참일 때 수행될 문장들을 적는다.
} while (조건식);

break문

break문은 자신이 포함된 가장 가까운 반복문을 벗어난다.

continue문

continue문은 반복문 내에서만 사용될 수 있으며, 반복이 진행되는 도중에 continue문을 만나면 반복문의 끝으로 이동하여 다음 반복으로 넘어간다.

이름 붙은 반복문

break문은 근접한 단 하나의 반복문만 벗어날 수 있기 때문에, 여러 개의 반복문의 중첩으로 된 경우에는 break문으로 중첩 반복문을 완전히 벗어날 수 없다. 이때는 중첩 반복문 앞에 이름을 붙이고 break문과 continue문에 이름을 지정해 줌으로써 하나 이상의 반복문을 벗어나거나 반복을 건너뛸 수 있다.

Loop1: 
for (int i=0; i < 5; i++) {
	for (int j=0; j < 3; j++) {
    	break Loop1;
        break;
        continue Loop1;
        continue;
	}
}








profile
서버 백엔드 개발자

0개의 댓글