본문 바로가기

Backend/Study Halle - Java

온라인 자바 스터디 4주차 - 제어문

제어문(Control Flow Statement)

자바 프로그램이 원하는 결과를 얻기 위해서는 프로그램의 순차적인 흐름을 개발자가 원하는 방향으로 제어해야만 할 경우가 생기는데 이때 사용하는 명령문을 제어문이라고 한다. 제어문에는 조건문, 반복문 등이 있으며, 이러한 제어문에 속하는 명령문들은 중괄호({})로 둘러싸여 있으며, 이런 중괄호 영역을 블록(block)이라고 한다. 

 

 

조건문

 

조건 만족여부에 따른 블록실행.

조건식에는 boolean 변수 또는 true/false 값을 산출하는 연산식을 사용해야 한다. 

  • if문: if (조건식) {조건식의 결과가 참일 때 실행하고자 하는 명령문;}
          1) 조건식의 결과가 참이면 주어진 명령문 실행, 거짓이면 실행하지 않는다.
          2) 실행될 명령문이 한 줄 뿐이라면 중괄호를 생략할 수 있다.
  • if/else 문: if(조건식) {조건식의 결과가 참일 때 실행하고자 하는 명령문;}
                 else{조건식의 결과가 거짓일 때 실행하고자 하는 명령문;}
                 1) 실행될 명령문이 한 줄 뿐이라면 중괄호를 생략할 수 있다.
  • if/else if/else 문: if(조건식1){조건식1의 결과가 참일 때 실행하고자 하는 명령문;}
                          else if(조건식2){조건식 2의 결과가 참일 때 실행하고자 하는 명령문;}
                          else{조건식1,2의 결과가 모두 거짓일 때 실행하고자 하는 명령문;}
                          1)if, else 문은 단 한번만 사용할 수 있지만 else if 문은 여러 번 사용할 수 있다.
                          2)실행될 명령문이 한 줄 뿐이라면 중괄호를 생략할 수 있다.                
//정수를 입력받고 양수, 0, 음수 인지 알아내기

Scanner sc = new Scanner(System.in);
System.out.println("정수를 입력하세요");
int a = sc.nextInt();

//if 
if ( a > 0 ) {
	System.out.println("양수");
}
if ( a < 0 ) {
	System.out.println("음수");
}
if ( a == 0 ) {
	System.out.println("0");
}

// if/else
if(a==0){
	System.out.println("0");		
}else{
	if(a>0) {
		System.out.println("정수");
	}else {
		System.out.println("음수");
	}
}

// if/else if/else
if ( a > 0 ) {
	System.out.println("양수");
}else if ( a < 0 ) {
	System.out.println("음수");
}else ( a == 0 ) {
	System.out.println("0");
}

sc.close();

 

선택문

주어진 조건 값의 결과에 따라 프로그램이 다른 명령을 수행하도록 하는 조건문, 변수에 일치하는 경우의 값에 따라 해당 case 블록을 실행한다. if/else보다 가독성이 좋고, 컴파일러가 최적화를 쉽게 할 수 있어 속도도 빠른편이다. 하지만 표현식의 결과는 정수, 문자, 문자열만 가능하다. (실수는 불가능하다.)

 

switch (조건값) {

case 값1:
    조건 값이 값1과 일치할 때 실행하고자 하는 명령문;

    break;

case 값2:

    조건 값이 값1과 일치할 때 실행하고자 하는 명령문;

    break;

...

default:

    조건 값이 어떠한 case 값과도 일치하지 않을 때 실행하고자 하는 명령문;

    break;

}

 

Switch (조건문)

  • case >= 정수 : 불가능 (크기비교 불가능)
  • case 정수 : 가능
  • case 실수 : 불가능
  • case 'char' : 가능
  • case "문자열" : 가능
// 주민등록번호에서 성별을 의미하는 숫자를 입력 받아서
// "남", "여" 구분해서 출력하기
		
Scanner sc = new Scanner(System.in);
System.out.println("주민등록 번호 뒷자리 첫숫자를 입력하세요");
int a = sc.nextInt();
		
switch (a) {
case 1:  // a가 1이면 여기서부터 break (종료를 의미) 전까지 모두 실행하라.
case 3:
	System.out.println("남");
	break;
case 2:
case 4:
    System.out.println("여");
	break;
default:  // if 문의 else 개념
	System.out.println("잘못된 입력입니다");
}
		
		
// 나이를 입력 받아서 "성인", "미성년자" 구분하여 출력하기
System.out.println("나이를 입력하세요");
int age = sc.nextInt();
		
switch(age / 10) {
case 0:
case 1:
	System.out.println("미성년자");
	break;
default:
	System.out.println("성인");
}
		
		
sc.close();

 

반복문

자바 프로그램 내에서 특정 실행문을 여러번 반복 실행 할 수 있도록 제어하는 명령문이다. 

  • while 문 : while(조건식) {조건식의 결과가 참인동안 반복적으로 실행하고자 하는 명령문;}
                   1) 루프에 진입하기 전, 먼저 조건식부터 검사
                   2) 특정조건을 만적할 때까지 계속해서 주어진 명령문을 반복 실행
                   3) while문 조건식의 결과가 영원히 거짓이 되지않는다면 무한루프에 빠진다. 조건식을 짤 때 결과변경 반드시 고려!
  • do / while 문 : do{조건식의 결과가 참인 동안 반복적으로 실행하고자 하는 명령문;}
                           while(조건식);
                          1) 조건식의 결과와 상관없이 무조건 한 번은 루프를 실행
                          2) 루프 실행한 후 조건식 검사 진행
  • for 문 : for(초기식; 조건식; 증감식){조건식의 결과가 참인 동안 반복적으로 실행하고자 하는 명령문;}
               1) 자체적으로 초기식, 조건식, 증감식을 모두 포함하고 있는 반복문
               2) for문 안에서만 사용하는 변수를 초기식에서 직접 선언 가능, 해당 변수는 for문이 종료되면 소멸
               3) 실행될 명령문이 한 줄 뿐이라면 중괄호 생략 가능
               4) 초기식, 조건식, 증감식은 각각 생략 가능
  • 향상 for문 : for(타입 변수이름 : 배열이나 컬렉션이름) {배열의 길이만큼 반복적으로 실행하고자 하는 명령문;}
                      1) JDK 1.5부터 추가된 반복문, 배열과 컬렉션 프레임워크에서 유용하게 사용
                      2) 루프마다 각 요소는 명시한 변수의 이름으로 저장되며, 명령문에서 이 변수를 사용하여 각 요소 참조 가능
                      3) 요소를 참조할 때만 사용할 수 있으며, 요소의 값을 변경해도 원본 배열에는 영향을 미치지 않음  
// 1~5까지 출력하기

int a = 1;

//while
while (a <= 5) { 
	System.out.println(a); // 출력
	a++; // 증가 (+1)
}

//do while
do {
	System.out.println(a);
	a++;
} while(a<=5);

//for
for(a=1; a<=5; a++) { //바깥에서 1을 주입했더라도 초기식에서 다시 값을 줘야한다. a; 불가능
	System.out.println(a);
}

//Enhanced for
int [] arr = {1,2,3,4,5};
for(int a : arr) {
	System.out.println(a);
}

 

 

 

 

 

 

 

 


참고

www.tcpschool.com/java/java_control_condition

hoonmaro.tistory.com/17