본문 바로가기

개인적으로 공부한 것을 정리해 놓은 블로그입니다 틀린 것이 있으면 댓글 부탁 드립니다!


JAVA

JAVA 스터디 4- 제어문,반복문

반응형

목표

자바가 제공하는 제어문을 학습하세요.

학습할 것 (필수)

선택문
반복문

1.선택문

 

  자바 프로그램이 원하는 결과를 얻기 위해서는 프로그램의 순차적인 흐름을 제어해야하는 경우가 발생한다 .

이때 사용하는 명령문을 제어문이라고 하며 , 이러한 제어문에는 조건문 ,반복문 등이 있다. 

 제어문에 속하는 명령문들은 중괄호 ({})로 둘러싸여 있으며 ,이러한 중괄호 영역을 블록(block)이라 한다.

 

if 문 

if 문은 조건식의 결과가 true이면 주어진 명령문을 실행하고 , false면 아무것도 실행하지 않는다 .

 

문법 

if(조건식) {

   조건식의 결과가 참일 때 실행하고자 하는 명령문 ; 

}

 

위의 코드에서 블록에 속한 명령문은 ({})중괄호를 기준으로 오른쪽으로 들여쓰기가 되어 있는 것을 볼 수 있다 .이처럼 들여쓰기를 통해 코드의 가독성을 높이는 것을 인덴트(indent)라고하며 ,  될 수 있으면 모든 코드를 인덴트하는 것이 좋다 .

 

*if 문에서 실행될 명령문이 한 줄 뿐이라면 중괄호를 생략할 수 있다 .
ex)  if(true) system.out.println("참입니다.")   

 

if / else 문

 

if문과 함께 사용하는 else 문은 if 문과는 반대로 주어진 조건식의 결과가 false면 주어진 명령문을 실행한다 .  

 

문법

boolean a = ture ;

 

if(a){

  system.out.println("참입니다.")   

}else{

  system.out.println("거짓입니다..")   

}

 

위의  코드를 보면 boolean a =true 고  프로그램이 실행 되었을때 if문에서 a 는 true로 대입되기 때문에 if문안에 명령인 "참입니다가"출력된다 . 만약 a 가 false라면  if문을 지나 else 문으로 들어가 "거짓입니다"가 출력된다.

 

*if/else 문에서도 실행될 명령문이 한 줄뿐이라면 중괄호({})를 생략할 수 있다 . 
ex) if(false) system.out.println("참입니다.")   
     else system.out.println("참입니다.")   

 앞의 연산자 에서도 말했듯이 

 

if else 문은 3항 연산자로도 표현이 가능하다

ex) 조건식 ? 반환값1:반환값2    a==true ? 10 : 20 ;

if / else if/ else 문

if/else if/ else 문은  if/else 문이 연달아 나온 것이다 . 여러개의 조건식을 명시할수 있으므로 중첩된 if 문을 좀더 간결하게 표현할 수 있다 .

 

문법

int i = 10;

if(i>20){

    system.out.println("i는 20보다 크다.")   

}else if(i < 20){

    system.out.println("i는 20보다 작다.")   

}else{

    system.out.println("i는 20이다 .")   

}   

 

위의 출력값은 "i는 20보다 작다."이다 .  첫번째  if문은 false가 나오고 두번째 else if문은 true가 나옴으로 else if문의 a명령어가 실행되고  조건문이 끝난다 . 만약  i가 20이라면 else문의 명령어가 실행되고 "i는 20이다 ."가 출력된다 .

else if()는 여러개를 넣어 조건을 나눠줄 수 있다 . 

 

switch문

조건문의 대표적인 문법은 if문이다. 사용빈도는 적지만 조건이 많다면 switch 문이 로직을 보다 명료하게 보여줄 수 있다.

public class JavaTestClass {

    public static void main(String[] args) {
        switch (4){
            case 1:
                System.out.println("one");
                break;
            case 2:
                System.out.println("two");
                break;
            case 3:
                System.out.println("three");
                break;
            default:
                System.out.println("맞는 케이스 없음");
        }
    }
}

위 코드는 스위치 문의 간단한 예이다.

switch(인자)의 인자로 값이  들어가고(보통 위처럼 값을 지정하기보단 변수를 통해 값을 전달한다) .

case 를 하나씩 읽는다 case 는  case + 변수값으로 이뤄져 있고  

switch의 인자에 알맞는 case가 실행된다 .

위의 경우 인자는 4이며 인자에 해당하는 케이스가 존재하지 않는다.  이럴 경우에는 default문이 실행 된다.

만약 인자가 1이라면 "one" 2라면 "two" 3이라면 "three"가 실행될 것이다. 

 

 

1.반복문

반복적인 작업을 위해 사용된다. loop 또는 iteration 이라고 하며 while, do/while ,for, 확장 for 문이 있다.

하나씩 살펴보자

while

while 문은 특정 조건을 만족할 때까지 계속해서 주어진 명령문을 반복 실행한다.

 

public class JavaTestClass {

    public static void main(String[] args) {
        while (true){
            System.out.println("무한으로 실행");
        }
    }
}

위의 코드는 while의 기본 문법이다 while의 인자로는 true 혹은 false가 들어갈 수 있으며 false가 되기 전 혹은 break를 만나기 전까지 계속 반복실행 한다. 위에선 false가 될 수가없기 때문에 실행할 경우 "무한으로 실행"이라는 문자열을 무한으로 출력할것이다. (컴퓨터 다운되니 실행 x) 따라서 while 문을 작성할 때는 조건식의 결과가 어느 순간 거짓을 갖도록 조건식의 결과를 변경하는 명령문을 반드시 포함시켜아한다. 혹은 break를 걸어 줘야한다.

 if문과 같이 while 문의 명령문이 한 줄 이라면 중괄호{}를 생략할 수 있다. 

 

do/while 문

while 문은 루프에 진입하기전에 조건식을 검사한다. 하지만 do/while 문은 조건식 결과와는 상관없이 무조건 한 번 루프를   실행한 후에 조건식을 검사한다. 코드를 살펴보자

public class JavaTestClass {

    public static void main(String[] args) {
        int i = 1, j = 1;

        while (i < 1) {
            System.out.println(i);
            i++;
        }
        System.out.println(i);

        do {
            System.out.println(j);
            j++;
        } while (j < 1);
        System.out.println(j);
    }
}

while과 do/while을 비교하는 코드이다  어떤 출력 값이 나올까

출력값은

1

1

2

 

 whlie에서는 조건식이 먼저 검사된다.  i는 1이고  조건식에 부합하지 않음으로  while 블럭은 실행 되지 않는다. 

i++도 실행되지 않기 때문에 i는 그대로 1이므로 출력값은 1이다. 

do/while은 일단 do 블럭안에 코드가 실행되므로 1이 출력되고 j++도 실행되어 j = 2가  된다. 

그다음 while의 조건식이 검사된다 j는 2가 되있으므로 조건식은 false가 되고 loop가 끝난다.

마지막 출력값은 2가된다 . 

 

for문

for문은 초기식 조건식 증감식을 다 따로 적어줘야하는 while문과 달리 자체적으로 초기식 조건식 ,증감식을 모두 포함하고 있다 . whlie문 보다는 더 간결하게 반복문을 표현할 수 있다.

 

public class JavaTestClass {

    public static void main(String[] args) {
        for (int i=0; i<5; i++){
            System.out.println(i);
        }
    }
}

for문의 기본적인 문법이다 for(초기값,조건식,증감식){명령어} 형태이며 

출력값은

0

1

2

3

4

필요할 경우 초기값,조건식,증감식 모두 생략이 가능하다. 또 for문도 while과 마찬가지고 명령문이 한줄이면 중괄호 {}가 생략 가능하다.

 for문에서 생성된 초기값 변수는 for문이 종료되면 소멸한다.

 

Enhanced for 문(확장 for문)

JDK 1.5부터 추가된 for 문이다 배열 혹은 컬렉션의 모든 요소를 참조하기 위한 반복문이다 .

 

public class JavaTestClass {

    public static void main(String[] args) {
        int [] a = {10,20,30,40};
        
        for (int i : a) {
            System.out.println(i);
        }
        
        List<String> b = new ArrayList<>();
        b.add("안녕");
        b.add("하세요");

        for (String s : b) {
            System.out.println(s);
        }
    }
}

위 코드를 보면 int 배열 a 와 List<String> b가 있다. a의 확장 for문을 먼저 살펴보자 

for(int i : a)  확장 for문의 인자로는 (a를 하나씩 꺼내 담을 변수 : a )라고 이해하면 될 것 같다 .

a배열의 인자들을 하나씩 꺼나 int i에 넣고 명령문을 실행한다. 

 

출력값

10

20

30

40

 

List<Stirng> b 도 마찬가지이다 List의 인자를 하나씩 꺼내어서 String s 에 담은 후에 명령문을 실행 한다.

인자를 담을 변수는 List 혹은 배열의 타입과 같거나 그 값을 담을 수 있는 타입이어야 한다.

 

출력값

안녕

하세요

 

참조

www.tcpschool.com/java/java_array_application

반응형