-
Java - 제어문Java/java study 2022. 1. 1. 21:47반응형
- 선택문
- 반복문
제어문
'제어문' 이란?
모든 일을 순차적으로 실행할 수 있다면 아무런 상관이 없겠지만, 조건에 따라 코드를 반복해야 될 수도, 건너뛰어야 될 수도, 순서를 변경해야 될 수도 있는 일이 발생한다. 이때, Java에서는 제어문을 사용하여 코드 실행 흐름을 제어할 수 있다. 즉, 실행 흐름을 개발자가 원하는 방향으로 바꿀 수 있도록 하는 것이 제어문이다.
제어문의 종류
- 선택문 - if-then, if-then-else, if-then-else if-then-else, switch
- 반복문 - for, while, do-while, for-each
- 분기문 - break, continue
선택문
'선택문' 이란?
특정 데이터의 값에 따라 수행할 구문을 선택
if-then
if-then 문은 가장 기본적인 제어문 중 하나로 지정한 조건이 만족할 시에 if문 블록{ } 안에 있는 코드가 실행이되고 조건이 만족하지 않을 경우 if문 블록 안에 코드가 실행되지 않고 넘어간다.
if(조건식){ 조건식이 true일 경우 실행되는 코드 } ex) if(num > 0){ System.out.println(num + "값은 양수 입니다."); }
if-then-else
if-then 문은 조건이 'true' 일때만 if문 블록이 실행이 됐지만, if-then-else 문은 'false'일 때 else의 블록이 실행된다. 즉, 조건이 'true'일 경우와 'false'일 경우에 따라 코드를 실행시킬 수 있다.
if(조건식) { 조건식이 true 일 경우 실행되는 코드 }else{ 조건식이 false 일 경우 실행되는 코드 } ex) if(num > 0) { System.out.println(num + "값은 양수 입니다."); }else{ System.out.println(num + "값은 0 or 음수 입니다."); }
if-then-else if-then-else
코드를 작성하다 보면 양자택일이 아닐 경우가 많다. 상황에 따른 각 조건에 따라 각각마다 다른 코드를 작성할 필요가 발생하는데, 이때 if-then-else if-then-else 문을 사용한다.
if(조건식1) { 조건식1이 true 일 경우 실행되는 코드 }else if(조건식2) { 조건식2가 true 일 경우 실행되는 코드 }else if(조건식3) { ...... }else if(조건식n) { 조건식n이 true 일 경우 실행되는 코드 }else { 모든 조건식이 false 인 경우 실행 되는 코드 } ex) if(num > 0) { System.out.println(num + "값은 양수 입니다."); }else if(num == 0) { System.out.println(num + "값은 0입니다."); }else { System.out.println(num + "값은 음수 입니다."); }
switch
switch문은 if문과 마찬가지로 선택 제어문이다.
- 모든 값, 범위를 기반으로 판단하는 if문과 달리 정수, 열거된 값, 문자, 문자열 만을 사용할 수 있다.
- 컴파일러를 통해 실행 경로를 설정하는 점프 테이블이 만들어지기 때문에 조건에 따른 경우의 수가 많아지면 if문보다 더 빠른 성능을 보이게 된다. (조건에 따른 경우의 수가 5개 이상이면 성능 차이가 보이기 시작한다.)
- if문에 비해 간결하고 좋은 가독성을 가지고 있다.
switch(변수) { case 값1: 변수의 값이 값1과 같을 경우 실행되는 코드 break; case 값2: .... case 값n: 변수의 값이 값n과 같을 경우 실행되는 코드 break; default: 변수의 값이 어떠한 case와도 같지 않을 경우 실행되는 코드 break; } ex) switch(grade) { case 'A': System.out.println("당신의 점수는 100~90점 사이에 있습니다."); break; case 'B': System.out.println("당신의 점수는 90~80점 사이에 있습니다."); break; case 'C': System.out.println("당신의 점수는 80~70점 사이에 있습니다."); break; case 'D': System.out.println("당신의 점수는 70~60점 사이에 있습니다."); break; default 'F': System.out.println("당신은 재수강 대상자입니다."); break; }
Java 13버전부터는 switch 연산자를 제공한다. Java 12 버전 이전 switch문은 값을 반환할 수 없고, switch문이 길고 지저분했다. 이러한 단점을 보완하여 나온 것이 switch 연산자이다. switch 연산자는 결과 값을 화살표 연산자(->)로 반환할 수 있으며, multiple case 등을 지원하여 더욱 간결하고 쉽게 작성할 수 있게 되었다.
반복문
'반복문' 이란?
특정 코드들이 반복적으로 실행하기 위해 사용
for
반복된 횟수가 고정된 경우 사용하거나 index 위치나 값이 필요한 경우 사용된다.
for(초기식;조건식;증감식) { 실행 코드 } ex) 1~10까지의 합을 구하는 for문 for(int i = 1 ; i <= 10 ; i++) { sum += i; }
for-each
Enhanced for 문이라고 불리며 index 값이 아닌 요소를 통한 값의 순회를 진행한다. 가변적인 컬렉션의 값을 처리하기 좋다.
for(Type variable : Collection<Type>, Thpe[] array) { 실행 코드 } ex) 1~10까지의 합을 구하는 for문 int [] numArr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; for(int num : numArr) { sum += num; }
while
조건식이 true 일 경우 실행 되는 반복문이다. 조건식이 false가 되거나 break문을 만나면 반복문이 중지된다.
while(조건식) { 실행 코드 } ex) 1~10까지의 합을 구하는 while문 int i = 1; while(i <= 10) { sum += i; i++; }
do-while
최소 1번은 코드가 실행되는 반복문이다. 코드가 먼저 실행이 된 후, 조건식에 따라 반복문이 실행된다.
do{ 실행 코드 }while(조건식); ex) 1~10까지의 합을 구하는 do-while문 int i = 1; do{ sum += 1; i++; }while(i <= 10);
분기문
'분기문' 이란?
조건문에서 개발자의 의도에 의해 중간 흐름을 바꿀 수 있는 구문
break
break 문은 자신이 포함 된 가장 가까운 반복문을 빠져나가는 구문이다.
for(초기식;조건식;증감식) { 실행 코드 break; } ex) 1~10까지의 합을 구하는 for문 - break 사용 for(int i = 1 ; ; i++) { if( i > 10 ) break; sum += i; }
반복문이 중첩되어 있다면 break문은 가장 가까운 반복문만 종료한다. 중첩된 반복문도 종료시키는 방법은 label을 이용하면 된다. label을 이용하면 해당 위치로 반복문을 빠져나가게 된다.
labelName: for(초기식;조건식;증감식) { for(초기식;조건식;증감식) { 실행 코드 break labelName; } } ex) 구구단 출력 - 9단까지 출력후 for문 종료 label: for(int i = 2 ;; i++) { for(int j = 1 ;; i++) { System.out.printf("%d + %d = %d", i, j, i*j); if(i == 9 && j == 9) break labe; } }
continue
반복문 내에서 사용 가능하며 반복문 실행 시 continue 아래 부분은 실행되지 않고 반복문을 다시 실행해준다. 전체 반복 중에 특정 조건을 만족하는 경우를 제외하고자 할 때 쓰인다.
for(초기식;조건식;증감식) { 실행 코드 continue; } ex) 1~10까지의 합을 구하는 for문 - 단, 5의 값은 제외 for(int i = 1 ; i <= 10 ; i++) { if(i == 5) continue; sum += i; }
반응형'Java > java study' 카테고리의 다른 글
Java - LinkedList, Stack, Queue 구현하기 (0) 2022.01.02 JUnit 5 (0) 2022.01.02 Java - 연산자 (0) 2021.12.19 Java - 프리미티브 타입과 레퍼런스 타입 (0) 2021.12.10 Java - JVM에 대하여 (0) 2021.12.03