2020. 12. 12. 03:00ㆍJava/live-study
목표
자바가 제공하는 제어문을 학습하세요.
제어문
제어문이란 무엇이며 자바가 제공하는 제어문은 어떤 것들이 있나?
The statements inside your source files are generally executed from top to bottom, in the order that they appear. Control flow statements, however, break up the flow of execution by employing decision making, looping, and branching, enabling your program to conditionally execute particular blocks of code.
[출처]: The Java™ Tutorials
소스파일의 코드들은 일반적으로 보이는 순서대로 위에서 아래로 실행됩니다. 하지만 제어문은 선택, 반복, 분기를 채택함으로써 이 흐름을 벗어나 프로그램이 특정 코드들을 조건부로 실행될 수 있게 해줍니다.
자바가 제공하는 제어문은 다음과 같습니다.
- 선택문 (decision-making statements)
- 반복문 (looping statements)
- 분기문 (branching statements)
선택문과 선택문의 종류들
프로그램을 만들 때 사용자 혹은 프로그램의 상태 등 여러 상황에 해당하는 결과를 돌려줘야할 때가 있습니다. 선택문은 상태에 따른 특정 코드들을 실행함으로써 좀 더 범용적인 프로그램을 만들 수 있게 해줍니다.
선택문의 종류는 다음과 같습니다.
if-then
if-then-else
switch
if-then
문
if-then
문은 가장 기본적인 제어문으로 조건식과 then
절로 이루어져있습니다. 조건식이 true
이면 then
절을 실행하고 false
이면 then
절을 생략합니다.
if-then
문의 구조
if(조건식) {
//then...
코드1;
코드2;
코드3;
...
}
또한 then
절에 또다른 if-then
문을 중첩해서 사용할 수 있습니다. 중첩의 제한은 없지만 다소 많은 중첩은 코드의 가독성을 떨어뜨립니다.
중첩 if-then
문의 구조
if(조건식1) {
// then...
if(조건식2) {
// then...(조건식1과 조건식2가 모두 true일 때 실행)
코드1;
코드2;
코드3;
...
}
}
if-then-else
문
if-then-else
문은 조건식이 false
일 때 특정 코드들이 실행되게 하기위한 else
절을 제공합니다. 조건식이 true이면 then
절을 실행하며 false이면 else
절을 실행합니다.
if-then-else문의 구조
if(조건식) {
// then...
코드1
코드2
코드3
...
} else {
// else...
코드1
코드2
코드3
...
}
조건문이 true
일 때 실행될 코드가 하나 밖에 없다면 다음과 같이 중괄호를 생략할 수도 있습니다.
if(조건문)
코드;
하지만 무작정 생략하는 것은 코드의 흐름이 예상과 다르게 일어날 수 있게 합니다. 그리고 개인적으로는 중괄호를 생략하는 것은 깔끔해보일 수도 있지만 가독성 면에서는 좋지 않다고 생각합니다.
if(조건식1)
if(조건식2)
System.out.printLn("조건식1과 조건식2 모두 true입니다.");
else System.out.printLn("조건식1이 false입니다.");
위의 코드를 들여쓰기를 통해 보면 조건식1이 true
이고 조건식2가 false
일 때 아무 일도 일어나지 않을 것이라고 예상됩니다. 하지만 실제 결과는 조건식1이 false입니다.
라는 결과가 출력됩니다.
이와 같은 결과가 나온 이유는 중괄호가 생략되었을 때if-then-else
문의 else
절은 매칭된 else
절이 없는 if
문 중 가까이 있는 if
문과 매칭된다는 특징때문입니다.
따라서 위의 코드는 if-then-else
문의 내부에 있는 if-then
문이 아닌 if-then
문의 내부에 있는 if-then-else
문이 됩니다.
원래 예상했던 결과를 얻으려면 다음과 같이 중괄호로 else
절이 어떤 if
문과 매칭되는지 명시하여 코드를 작성하면 됩니다.
if(조건식1) {
if(조건식2)
System.out.printLn("조건식1과 조건식2 모두 true입니다.");
}else{
System.out.printLn("조건식1이 false입니다.");
}
또한 else if
절을 통해 우리는 다양한 조건식에 해당하는 특정 코드를 실행할 수 있습니다.
else if
절을 사용한 if-then-else
문
if(조건식1) {
// then...
코드들...
}else if(조건식2) {
// then...
코드들...
} else if(조건식3) {
// then...
코드들...
} else {
// else...
}
switch
문
switch
문은 if
문의 else if
절과 같이 다양한 상태에 따른 코드를 실행하게 합니다.
switch
문의 구조
switch(switchVar){
case case1:
// 코드들...
break;
case case2:
// 코드들...
break;
...
case caseN:
// 코드들...
break;
default:
// 코드들...
break;
}
switchVar
은 비교하고자하는 변수로 primitive type 중에서는 byte
, short
, char
, int
(해당하는 Wrapper 클래스도 가능), Enum
type, String
클래스가 올 수 있습니다.
case
label의 각 case
들은 switchVar
의 타입에 해당하는 리터럴로 switchVar
과 case
labal의 case
를 비교하여 일치하면 해당 코드를 실행합니다.
default
label은 모든 case
label과 일치하지 않을 때 실행되는 코드를 갖고 있는 label
입니다.
break
문은 각 label의 코드들을 실행하고 switch
문을 벗어날 때 사용합니다. break
문이 없으면 일치하는 label의 코드들을 실행하고 그 후의 case
label들이 일치 여부와 관계 없이 실행됩니다. 따라서 의도하지 않는 이상 label의 코드들을 실행한 후 switch
문을 벗어날 수 있도록 break
문을 작성해야합니다.
반복문과 반복문의 종류들
반복문은 조건이 true
일 때 특정 코드 블록을 반복해서 실행하는 구문입니다. 반복문으로 우리는 어떤 코드들을 반복해서 작성하는 것이 아닌 조건의 제어만으로 코드를 반복해서 수행할 수 있습니다.
반복문의 종류들
while
문do-while
문for
문
while
문
while
문은 자바의 기본 반복문 중 하나입니다. 조건이 false
가 되기 전까지 특정 코드 블록을 반복해서 실행합니다.
while
문의 구조
while(조건식) {
// 코드들...
}
while
문은 가장 먼저 조건식의 결과(조건식의 결과는 반드시 boolean
타입)를 확인합니다. 만약 조건식이 false
면 특정 코드 블록은 생략한 뒤 그 다음 구문들을 실행합니다.
반대로 조건식의 결과가 true
면 코드 블록의 코드들이 실행되며 실행이 모두 끝나면 다시 조건식으로 돌아와서 결과를 확인합니다. 마찬가지로 조건식의 결과가 true
냐 false
냐에 따라 코드 블록을 실행한 뒤 조건식의 결과를 다시 확인하거나 다음 구문을 실행합니다.
이러한 반복은 조건식이 true
를 반환하는 동안 계속되며 보통은 특정 코드 블록 내에 조건식의 결과에 영향을 미치는 코드를 작성함으로 반복을 벗어나게 합니다. 만약 특정 코드 블록 내에 조건식의 결과에 영향을 미치는 코드가 없다면 이 while
문은 프로그램이 종료될 때까지 무한히 반복됩니다.
do-while
문
do-while
문은 while
문과 비슷한 반복문입니다.
do-while
문의 구조
do {
// 코드들...
}while(조건식);
차이점은 while
문은 코드 블록을 실행하기 전에 조건식의 결과를 확인하지만 do-while
문은 코드 블록을 먼저 실행한 후에 조건식의 결과를 확인합니다. 따라서 do-while
문의 코드 블록은 적어도 한번은 실행된다는 특징이 있습니다.
또한 do-while
문의 끝은 코드 블록이 아닌 while(조건식)
이 나타내므로 do-while
문의 끝에는 세미콜론을 붙여줘야합니다.
for
문
for
문은 무한한 반복을 원하지 않는 이상 while
문이나 do-while
문보다 좀 더 편리하게 반복문을 제공합니다.
for
문의 구조
for(변수 초기화; 종료 조건식; 변수 변화식) {
// 코드들...
}
for
문의 구조를 보면 왜 while
문이나 do-while
문보다 좀 더 편리한지 알 수 있습니다. for
문을 처음 작성할 때 조건식에 사용할 변수의 초기화, for
문의 종료를 판단할 조건식, 종료 조건식에 영향을 미치는 변수 변화식을 명시함으로써 우리의 실수로 무한 반복을 발생시키는 상황을 줄여줍니다. (물론 for
문을 사용한다고 무한 반복의 실수가 아예 일어나지 않는 것은 아닙니다.)
for
문이 실행되는 순서는 다음과 같습니다.
- 변수를 초기화합니다. 변수 초기화는
for
문이 처음 실행될 때만 실행됩니다. - 종료 조건식으로 변수가 해당 조건식에 대한 결과를 확인합니다.
true
면 코드 블록을 실행,false
면for
문을 벗어나 다음 구문을 실행합니다. - 코드 블록을 실행한 후 변수 변화식이 실행됩니다. 변수 변화식으로 종료 조건식의 결과에 영향을 미치는 변화가 일어납니다.
- 종료 조건식의 결과가
false
가 나올 때 까지 2번과 3번의 실행이 반복됩니다.
분기문과 분기문의 종류들
이전에 어떠한 조건에 따라 특정 코드를 실행, 혹은 반복했던 선택문과 반복문과 달리 분기문은 분기문 자체만으로 코드의 흐름을 제어합니다.
분기문의 종류
break
continue
return
break
문
break
문은 break
문을 담고 있는 코드 블록을 즉시 벗어나는 구문입니다. 앞서 보았듯이 break
문은 switch
문에서 사용할 수 있으며 더불어 다른 제어문 (if
문, while
, do-while
, for
문)에서 사용할 수 있습니다.
continue
문
continue
문은 반복문에서 사용하는 구문으로 현재의 반복을 생략하는 구문입니다. 생략 후 continue
문과 가장 가까운 반복문의 조건식부터 코드를 실행합니다.
return
문
return
문은 현재의 메서드를 빠져나오는 분기문입니다. return
문에 의해 메서드를 빠져나오면 제어 흐름은 메서드를 호출한 곳으로 돌아갑니다.
return
문에는 두가지 형태가 있는데 하나는 값을 돌려주는 형식, 다른 하나는 그냥 메서드를 호출한 곳으로 돌아가는 형식이 있습니다.
값을 돌려주려면 단순히 return
문 이후 돌려주고자 하는 값을 작성하면 됩니다.
return 돌려주고자 하는 값
'Java > live-study' 카테고리의 다른 글
4. 과제1 - live-study의 대시 보드 (0) | 2020.12.12 |
---|