# JAVA] Ch 04. 조건문과 반복문

uuuu.jini·2022년 1월 25일
0

JAVA -자바의 정석

목록 보기
3/18
post-thumbnail

목차

  1. 조건문
  2. 반복문

깃허브 링크

코드의 실행흐름이 순차적으로 진행되지 않고 조건에 따라 문장을 건너 뛰고, 떄로는 같은 문장을 반복해서 수행해야 한다. 이처럼 흐름(flow)을 바꾸는 역할을 하는 문장들을 제어문이라고 한다. 조건문과 반복문이 있다. 조건문은 조건에따라 문장이 수행되도록 하고 반복문은 반복해서 수행한다.

1. 조건문 - if,switch

조건식과 문장을 포함하는 블럭{}으로 구성된다. 연산결과에 따라 실행문장이 달라져서 실행흐름을 바꿀수 있다. 주고 if문이 많이 사용되며 처리 경우가 많을 경우 switch문이 효율적이지만 제약이 많다.

1.1] if문

만일 조건식이 참이면 괄호안의 문장들을 수행하라라는 의미이다.

	if(조건식) {
    	//true인 경우 수행되는 문장 
    }

거짓일 경우 다음 문장으로 넘어간다.

조건식

일반적으로 비교연산자와 논리연산자로 구성된다. 비교시에 등가비교연산자 == 와 대입 연산자 =를 착각하면 안된다.

블럭 {}

괄호를 이용하여 여러문장을 하나의 단위로 묶은 것이다. '{'로 시작하여 '}'로 끝나며 '}'뒤에는 ;을 붙이지 않는다. 블럭 내의 문장들은 탭으로 들여쓰기를 해서 블럭안에 속한 문장이라는 알기 쉽게 해주는 것이 좋다. 블럭안에는 보통 여러문장을 넣지만 하나만 넣거나 아무런 문장을 넣지 않을 수 도 있다. 블럭안에 문장이 하나 뿐이라면 괄호를 생략하고 작성하기도 한다.

1.2] if-else 문

거짓일 때 else블럭의 문장을 수행한다.

	if (조건식) {
     //참 일때 수행
    }
    else {
    //거짓일때 수행 
    }

두개 다 수행되거나 모두 수행되지 않는 경우는 있을 수 없다.

1.3] if-else if문

처리해야 하는 경우의 수가 셋 이상인 경우에 사용한다.

	if (조건식1) {
    	//조건 1 이 참인 경우 수행
   }else if ( 조건식 2) {
   	//조건 2 참인 경우
   }else if ( 조건식 3) {
   	//조건 3 참인 경우
   }else{
   	//모두 거짓인 경우
   }

마지막 else블럭은 생략이 가능하며 해당 블럭이 없는 경우 모든 문장이 실행되지 않을 수 있다.

1.4] 중첩 if 문

if 문 내에 다른 if문을 포함시키는 것을 말한다. 중첩의 횟수에는 거의 제한이 없다. 안쪽 if문은 들여쓰기를 통해 구분될 수 있도록 작성해야 한다. 괄호가 생략되는 경우 else문 가까운 if 문에 속한 것으로 간주된다.

폰트 사이즈 단축키 Ctrl+Shift++/-

1.5 ] switch 문

단 하나의 조건식으로 많은 경우의 수를 처리할 수 있고, 표현도 간결하여 알아보기 쉽다. 처리할 경우의 수가 많은 경우 선택하는 것이 좋고 제약조건이 있다. 조건식을 계산하여 일치하는 case문을 실행하고 break문 이나 switch 문의 끝을 만나면 전체를 빠져나간다.

	switch ( 조건식 ) {
  		case1: 
        	// 값1인 경우 실행
            break;
        case2 : 
        	//값2인경우 실행
        	break;
        case3: 
        	// 깂3인 경우 실행
            break;
		default:
        	// 조건식이 결과 일치하는 case문 이 없는 경우 실행
            break;
    }

보통 default는 문은 마지막에 위치하므로 break를 붙이지 않아도 된다. break가 각 구간에 없는 경우 아래의 모든 문자을 실행하게 된다.

제약 조건

  • 조건식의 결과는 반드시 정수 또는 문자열이어야 한다.
  • case문의 값은 정수 상수만 가능하며, 중복되지 않아야 한다.

2. 반복문 - for,while, do - while 문

반복문은 주어진 조건을 만족하는 동안 주어진 문장들을 반복적으로 수행한다. for 과 while을 서로 변환이 가능하고 for문은 주로 반복횟수를 알고 있는 경우 사용한다.

2.1] for 문

	for ( 초기화; 조건식 ; 증감식 ) {
    	//조건이 참인경우 반복할 문장 
    }

초기화 -> 조건식 -> 수행문 -> 증감식 의 순으로 반복하며 조건이 거짓일 될 경우 for문을 빠져나오게 된다.

  • 초기화 : 변수를 초기화 하는 부분이며 처음에 한번만 수행된다. 보통 변수하나로 for문을 제어하지만 둘 이상이 필요한 경우 콤마를 구분자로 변수를 초기화 하면 된다. ( 두변수의 타입이 같아야 한다. )
	for ( int i=1,j=0;i<=10;i++){ ... } 
  • 조건식 : 조건이 참이면 반복을 계속하고 거짓이면 반복을 중단하고 for문을 벗어난다. 잘못 작성시 블럭 문장이 한번도 수행되지 않거나 무한반복에 빠지기 쉽다.
  • 증감식 : 제어하는 변수의 값을 증가 또는 감소시키는 것이다. ++,--,+=,*=등을 사용한다. ,쉼표를 이용하여 두 문장 이상을 하나로 연결해서 쓸 수 있다.

위의 세가지 요소는 필요하지 않으면 생략할 수 있으며 세가지 모두 생략할 경우 무한 반복문 이 된다.
for 문에서 사용되는 변수가 적은 것이 더 효율적이고 간단하므로 변수들의 관계를 잘 파악하여 불필요한 변수의 사용을 줄이는 것이 좋다.

중첩 for문

for 문 안에 또다른 for문을 표함시키는 것이 가능하다. 바깥쪽 for 문이 한번 반복될때 마다 안쪽 for문의 모든 반복이 끝나고서야 바깥쪽 for문의 다음 반복으로 넘어간다.

향상된 for문

배열과 컬렉션에 저장된 요소에 접근할 때 기존보다 편리한 방법으로 처리할 수 잇도록 for문의 새로운 문법이다. 타입 변수명은 해당 배열 또는 컬렉션의 요소의 타입이어야 한다.

	for ( 타입 변수명 : 배열 또는 컬렉션 ) {
    // 반복 문장
    }

배열 또는 컬렉션에 저장된 값이 매 바복마다 하나씩 순서대로 읽혀서 변수에 저장된다. 해당 괄호 안에서는 이 변수를 사용해서 코드를 작성한다.

	for( int temp : arr ) {
		System.out.println(tmp);
	}

이 문법은 배열이나 컬렉션에 저장된 요소들을 읽어오는 용도로만 사용할 수 있다는 제약이 있다.

2.2] While 문

	while ( 조건식) {
		//반복 문장 
	}

조건식이 참인 경우에 블럭안의 문장을 반복한다. 조건이 거짓일 경우 해당 반복문을 벗어난다. for문과 while문은 항상 변환이 가능하다. 초기화나 증감식이 필요하지 않은 경우라면 while문이 더 적합하다.

while문의 조건식은 생략불가

항상 조건이 참이 되게 하려면 조건식에 true 를 넣으면 된다. 무한반복이 수행된다.

2.3] do-while 문

while문의 변형으로 기본적인 구조는 while문 과 같으나 조건식과 블럭의 순서를 바꿔서 무조건 최소한 한번을 수행하는 것을 보장한다.

	do{
    	//반복 문장
	}while( 조건식 ) ;

2.4] break 문

break문은 자신이 포함된 가장 가까운 반복문을 빠져나간다. break문을 만날 경우 아래의 문장을 모두 수행하지 않고 해당 반복문을 빠져 나간다. 무한 반복문에는 조건문과 break문을 함께 사용하여 프로글매이 종료되지 않는 것을 막아야 한다.

2.5] continue 문

반복문 내에서만 사용될수 있으며, continue문을 만나면 반복문의 끝으로 이동하여 다음 반복으로 이동한다. 즉, 다음 밑의 문장을 수행하지 않고 다음 반복으로 넘어간다. 특정 조건을 만족하는 경우를 제외하고자 할때 유용하게 사용된다.

2.6] 이름 붙은 반복문

여러개의 반복문이 중첩된 경우에는 break문으로 중첩 반복문을 오나저닣 벗어날 수 없다. 이때는 중첩 반복문 앞에 이름을 붙이고 break와 continue문에 이름을 지정해 줌으로 써 하나 이상의 반복문을 벗어나거나 반복을 건너뛸수 있다.

	Loop1 : for(int i=2;i<=9;i++){
    .......
    	break Loop1;
    }
profile
멋쟁이 토마토

0개의 댓글