본문 바로가기
프로그래밍 언어/Java

[Java] 제어문 (if, swtich, for, while)

by 까망 하르방 2021. 3. 2.
반응형

제어문 (if, swtich, for, while)

 

Java에서 제어문 활용할 때는 boolean 처리됩니다.

따라서, C언어와 같이 『 』 과 『 1 』이 분기 조건이 될 수 없습니다.

 

if ~ else if ~ else』를 활용할 때는 

아래로 갈수록 조건 범위가 넓어지게 하는 것이 좋습니다.

즉, 조건이 상단에 위치할수록 찾고자 하는 범위를 제한합니다.

 

[윤년 여부 판별]

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        
        int year = Integer.parseInt(sc.nextLine());
        
        if(year % 400 == 0) {
            System.out.println(year + "년은 윤년입니다.");
        }else if(year % 100 == 0) {
            System.out.println(year + "년은 평년입니다.");
        }else if(year % 4 ==0) {
            System.out.println(year + "년은 윤년입니다.");
        }
    }
}

 

for 문 vs while 문

for문 : 주로 횟수가 지정된 경우에 사용

while 루프: 얼마나 반복하는지를 결정하지 못하는 경우에 주로 이용.

 

break : 루프를 벗어날 때 사용

                { } 개수와 관계없이 가장 가까운 루프에서 탈출

『continue: 해당 시점 아래의 코드를 수행하지 않고 루프 재순회,

 

ex) continue를 통한 간결한 코드

 

삼항 연산자

내부적으로는 if문으로 처리되기에 미세한 속도차이는 있지만

현대 컴파일러에서는 그 차이가 매우 미미.

result = Math.max(a, b);
result = a < b ? b : a;

 

switch문

public class Main {
    public static void main(String[] args) {
        
        int score = 80;
        switch(score/10){
            case 9 :
                System.out.println("A 등급");
                break;
            case 8 :
                System.out.println("B 등급");
                break;
            case 7 :
                System.out.println("C 등급");
                break;
            default :
                System.out.println("탈락");
        }
    }
}

경우에 따라서는 switch 문이 가독성이 좋은경우가 있습니다.

부등호 연산, 논리 연산, 산술연산마저도 사용 없기에 정확한 값의 제어가 힘듦

- 『break 문을 빼먹으면 다음 『case문까지 실행되는데, 

   컴파일 시점에서 검출되지 않기 때문에 의도하지 않은 결과가 나올 수 있습니다.

- 세미콜로 『 과 콜론 『 : 을 구분하기 힘들기도 합니다.

- switch문은 내부적으로 if~else if~else 문으로 변형되어 실행됩니다.

    따라서 가독성은 좋더라도 속도면에서는 if문이 더 좋습니다.

 

Java에서 반복문은 for문, while 문, do-while 문 세 가지라고 보면 됩니다.

public class Main {
    public static void main(String[] args) {
        
        int i = 1, j = 1;
        
        while( j-- <= 0 ) {
            i++;
        }
        
        System.out.println("i = " + i +" and j = " + j );        
    }
}

while문 조건에서 j=1인 상태에서 비교대상 처리 후, j--가 실행됩니다.

 

논리 연산자는 '제어문'에서 여러 개의 조건을 검사하기 위해서 많이 사용합니다.

A && B : A 조건도 '참'이고 B 조건도 '참'인 경우만 '참'으로 판단합니다.

                 그렇기에 A 참, 거짓과 관계없이 B 조건이 수행됩니다.

A || B』: A, B 조건 둘 중에서 하나라도 '참'이라면 '참으로 판단합니다.'

             그렇기에 A 참이면 B 조건은 수행하지 않습니다.

[참고 코드]

public class Main {
    public static void main(String[] args) {
        
        int x = 1;
        System.out.println("====start====");
        if( ++x > 1 ) {
            System.out.println("[1] x = " + x);
        }
        if((++x == 3) || (++x==4)) {
            System.out.println("[2] x = " + x);
        }
        
        if((++x==5) && (++x==6)) {
            System.out.println("[3] x = " + x);
        }
        
        System.out.println("최종 x의 값: " + x);
        System.out.println("====end====");
    }
}

 

[분석]

OR(||) 연산자는 좌항이 true이기 때문에 더 이상 조건확인할 필요가 없어진 것이고,

AND(&&) 연산자는 좌항이 false이기에 더 이상 조건확인할 필요가 없어진 것.

 

 

 

반응형

댓글