제어문
제어문이란 말 그대로 코드를 '제어'해야 할 때 쓴다. 이를테면 어떤 조건(if-else/switch)에 따라 다르게 동작해야 할 때라든가, 같은 코드를 반복(loop)해야 할 때 쓰는 문(statement)을 제어문이라고 한다.
조건문(if-else)
if-else문의 기본 문법
if(조건식) { //조건에 맞을 때 수행할 문장 } else { //조건에 맞지 않을 경우 수행할 문장(생략 가능) }
조건식의 결과는 반드시 boolean타입(true/false)이어야 한다.
if - else if문
if의 조건식이 맞지 않을 때 다른 조건식을 충족하는지 확인할 때 사용하는 것이 else if절이다.
if(조건식1) { //.... } else if(조건식2) { //... } else if(조건식3) { //.... } else { //else블럭 생략 가능 }
else if문을 활용하면 이런 식으로 여러 조건식을 검사할 수 있다.
중첩 if문
if-else (if)문 안에 다시 if-else문을 넣을 수 있다. 조건1이 맞으면 조건2도 맞는지 체크하고, 조건 2가 맞으면 조건3도 맞는지 체크할 수 있다.
if(조건식1) { if(조건식2) { if(조건식3) { //... } else{ //생략가능 } } else { // 생략 가능 } } else if { if(false) { //.... } } else { if(false) { //... } else { //... } }
이렇게 복잡하게 쓸 일은 별로 없지만, 이런 식으로 사용하는 것도 불가능한 것은 아니다.
선택문(switch)
소위 switch문이라 불리는 선택문이 하는 일은 if-else문과 다르지 않다. 처리해야 하는 조건이 많다면 switch문으로 좀 더 보기 좋게 코드를 짤 수 있다. 이를테면 학년 마다 다른 작업을 수행해야 하는 경우 if문이 늘어나면서 코드의 가독성이 떨어질 수도 있다. 그럴 때 switch문을 사용하면 좀 더 읽기 쉬운 코드를 짤 수 있다.
기본 문법
switch(조건식) { case 값1 : //실행 내용 break; case 값2 : //실행 내용 break; case 값3 : //실행 내용 break; default : // 맞는 조건이 없을 때 실행할 내용 }
주의해야 할 것이 몇 가지 있다.
- switch문의 조건식에는 정수 또는 문자(열)만 들어갈 수 있다.
- case문의 값으로는 상수(final)인 정수 또는 문자(열)만 올 수 있다.
break
로 case문의 끝을 맺어주지 않으면 다음break
를 만날 때까지 다음 case문으로 계속해서 넘어간다. 의도적으로 빼는 경우도 있다.
if-else문에서 설명한 것처럼 swtich문 또한 중첩해서 사용할 수 있다.
반복문(loop)
반복문은 어떤 일을 반복해야 할 때 사용한다. 넓게는 for문과 while문으로 나눠볼 수 있다.
for
문법
for(변수 초기화; 조건식; 증감식;) { //내용 } for(int i; i<10; i++) { //반복할 내용 } for(;;) { //무한 반복. 조건을 맞춰 break/return해줘야 한다. //,,, }
반복문이 동작하는 순서는
- 변수 초기화 (시작할 때 한 번만 초기화 된다.)
- 조건식
- 반복할 내용
- 증감
- 다시 조건식부터 반복
필요하다면 콤마(,)를 구분자로 해서 변수를 두 개 이상 넣을 수도 있지만 그렇게는 잘 사용하지 않는다.
당연히 for문 또한 여러 번 중첩해서 사용할 수 있다.
break
나return
키워드를 사용해서 for문을 빠져나올 수 있다. 보통 어떤 조건문과 결합해서 반복하다가 어떤 조건이 성립되면 반복문을 멈추는 용도로 쓴다.
향상된 for문
만약 배열이나 컬렉션에 든 요소를 전부 출력해야 한다면 stream을 사용할 수도 있겠지만 향상된 for문으로도 편리하게 출력할 수 있다.
문법
List<Integer> numbers = new ArrayList<>(Arrays.asList(1,2,3,4,5,6,7,8,9)); for(int number : numbers) { System.out.println(number); } //result - 1 2 3 4 5 6 7 8 9
위처럼 numbers의 요소들을 number에 하나씩 대입해서 출력한다. 반복문에서 변수를 사용할 필요가 없다면 향상된 for문을 사용하는 것도 좋은 방법이다.
while
for문은 얼마나 반복해야 할 지 알고 있을 때 주로 사용한다. while문은 얼마나 반복될지는 알 수 없고 조건식이 맞을 동안만 반복해야 할 때 주로 사용한다.
while(조건식) {
//반복할 코드
}
더 이상 조건이 맞지 않을 때까지 반복한다. 조건식에 true
를 주고 무한 반복을 하면서 어떤 조건에 맞으면 break
를 사용해서 while문을 빠져나오기도 한다.
do - while
while문은 조건식이 false
라면 단 한 번도 수행되지 않는다. do-while문은 순서를 바꿔서 조건이 맞지 않더라도 반드시 한 번은 수행되어야 할 작업이 있을 때 사용한다.
문법
do { //반드시 한 번은 실행되는 코드 //조건식이 맞다면 반복한다. } while(조건식);
continue
위에서 break
와 return
을 사용해서 조건이 맞을 때 반복문을 빠져나오기도 한다고 설명했다. 반복하다가 continue
를 만나면 더 이상 작업을 수행하지 않고 다음 반복으로 넘어간다.
문법
for(int i=0;i<10;i++) { if(i%2==0) continue; //실행해야 할 문이 한 줄일 때 {} 생략 가능 System.out.print(i); } //result : 1 3 5 7 9
이름 붙인 반복문
break
를 사용하면 반복문을 벗어날 수 있다고 설명했다. break
는 하나의 반복문만 멈출 수 있다. 따라서 중첩된 반복문 안에서 사용한다면 완전히 반복문을 빠져나갈 수 없다. return
을 이용해서 해결할 수 있긴 하지만, 반복문에 이름을 붙이는 것으로 해결할 수도 있다.
문법
hasNameLoop : for(int i = 0; i < 10; i++) { for(int j=0; j<i; j++) { if(j==5) break hasNameLoop; //hasNameLoop라는 이름을 가진 반복문 밖으로 나온다. System.out.print("*"); } }
while문 앞에도 이름을 붙일 수 있다.
'Java' 카테고리의 다른 글
6주차 - 상속 (0) | 2020.12.25 |
---|---|
5주차 - 클래스, 생성자, 객체, this, 메소드 (0) | 2020.12.19 |
자바 람다식(Java Lamda Expression) (0) | 2020.10.29 |
Hassing & HashFunction (0) | 2020.09.10 |
예외처리 (0) | 2020.09.10 |