본문 바로가기
✏️Java 공부/Java의 정석

[Java 공부/ Java의 정석] Chapter 03. 연산자 & Chapter 04 : 조건문과 반복문

by 코코의 주인 2022. 1. 23.

연산자

연산자 파트는 어느 프로그래밍 언어를 봐도 비슷하기 때문에 특별하게 신경 쓸 부분이 없어서 간단하게 표로 정리만 하고 넘어가겠다.

종류 연산자 설명
산술 연산자 + - * / % << >> 사칙 연산(+,-,*,/)과 나머지 연산(%), 비트 연산(<<, >>)
비교 연산자 > < >= <= == != 크고 작음과 같고 다름을 비교
논리 연산자 && || ! & | ^ ~ AND와 OR로 조건을 연결
대입 연산자 = 우변의 값을 좌변에 저장
기타 (type) ?: instanceof 형변환 연산자, 삼항 연산자, instanceof 연산자

 

instanceof 연산자가 좀 생소한 부분인데 나중에 객체지향에 대해 공부하면 알 수 있는 내용이라 굳이 지금 안 쓸 거다.


조건문

자바의 조건문으로는 if문과 switch문이 있다.

if - else  문

if(조건식1) {
	조건식이 true일 때 수행될 문장
    }
else if(조건식2) {
	조건식이 true일 때 수행될 문장
	}
else {
	위의 어느 조건식도 만족하지 않을 때 수행될 문장
}

if문의 형식은 C++과 다르지 않아서 사용에 유의할 점은 없는 거 같다.


Switch 문

if문보다 처리시간이 짧은 것이 장점이다.

if문은 처리해야 할 조건이 많아질수록 조건식도 많아져서 계산에 시간이 걸리지만, switch문의 경우 하나의 조건식으로 계산한 뒤 그 결과값에 따라 일치하는 case문으로 이동하기 때문에 수행시간에 장점이 있다.

하지만 복잡한 조건식을 처리하지 못 한다. 계산기 같은 거 만들 때 쓰면 편하다.

switch (조건식) {
	case 값1 :
    	조건식의 결과가 값1일 때 수행할 문장
    	break;
        
    case 값2 :
    	조건식의 결과가 값2일 때 수행할 문장
    	break;
        
    default :
    	조건식의 결과가 일치하는 case가 없을 때 수행할 문장
}

case문 옆에 ;(세미콜론)이 아니라 :(콜론)을 적어줘야 한다. 1학년 때 이거 때문에 오류 한 번 났어서 항상 유의하고 있다.

그리고 break문 항상 써줘야 한다. 이건 요즘도 생각 없이 코드 짜다보면 까먹는다...


반복문

 자바의 반복문에는 for문 while문 do-while문이 있다.

for문

for(초기화 ; 조건식 ; 증감식) {
	조건식이 참일 때 수행할 문장
}

문법이 C++ 이상 다를게 없다. for문은 파이썬을 제외하고는 다 비슷한 거 같다.

while문

while(조건식) {
	조건식이 참일 때 수행할 문장
}

나는 while문을 무한반복이 필요할 때 while(1) 이렇게 쓸 때를 제외하고는 거의 쓰지 않는 거 같다.

근데 같은 조건으로 수행시간은 for문보다 while문이 더 빠르다고 시스템 프로그래밍 수업에서 배웠다.

그래도 손이 안 간다.

 do-while문

do {
	수행할 문장
} while(조건식);

do-while 문을 처음 배울 때 교수님이 웬만하면 쓰지 말라고 하셨던 게 기억난다.

그래서 나도 진짜 가끔 알고리즘 문제 풀 때나 가끔 쓰지 써본 적이 없다.


 break문

반복문을 수행하다가 break문을 만나면 자신이 포함된 가장 가까운 반복문을 벗어난다.

무한루프 반복문을 사용할 때 반드시 포함해야 하는 문장이다.

int score = 80;
int i = 0;
while(true) { //무한 반복
	if(score > 90) {  //만약 score이 80 이상이면
    	break;	//조건문 탈출
    }
    ++i;
    score += i;  //score = score + i
}
System.out.println("i = " + i);	//i = 5
Sysetm.out.println("score = " + score);  //score = 95

break문을 쓸 수 있는 간단한 예시다.

i score
i = 0 score = 80 (초기 상태)
i = 1 score = 81
i = 2 score = 83
i = 3 score = 86
i = 4 score = 90
i = 5 score = 95 (탈출)

i가 증가함에 따라 score도 함께 증가하다 score > 90 이라는 조건을 만족하게 되면 반복문을 탈출한다. 

continue문

반복문 안에서 continue문을 만나면 반복문의 끝으로 이동한다.

반복문 중에 특정 조건을 만족하는 경우를 제외하고자 할 때 쓰인다.

for(int i = 1; i < 10; i++) { //i가 (1~9)까지 반복
	if( i % 2 != 0) {  //만약 i가 2로 나누어 떨어지자 않으면. 즉, 홀수이면
    	continue;    //반복문의 끝으로 이동
    }
    	System.out.println(i + "-> 짝수");
        
}  // <-continue 문이 돌이오는 곳

/*
출력
2-> 짝수
4-> 짝수
6-> 짝수
8-> 짝수
*/

굳이 짝수를 이렇게 구하진 않겠지만?? 

만약 continue문을 써서 구한다면 저렇게 된다.


이름 붙은 반복문

Loop1 : for(int i = 2; i <= 9; i++) {	//2~9단까지 구구단 출력
            for (int j = 1; j <= 9; j++) {
                if (i % 2 == 0) {	//짝수 단은 제외하고 출력
                    break;
                }
                if (j == 7) {	// j가 7이면
                    break Loop1;	//구구단 종료
                }
                System.out.println(i + " * " + j + " = " + i * j);
            }  
            //<- break문이 탈출하는 곳
        }  
        // <- break Loop1이 탈출하는 곳
        
/*
출력
3 * 1 = 3
3 * 2 = 6
3 * 3 = 9
3 * 4 = 12
3 * 5 = 15
3 * 6 = 18
*/

자바에서는 반복문에 이름을 붙일 수 있다.

C++은 다중 반복문 빠져나가려면 반복문 개수 만큼 break문을 써줘야 했기 때문에, 이런 기능이 있으면 다중 반복문 사용 시 편할 거 같다.


총평

반복문과 조건문의 문법은 C++과 다르지 않아서 어렵지 않았다.

이름 붙은 반복문이 굉장히 인상깊다. 요긴하게 써먹을 수 있을 거 같다.

댓글