Java에서 코드의 흐름을 통제하는 방법에는 두가지가 있다.
바로 선택문과 반복문인데 이 두가지를 통해 프로그램의 실행 흐름을 조작하는 방법에 대해서 알아보도록 하자.
1. 선택문
if문
if
if (inputNumber > 0) {
System.out.println("양수입니다.");
}
if 우측의 괄호에 참, 거짓을 구분할 수 있는 판별식이 들어가고 해당 판별식이 참이라면 그 후에 이어지는 중괄호에 있는 문장을 읽어 실행한다.
else
if (inputNumber > 0) {
System.out.println("양수입니다.");
} else {
System.out.println("양수가 아닙니다.");
}
else 의 의미는 위에 해당하는 조건식의 !연산을 한 결과가 참이면 실행한다는 의미이다. 위의 문장을 해석하면 다음과 같다.
if (!(inputNumber > 0)) {
System.out.println("양수가 아닙니다.");
}
if (inputNumber > 0) {
System.out.println("양수입니다.");
}
else if
if (inputNumber > 0) {
System.out.println("양수 입니다.");
} else if (inputNumber < 0) {
System.out.println("음수 입니다.");
} else {
System.out.println("양수도 음수도 아닙니다.");
}
else if 의 의미는 위에서 판별한 모든 판별식이 거짓이고 현재의 if문에 해당하는 판별식이 참이라면 블록에 있는 코드를 실행한다는 뜻이다. 위의 문장을 해석하면 다음과 같다.
if (!(inputNumber > 0) && !(inputNumber < 0)) {
System.out.println("양수도 음수도 아닙니다.");
}
if (!(inputNumber > 0) && (inputNumber < 0)) {
System.out.println("음수입니다.");
}
if (inputNumber > 0) {
System.out.println("양수입니다.");
}
switch-case문
기존의 switch-case문
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int inputNumber = Integer.parseInt(br.readLine());
switch (inputNumber) {
case 1:
System.out.println("1입니다.");
break;
case 2:
System.out.println("2입니다.");
break;
case 3:
System.out.println("3입니다.");
break;
case 4:
System.out.println("4입니다.");
break;
default:
System.out.println("1,2,3,4 가 아닙니다.");
}
}
}
입력받은 값이 해당하는 case로 찾아간 후 아래로의 모든 내용을 읽는다. 그래서 case에 해당하는 문장이 모두 끝났을 경우 break를 해주지 않으면 아래쪽에 해당하는 문장들도 전부 실행되어버린다. default는 위에 case에 해당하는 모든 문장이 전부 아닐 때 default의 문장을 읽어들인다.
추가된 switch-case문
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int inputNumber = Integer.parseInt(br.readLine());
switch (inputNumber) {
case 1 -> System.out.println("1입니다.");
case 2 -> System.out.println("2입니다.");
case 3 -> System.out.println("3입니다.");
case 4 -> System.out.println("4입니다.");
default -> System.out.println("1,2,3,4 가 아닙니다.");
}
}
}
->연산자를 통해서 case에 해당하는 문장을 실행하는 형식으로 변경되었다. 따로 break를 적지 않아도 된다.
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int inputNumber = Integer.parseInt(br.readLine());
String string = switch (inputNumber) {
case 1 -> {
System.out.println("1입니다.");
yield "1";
}
case 2 -> "2입니다.";
case 3 -> "3입니다.";
case 4 -> "4입니다.";
default -> "1,2,3,4 가 아닙니다.";
};
}
}
다음과 같이 {}를 사용해서 내부에 로직을 작성할 수고 있고,
yield를 사용해서 원하는 값을 리턴할 수도 있다.
{}를 사용하지 않으면 바로 해당하는 값을 리턴할 수 있다.
2. 반복문
while문
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int inputNumber = Integer.parseInt(br.readLine());
while (inputNumber < 10) {
System.out.println("현재 숫자는 " + inputNumber + "입니다.");
inputNumber++;
}
}
}
while 다음의 조건식이 참일 경우 아래 블록의 문장들을 실행한다.
do-while문
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int inputNumber = Integer.parseInt(br.readLine());
do {
System.out.println("현재 숫자는 " + inputNumber + "입니다.");
inputNumber++;
}while (inputNumber < 10);
}
}
우선 do 뒤에 나오는 블록을 실행한다. 그리고 블록의 실행을 마칠 때 while뒤의 조건식이 참이면 다시 맨 위의 블록으로 돌아가 흐름을 반복한다.
for문
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int inputNumber = Integer.parseInt(br.readLine());
for (int i = 0; i < 10; i++) {
System.out.println("현재 숫자는 " + inputNumber + "입니다.");
}
}
}
가장 기본적인 for문이다.( 1 ; 2 ; 3 )의 형식 안에서
1번 구간은 반복문 안에서 사용할 값을 초기화한다.
2번 구간은 조건식을 판별한다. 해당 조건이 참이면 아래 블록의 문장을 실행하고 거짓이면 멈춘다.
3번 구간은 해당 블록이 실행되고 나서 따로 처리할 변수들의 값 변화구간이다.
3번이 끝나면 2->블록->3->2->블록->3의 형태로 반복적으로 계속 실행한다.
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int inputNumber = Integer.parseInt(br.readLine());
int k = 0;
for (; i < 10 && inputNumber < 80; inputNumber++, i++) {
System.out.println("현재 숫자는 " + inputNumber + "입니다.");
}
}
}
1번 구간과 같이 해당 구간을 생략하는것도 가능하다.
2번 구간은 생략하면 true이다.
더불어 3번 구간에는 쉼표로 여러개의 작업을 처리하는 것도 가능하다.
for-each문
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int inputNumber = Integer.parseInt(br.readLine());
int[] arr = new int[inputNumber];
for (int i = 0; i < arr.length; i++) {
arr[i] = i + 1;
}
for (int i : arr) {
System.out.println("현재 숫자는 " + i + "입니다.");
}
}
}
아래의 for문인데 배열, list와 같이 선형 자료구조를 가지고 있는 집합에 대해서 자동적으로 반복을 실행해주는 반복문이다.
인덱스가 필요 없을 때 사용한다.
!Iterator와 Stream은 추후에 Collection프레임워크와 Stream을 다룰 때 다시 언급하기로 한다.
'Java > STUDY HALLE' 카테고리의 다른 글
[Java] GitHub Library 사용법 (0) | 2020.12.06 |
---|---|
[Java] JUnit5 (0) | 2020.12.05 |
[Java] 연산자 (1) | 2020.11.27 |
[Java] 데이터타입, 변수, 배열 (0) | 2020.11.21 |
[Java]JVM 기술 스택의 구조 이해하기 (0) | 2020.11.14 |