조건문
조건문은 if문과 switch문으로 구분된다.
if
1 | boolean condition; |
if문은 조건이 true
일 때 블럭 {}
안의 명령을 수행하도록 하는 조건식이다.
1 | if(num<0){ |
else-if 와 else
if문의 첫번째 조건이 충족(true
)하지 않는 다른 조건의 경우는 else if
문으로 조건 분기가 가능하다. else
는 위의 모든 조건을 제외한 경우를 의미한다.
if문 안의 조건엔 비교연산자와 논리연산자가 함께 쓰일수 있다.di
1 | if(num>=0 && num<10){ |
논리연산자 사용
if문을 사용할때 boolean 타입의 변수를 사용하기보다 논리연산자를 사용하는 경우가 많다. 이 때 알아야 할 것이 있다. 바로 아래 예제 코드를 확인해보도록 하자.
1 | public class StudyHalle04 { |
이 코드는 if문을 통해 success와 fail을 구분하는 코드지만, 필자가 이 코드를 통해 확인하고 싶은 부분은 if문 조건문 안에서 증감연산자를 적용한 num1
과 num2
가 값이 어떻게 바뀌는지 보고 싶었다.
위 코드의 결과는 아래와 같다.
1 | failed |
if문 안에서 똑같이 num1
과 num2
를 증감연산하였는데, 왜 num1
만 증감연산 적용된걸까.
if 조건문안에서 사용한 논리연산자가 && 였다. && 는 두항 모두 true
일 때 true
를 반환하는 논리연산자이다. 위의 코드에서 num1++은 11인데 11은 15와 일치하지 않으므로 false
를 반환하다. 그럼 우측 항이 true
이든 false
이든 상관없이 이미 false
이므로 if문은 바로 break를 실행하고 빠져나오게 된다. 그래서 num2는 증감연산지 실행되지 않은것이다.
중첩 if문
if문안의 if문이 들어가는 중첩 if문도 가능하다.
1 | String name="David Beckham"; |
if문안의 중첩도를 3이상 만들수도 있지만, if문의 중첩도는 2 이하로 맞추는 것의 향후 코드 가독성을 위해서 좋다. 논리연산자를 사용하면 불필요한 중첩도를 낮출수 있다. 위의 코드를 리팩토링해보겠다.
1 | if(number==7 && name.equals("David Beckham")){ |
훨씬 가독성이 높아진다. 중첩도 2 수준만으로 대부분의 논리를 구현할 수 있으므로 중첩도가 3이상 넘어가지 않도록 주의하자.
삼항연산자
삼항연산자를 이용하면 if-else문을 간단히 한줄로 작성할수도 있다.
1 | (조건식) ? [true] : [false] |
?
기준으로 왼쪽이 조건식이 되며, ?
오른쪽은 조건에 따라 수행될 함수 또는 대입될 리터럴을 작성한다.
조건식이 true이면 :
기준으로 왼쪽이 수행되고, false이면 :
기준으로 오른쪽이 수행된다. 아래 예제코드를 보자.
1 | import java.time.LocalDateTime; |
1 | 지금은 오후입니다. |
LocalDateTime
객체로 시간을 가져와서 그중 시간이 12시 이상이면, 문자열 변수 ampm
에 오전/오후 리터럴을 대입하는 코드이다.
switch
특정 조건으로 분기 처리할 수 있는 if문과 달리 switch문은 하나의 조건문으로만 명령이 수행되도록하는 특징이 있다. 이름 그대로 ‘스위치’ 같은 역할을 수행하는데, if문보다 간결 하다는 장점이 있다.
1 | int num=2; |
1 | 입력받은 숫자는 2입니다. |
switch로 들어온 조건에 따라 다양하게 분기처리가 가능하다. case
는 if
또는 else-if
와 같다. default
는 else
와 같다.
switch문에서 사용한 break
는 아래 정리해두었다.
switch의 제약조건
- switch문의 조건식 결과는 정수 또는 문자열이어야 한다.
- case문의 값은 정수, 상수만 가능하며, 중복되지 않아야 한다.
출처 : 남궁성 - Java의 정석
중첩 switch문
1 | int num=2; |
위의 코드처럼 switch 안의 switch가 중첩될수도 있으며, case 2개를 한번에 분기처리할수도 있다.
반복문
for i
1 | for(iterator 초기값; iterator 조건; 증감;) { } |
for문의 ()
안에는 iterator의 초기값, 조건, 증감이 들어간다. iterator가 true
일때까지 증감할때마다 블럭{}
안의 코드가 반복된다.
1 | for(int i=0; i<10; i++){ |
1 | 0 1 2 3 4 5 6 7 8 9 |
for each
for-each는 for-i와 달리 iterator를 쓰지 않는 for문이다.
1 | int[] numbers = {0,1,2,3,4,5,6,7,8,9}; |
1 | 0 1 2 3 4 5 6 7 8 9 |
iterator를 쓰지 않기 때문에 List 또는 배열등의 자료구조가 필요하다.
출처 : w3schools - Java For Loop
while
1 | while(condition) { } |
while문안의 조건문이 true
이면, 계속 반복하다가 조건문이 false
이면 반복문이 종료된다.
1 | int i = 0; |
1 | 0 1 2 3 4 |
do-while
while문의 경우 블럭안의 내용이 실행되기 앞서 조건문을 먼저 실행한뒤에 조건이 true
이면 블럭안의 코드가 실행되는데 반해, do-while문은 일단 블럭안의 코드를 실행한뒤에 더 반복할지 조건문을 실행하는 반복문이다.
1 | int i = 0; |
주의해야할 점은 조건문을 마칠 때 ;
를 꼭 작성해야 한다!
출처 : w3schools - Java While Loop
조건문과 반복문에서 쓰이는 키워드
조건문과 반복문에서 자주 쓰이는 키워들이다.
break;
switch는 조건에 따라 분기를 원할 경우, 각 case가 끝날때마다 break
을 찍어줘야한다. 그렇지않으면 그 다음 case가 실행된다.
1 | int num=1; |
1 | 입력받은 숫자는 0입니다. |
첫번째 case에서 break
되지 않고, 다음 case까지 실행되었기 때문이다. if문은 {}
가 완벽하게 다른 조건과 독립되는것에 비해 switch가 갖는 특징이기도 하다.
continue;
반복하지 않고 바로 건너띄울때(skip) 사용하는 키워드이다.
1 | for(int i=0; i<10; i++){ |
0부터 10까지 iterator를 돌리면서 iterator를 출력하는 반복문인데, 짝수(i%2==0
)는 continue
되도록 하였다.
1 | 1 3 5 7 9 |
Live-Study 참석율 대시보드 생성하기
Live-Study 대시보드는 Github에 소스코드와 문서를 정리하여 올려두었다.