Search
Duplicate
😀

04. 제어문

태그
반복문
조건문
분기문

제어문(Control Flow Statement)

제어문이란, 프로그램 실행 흐름을 개발자가 원하는 방향으로 바꿀 수 있도록 해주는 것 일반적으로 조건식과 실행 구문인 중괄호(블록, { })으로 구성되어 있다.

제어문의 종류

1.
조건문(decision-making statements) : if문, switch문
2.
반복문(looping statements) : for문, while문
3.
분기문(branching statements) : break, continue, return

조건문

조건식의 결과에 따라 블록의 실행 여부가 결정 조건식에는 boolean 변수 혹은 true/false 값을 산출하는 연산식이 들어감

1. if문

if문의 조건식이 참일 경우 블록 내의 코드를 실행
if(조건식){ // 조건식이 참일 경우 실행 구문 }
Java
복사

2. if-else문

if문의 조건식이 참일 경우 if 블록 내의 코드를 실행
if문의 조건식이 거짓일 경우 else 블록 내의 코드를 실행
if(조건식) { // 조건식이 참일 경우 실행 구문 }else{ // 조건식이 거짓일 경우 실행 구문 }
Java
복사

3. if-else if-else문

조건문이 여러 개인 다중 if문
앞에서부터 조건을 체크하고, 조건을 만족하지 않는다면 다음 if(else if)문으로 넘어감
앞의 모든 조건식이 거짓인 경우 마지막 else 문을 수행
if(조건식 A) { // 조건식이 참일 경우 실행 구문 }else if (조건식 B){ // A 조건식이 거짓이고, B 조건식이 참일 경우 실행 구문 }else{ // A, B 조건식이 모두 거짓인 경우 실행 구문 }
Java
복사

4. 중첩 if문

if 문 블록 내에 또 다른 if문을 사용하는 것
if(조건식 A) { // 조건식 A가 참일 경우 실행 구문 if(조건식 B) { // 조건식 A와 B가 참일 경우 실행 구문 } }
Java
복사

반복문

어떤 작업이 반복적으로 수행되도록 할 때 사용되는 구문

반복문의 종류

1.
for 문 : 반복횟수를 알고 있는 경우에 사용
2.
for - each 문 : 컬렉션과 배열을 처리할 때 사용되는 for문
3.
while문 : 반복 횟수를 모르고, 조건식을 통해 반복하는 경우에 주로 사용
4.
do while문 : while문과 사용 시기가 비슷하나, 반복을 수행하기 전 반드시 실행되어야 할 구문이 있는 경우에 사용

1. for문

for(초기식; 조건식 ; 증감식) 의 형태로 사용한다.
조건식이 참일 경우 for문 내부를 실행한 후, 다시 돌아와서 증감식을 수행한다. 증감식을 수행한 이후 다시 조건식을 검사하고, 참일 경우 위의 과정을 반복하고, 거짓일 경우 for문을 종료한다.
// 1부터 10까지의 수를 출력 for(int i = 1; i <= 10; i++){ System.out.println(i + " "); }
Java
복사

2. for - each 문

for each는 J2SE 5.0 부터 추가되었다.
for each 문은 반복횟수를 명시적으로 주는 것이 불가능하고, 배열/Collections 의 항목 수만큼 실행을 반복하게 된다.
반복 변수를 선언하거나, 조건식, 증감식을 사용하지 않는다.
자료구조 사용에 대한 추상화를 제공한다.
배열의 값을 가져다가 사용할 수만 있고, 수정할 수는 없다. (조회의 목적)
루프를 돌릴 객체로는 루프를 돌릴수 있는 형태인 Array나 Collections가 가능하고 Iterable<E>를 상속받은 객체또한 가능하다.
for each 문의 사용과 값의 변화
크기가 2Person 타입 p 배열을 선언하고 2개의 Person 객체를 생성, 할당한다. p 배열에는 그림과 같이 2개의 객체를 가리키는 0x1000, 0x2000 레퍼런스가 할당되어있다. for each문을 통해 p 배열을 탐색하고, ps에 새로운 Person 객체를 생성하고 할당한다. 하지만 for each문의 ps는 실제 p 배열이 아닌 0x1000 이라는 레퍼런스와 같은 값을 지닌 별도의 참조변수이다. 따라서 new Person() 구문을 사용해서 대입하여도 원본 p 배열에는 변화가 없다. * 값의 수정이 불가능하다? (ps.age++ 부분) Reference type을 사용하는 경우 ps로 복사된 값은 단순 value가 아닌 원본 p배열의 Person 객체를 가리키는 레퍼런스와 동일하므로 실제 객체를 가르키게 된다. 따라서 ps.age++ 구문을 사용하면 for each를 사용하는 경우에도 data를 수정할 수 있다. 하지만 이것은 값이 아닌 레퍼런스를 따라가서 원본 객체를 수정하는 것이지 레퍼런스 자체를 수정하는 것은 아니다.
Java
복사

3. while문

루프상태 조건이 만족되는 동안 while문 내의 코드가 반복하여 실행된다.
반복 횟수가 고정되지 않은 경우 주로 사용된다.
입력 제어 루프라고도 부른다.
while(condition){ // condition이 참인 경우 수행되는 문장 }
Java
복사

4. do while문

기본적인 동작 원리는 while문과 동일하다.
하지만 do while문은 루프를 먼저 한 번 실행한 후에 조건식을 검사한다.
do{ // 기본적으로 최소 한번은 수행되는 문장 // 이후 condition이 참인 경우 수행되는 문장 }while(condition);
Java
복사

분기문

분기문이란, 프로그램 의 흐름을 순차적으로 수행하다가 다른 곳으로 조건에 의해, 또는 어떠한 이유에서 흐름을 이동시키는 구문

break

for문, while문, do~while문 등 반복 Loop나 switch~case문을 빠져 나오는 데 사용하는 구문
한번에 가장 가까운 하나의 Loop를 벗어날 때 사용된다.

continue

for문, while문, do~while문의 조건부로 제어를 옮기는 데 사용하는 구문
지정된 반복문의 다음번 루프의 내용을 실행하도록 시도하는 명령문
continue는 현재 진행 중인 루프를 중단하고 다음 루프로 건너뛰어 진행하도록 하는 구문

return

메소드를 종료하면서 메소드의 리턴 값을 보내고 싶을 때 사용
메소드 안에서 사용하는 분기문으로 현재 수행 중인 메소드를 종료시키고, 메소드를 호출한 수행문의 위치로 분기 이동
메소드의 리턴 값이 data 형인 메소드라면, 반드시 return 뒤에 data형 값을 적어야 함
리턴 값이 void인 메소드라면 return만 쓰면 됨

label

분기문에서 label을 활용하여 break와 continue의 흐름 제어를 기존의 가장 가까운 loop가 아닌, 원하는 label을 붙인 곳으로 변경할 수 있다.
원하는 반복문의 위치에 label : 반복문 의 형태로 선언을 한 후, break/continue 뒤에 제어를 이동할 label의 이름을 적어준다.
int count = 0; outer : for(int i = 0 ; i < 10 ; i++) { for(int j = 0; j < 10; j++) { System.out.print(count++ + " "); if(count == 11) break outer; } }
Java
복사