※ Chapter05 실행 흐름의 컨트롤.
※ 본문은 윤성우의 열혈JAVA를 정리한 글입니다.
※ 문제가 될시 비공개 처리하겠습니다.
취업준비를 해야해서 그런지 시간이 너무 부족하다..
물론 매일 공부를 12시간씩 한다면 시간이 부족하진 않겠지만 스스로가 너무 공부를 잘 안하는 것 같다.
코로나 우울증처럼 매일 기분이 좋았다가 나빠졌다가 반복된다.
그래도 다음해에 취업하기 위해서는 꾸준히 공부해야한다.
앞으로 조금 더 빠르게 진도를 나가서 이후 코딩테스트 연습을 하도록 하자.
§ if 그리고 else
특정 조건이 만족될 때에만 실행하고픈 문장이 있다면 if 문을 활용하면 된다.
두 개 이상의 조건중 하나만 만족할때 문장이 실행되려면 else문을 활용하면 된다.
예제를 통해 if~else 를 한번 들여다보자.
if 오른편에 위치한 소괄호에서는 true 또는 false 가 와야한다.
(true 또는 false 를 반환하는 연산이 오게 된다.)
else 또한 마찬가지 이다.
만약 if 오른편에 위치한 소괄호가 false 문이 나오게 되면 else 문으로 넘어간다.
즉 순차적 구조인 셈이다.
결과를 한번 보자.
결과를 보면 어떠한 방식인지 이해가 갈 것이다.
이 문장은 다음과 같이 사용가능하다.
중괄호가 생략되었다.
이처럼 경계를 구분하는 중괄호를 생략할 수 있는 이유는 if절과 else 절에 속한 문장이
하나이기 때문이다. (둘 이상의 문장이 있을때는 중괄호 생략이 불가능하다.)
만약 2개 이상의 조건을 만들기 위해서는 다음과 같이 만들면 된다.
마지막 조건은 다른 조건을 다 만족하지 않았을 때 실행될 수 있도록
조건을 붙이지 않는 경우가 많다.
[여기서 else if 는 계속해서 추가 가능하다.]
이제 자주 사용되지는 않지만 if ~ else 문과 유사한 성격의 조건 연산자를 살펴보자.
(주로 코딩할때 사용하지는 않지만, 코딩테스트에서 사용할 수도 있으니 알아는 두자.)
이 문장의 구조는 다음과 같다
조건 ? 수1 : 수2
(조건= 조건, 수1= true 시 반환, 수2 = false 시 반환)
여기서 약간 헷갈리는 문장은 diff = (num1>num2) ? (num1-num2) : (num2-num1) ; 이다.
이 문장은 다음과 같이 오른편의 연산이 우선이 된다. (우선순위에 의한 연산)
diff = (num1>num2) ? -50 : 50
이정도만 알아놓도록 하자.
§ switch와 break
switch문은 조건에 따라 실행할 문장을 구분하는 측면에서 if ~ else 문과 유사하다.
(보통 else if 문이 많이 들어가는 경우 switch 문을 많이 활용한다.)
기본적인 골격은 다음과 같다.
switch(n) {
case 1: //n이 1이면 여기서부터 실행
case 2: //n이 2이면 여기서부터 실행
case 3:
default: //해당하는 case가 없다면 여기서부터 실행
}
다음 예제를 통하여 switch 문장을 확인해보자.
앞서 얘기한것처럼 n=3 이므로 case 3: 부터 실행을 이어나가기 때문에
결과값이 이렇게 나온 것이다.
그럼 의문점이 생기게 된다.
"만약 case 3 만 실행시키고 나머지는 실행시키고 싶지 않으면 어떻게 해야 하는가?"
답은 break 문에 있다.
어떻게 사용하는지 예제를 통해 바로 알아보자.
이처럼 간단하게 break 문을 넣어서 활용가능하다.
switch 문의 특징을 한가지 더 언급하자면 다음과 같이 사용하는것도 가능하다.
위와 같이 코드를 구성하면 switch문에 전달되는 정수가 1,2,3인 경우에 실행되는 영역이 같아진다.
§ for, while 그리고 do ~ while
앞서 얘기한 컨트롤 문장들은 '선택적 실행'을 위한 것들이다.
for과 while 문은 '반복적 실행'을 위한 것들이다.
while문
간단한 예제를 보고 while문에 대해 알아보자.
실행 결과는 다음과 같다.
이처럼 while 문의 문장은 간단하게 나타낼 수 있다.
while(반복 조건) {
반복영역
}
반복 조건에 따라서 무한하게 반복되는 경우가 생길 수 있으니 이것만 주의하자.
while을 활용할때에는 do ~ while 문이라는 것도 존재한다.
미리 이야기하자면, 조건을 뒤에 달아놓고 우선적으로 한번 실행하는 것이 do~while 문이다.
앞서 소개한 예제와 결과값은 동일하게 나온다.
"조건에 따른 반복문이 실행된다. 그런데 반드시 한 번은 실행이 된다."
while문과 동일한 기능을 하는 for문이 존재한다.
방금같은 예제는 for문을 활용하는것이 훨씬 보기도 간결하다.
for문의 기본 구조는 다음과 같다.
for(반복의 횟수를 세기 위한 변수 ; 반복 조건 ; 반복 조건 무너뜨리기 위한 연산){
반복문장
}
예제를 통해서 알아보자.
이처럼 while문보다 간결하게 나타낼 수 있다.
for문의 실행 흐름은 다음과 같다.
1. 변수의 선언 및 초기화
2. 반복 조건이 true인지 확인
3. 반복 영역을 실행 (반복 조건이 true이면)
4. 변수의 값 증가. ->2번으로 되돌아감
§ break & contunue
이 두가지는 실행 흐름의 조절을 목적으로 반복문 내에 삽입되는 키워드이다.
이 둘을 적절히 활용하면 다양한 흐름을 보이는 반복문을 구성할 수 있다.
예제를 살펴보자.
위 예제에서 보이듯이 break문이 실행되면, 이를 감싸고 있는 반복문 하나를 빠져나가게 된다.
"break 문을 감싸고 있는건 if문이 아닌가?"
가장 가까이 감싸고 있는 것은 if문이지만, break문은 실행되면 가장 근접한 거리에서
자신을 감싸고 있는 '반복문'을 찾아서 빠져나가게 된다.
그리고 이어서 다음 문장을 실행한다.
continue 문은 break 문과 혼동이 되기 쉽다.
continue문은 탈출이 아닌 실행하던 반복문의 나머지 부분을 생략하고
프로그램의 흐름을 조건 검사 부분으로 이동시킨다.
예제를 확인하고 이해해보자.
5와 7의 배수가 아니라면 continue; 문을 만나서 나머지 건너뛰고 바로 조건문으로 올라가게 된다.
따라서 위와 같이 값이 나온 것이다.
break를 하나 더 활용할 수 있는 방안이 있는데, 바로 무한루프이다.
무한루프를 이용하여 어떠한 값을 찾을때 break문을 활용하면 유용하다.
다음 예제를 보자.
위 예제는 '6의 배수이면서 14의 배수인 가장 작은 자연수'를 찾는 예제이다.
'값의 범위'를 제한하지 않고 무한루프를 형성하였다.
"6의 배수이면서 14의 배수인 자연수를 찾을 때까지 이 반복을 계속하겠다."
라는 의미가 담겨있는 예제였다.
§ 반복문의 중첩
'하나의 문장 안에 다른 문장을 삽입할 수 있음'을 이미 알고있다.
예를들어 for문 안에 if 문을 삽입하는 경우처럼.
반복문의 중첩도 마찬가지이다.
예제를 보면서 이해해보자.
(참고로 println과 print의 차이점은 개행에 있음을 유의하자)
for문의 중첩은 대학교 1학년때 구구단을 만들때 사용한다.
사실 이러한 구구단이나 별찍기는 많은 예제들도 있고 한번 이해하면 쉽다.
실행 결과는 2단부터 9단까지 나오게 된다. (실행 결과값이 너무 길어서 캡처하지 않았다.)
또한, 이러한 중첩을 활용할 때에는 while문보다 for문이 더 간단하게 보이기도 하고
코드의 구성이 while문보다 for문이 보기 편하기 때문에 for문을 우선적으로 고려하는것이 맞다.
중첩된 반복문을 한 번에 빠져나오는 방법은 무엇이 있을까?
간단하게 생각하면 break를 사용하면된다.
다음 예제를 보자.
"구구단에서 곱의 결과가 72인 결과를 딱 하나만 보여라"
그러나, 기대와는 달리 결과값이 2개가 나오게 된다.
break문이 탈출하는 것은 안쪽 for문이기 때문에 바깥쪽 for문까지 탈출하지 못한다.
이럴때는 레이블을 이용하여 빠져나갈 위치를 명시해주면 된다.
이처럼 레이블을 이용해서 빠져나갈 위치를 명시해주면 간단하게 반복중첩문도 빠져나갈 수 있다.
'JAVA' 카테고리의 다른 글
자바 기초부터 차근차근...(8) (0) | 2020.04.22 |
---|---|
자바 기초부터 차근차근...(7) (0) | 2020.04.21 |
자바 기초부터 차근차근...(5) (0) | 2020.03.25 |
자바 기초부터 차근차근...(4) (0) | 2020.03.24 |
자바 기초부터 차근차근(3) (0) | 2020.03.15 |