제어문이란?(종류, 구성, 기능)
- 프로그램의 흐름을 바꾸는 역할을 하는 문장
- 종류
- 조건문, 반복문
- 구성
- 조건문
- 문장들을 포함하는 블럭{}
- 기능
- 조건식의 결과에 따라 수행하는 문장이 달라져 프로그램의 흐름을 제어
- 조건식의 경우의 수가 많을 때에는 switch문을 사용하지만, 제약이 많아 if문을 더 많이 사용한다
if문
- 구성
if(조건식){ //조건식이 참일 때 실행된 문장들 }
- 조건식과 괄호{}
- 조건식
- 비교연산자와 논리연산자로 구성
- 결과값은 반드시 boolean 타입이어야
- 블럭{}
- 여러 문장을 하나의 단위로 묶음
- {} 뒤에 ; 붙이지 않는다
- 하나의 문장만 넣으면 {} 생략가능하나, 실수 방지를 위해 되도록 생략하지 말자
- 기능
- 조건식이 참이면 괄호 안의 문장 수행
if-else문
- 구성
if(조건식){ //조건식의 결과가 참일 때 실행될 문장들 } else { //조건식의 결과가 거짓일 떄 실행될 문장들 }
- 기능
- 조건식의 결과에 따라 두 블럭 중 하나가 실행되고 전체 if문을 빠져나온다
if-else if문
- 구성
if(조건식){ //조건식의 결과가 참일 때 실행될 문장들 } else if(조건식2) { //조건식2의 결과가 참일 떄 실행될 문장들 } else if(조건식3){ //조건식3의 결과가 참일 떄 실행될 문장들 } else { //어느 조건식도 만족하지 않을 때 }
- 기능
- 첫번째 조건부터 '순서대로' 평가해서 결과가 참인 조건식을 만나면 해당 블럭만 실행한 후, 전체 if-else if문을 빠져나온다
- '순서대로' 평가하기 때문에 n번째 조건식은 그 전 n-1까지의 조건을 중복해서 확인할 필요가 없다. 이미 거짓임을 확인했기 떄문이다.
if(score >= 90){ System.out.println("A등급"); } else if(score >= 80){ // 80 <= score && score <= 90 과 동일 System.out.println("B등급"); } else if(score >= 70){ System.out.println("C등급"); }
중첩 if문
- if문 안에 if문을 포함시킬 수 있다
- 중첩의 횟수에는 거의 제한이 없다
- 정말 헷갈리기 떄문에 들여쓰기나 {}의 생략을 주의해야한다
switch문
- 사용하는 경우
- 처리할 경우의 수가 많은 경우에는 if문보다 switch문을 사용
- 그러나 switch문은 제약이 있다
- 평가 과정
- 조건식 계산
- 결과값에 해당하는 case문 찾기
- 해당 case문의 문장들을 수행
- break나 switch문의 끝을 만나면 swicth문 전체를 빠져나감
- default
- 조건식의 결과와 일치하는 case문이 없는 경우에는 default문으로 이동
- 위치는 상관없으나, 보통 마지막에 놓음
- 마지막에 놓으면 break문은 쓰지 않아도 됨
- break
- 기능
- 각 case문의 영역을 구분하는 역할
- 생략 시, break문을 만나거나 switch문의 끝을 만날 때 까지 모든 문장을 수행
- 기능
- 제약조건
- switch문의 조건식 결과는 정수 또는 문자열이어야
- switch문의 값은 정수, 상수, 문자열(JDK 1.7 이후) 만 가능, 중복 x
- 조건문으로 case의 수를 줄이는 것이 중요
- switch문의 중첩 가능
반복문(정의, 종류, 조건문, 특징)
- 정의
- 어떤 작업이 반복적으로 수행되도록 할 때 사용
- 종류
- for문, while문, do-while문
for문
- 특징
- 반복 횟수를 알고 있을 때 적합
- 구조
for(초기화식;조건식;증감식){ //조건식이 참일 때 수행될 문장들 }
- 초기화, 조건식, 증감식, {}
- 초기화
- 반복문에서 사용되는 변수를 선언
- 반복문의 제어에 사용되는 변수의 값은 문장 내에서 임의로 수정하지 않는 것이 좋다
- 둘 이상의 변수를 ','를 구분자로 사용가능
- 단 변수들의 타입은 같아야한다
- 하지만 변수의 갯수는 적을수록 좋다
- 조건식
- 조건식이 참인동안 반복을 계속
- 증감식
- 변수의 값을 증가 또는 감소
- 다양한 연산자들로 증감식 작성 가능
- 두 개 이상의 증감식을 ','를 구분자로 사용 가능
- 생략 가능하나 무한 반복문이 되겠지요
- 초기화
- 초기화, 조건식, 증감식, {}
- 수행순서
- 초기화식 -> (조건식 -> 블럭 -> 증감식)(반복)
- 중첩 for문은 별뽑기로 연습
- 향상된 for문
- 배열과 컬렉션에 저장된 요소에 접근할 떄만 사용
while문
- 구성
while(조건식){ //조건식의 결과가 true일 때 수행될 문장들 }
- 조건식과 블럭{}
- 기능
- 조건식이 참인 동안, 조건식이 거짓이 될 때까지 블럭내 문장 실행
- for문과 while문의 비교
- 서로 100% 호환 가능
- 초기화나 증감식이 필요하지 않은 경우 while문이 더 적합
- 조건식
- 생략 불가
- do-while문
- 구조
do { //조건식의 결과가 참일 때 수행될 문장들 } whild(조건식); //세미콜론 빼먹지 않기!!
- while문의 조건식과 {}의 위치를 바꿔놓은 것
- {}블럭을 먼저 수행하기 때문에 {}안의 코드의 최소한 한 번 수행을 보장
- 구조
while문
- break문
- 기능
- 자신이 포함된 가장 가까운 반복문을 벗어남
- 주로 if문과 함께 사용
- 기능
- continue문
- 기능
- 반복문 내에서만 사용
- 반복문의 끝으로 이동하여 다음 반복문으로 넘어간다
- 전체 반복 중 특정 조건을 만족하는 경우를 제외하는데 유용
- 기능
- 이름 붙은 반복문
Loop1: for(int i=0 ; i<=9 ; i++){ for(int j=2; j<=9; j++){ if(j==5) break Loop1; System.out.println(i + " * " + j + " = " + (i*j)); } System.out.pringln(); }
- 중첩 반복문 앞에 이름을 붙이고 break문과 continue문에 이름을 지정
- 기능
- 하나 이상의 반복문을 벗어나거나 반복을 건너 뛸 수 있다
- 남궁성의 자바의 정석 4장-조건문과 연산자