말그대로 주어진 조건에 따라 문장을 선택할 수 있도록 프로그래밍하는 것이다. 예를 들어 '만약 나이가 8살 이상이면 학교에 다닌다.'라는 문장에서 '나이'가 조건이 된다.
조건문이나 반복문을 사용할 때 조건에서 수행할 문장을 {중괄호}로 묶어 나타낸다. 이것을 블록이라한다.
블록체인?
▷lf문
조건문의 가장 단순한 형태가 if문이다. 우리말로 해석하자면 '만약~'이라는 뜻인데 if문의 형태를 간단하게 표현하자면 아래와 같다.
if(조건식) {
수행문;
}
위에 예제를 적용해보면
int age = 10;
if (age>=8) {
System.out.println("학교에 다닙니다.");
이런 식으로 쓸 수 있다.
▷if-else문
조건식을 만족하는 경우와 만족하지 않는 경우를 모두 나타낼 경우
if-else문을 사용한다. 해석하자면 '만약~이라면, 그렇지 않다면'으로로
해석할 수 있다. 조건식이 참일 경우 if문을 거짓일 경우 else문 블록
안에 있는 문장을 수행한다.
따라서 else문에는 조건식을 사용하지 않는다.
if-else문을 간단하게 표현해 보자면 다음과 같다.
변수선언
if(조건식) {
수행문1;
}
else{
수행문2;
}
if-else문으로 나이에 따라 문장을 출력하는 프로그램을 만들어보자
int age=8;
if(age >= 8) {
System.out.println("학교에 다닙니다.");
}
else {
System.out.println("학교에 다니지 않습니다.");
}
▷if-else if-else문
하나의 상황에서 조건이 여러개인 경우 사용한다. 간단한 문법을
살펴보자면 다음과 같다.
if(조건식1) {
수행문1; //조건식1이 참일 경우 수행
}
else if(조건식2) {
수행문2; //조건식2가 참일 경우 수행
}
else if(조건식3) {
수행문3; //조건식3이 참일 경우 수행
}
else {
수행문4; //위 조건이 모두 해당하지 않을 경우 수행
}
수행문5; //위에 식이 다 끝난 후 수행
▷switch-case문
주로 조건이 하나의 변수 값이나 상수값으로 구분되는 경우 사용한다.
조건이 복잡할 경우 (예를 들어 10 <age <20)는 switch-case문이
적합하지 않다.
하나의 값으로 조건을 비교할 수 있을 때 (예를 들어 학점 A,B,C)
사용하기 좋다.
문법을 살펴보면 다음과 같다.
변수선언
switch(조건) {
case 값1 : 수행문1 ;
break;
case 값2 : 수행문2 ;
break;
case 값3 : 수행문3 ;
break;
default : 수행문4
}
출력
위에서 break;는 switch-case문이 수행을 하다가아닐 경우 빠져나갈 수 있게 만든다. 그리고 default문은 생략할 수 있다.
▷while문
while문은 조건식이 참인 동안 수행문을 반복해 수행합니다. 문법을 살펴보면 다음과 같다.
while(조건식){
수행문1;
...
}
수행문2;
...
//조건식이 참인 동안 반복 수행
//수행문이 하나일 경우 {중괄호}사용하지 않을 수 있음.
그렇다면 while문을 사용하여 1부터10까지의 숫자를 더해보자
int num =1;
int sum = 0;while(num <= 10) { //num의 값이 10보다 작거나 같은 동안
sum+=num; //합계를 뜻하는 sum에 num을 더하고
num++; //num에 1씩 더해 나감
}
System.out.println("1부터 10까지의 합은" + "입니다.");
}
▷do-while문
while문은 조건을 먼저 검사하기 때문에 조건식이 맞지 않으면 반복 수행이 한번도 실행되지 않는다. 하지만 do-while문은 {중괄호}안에 문장을 무조건 한번 수행 후 조건식을 검사한다. 즉 조건이 만족하는지 여부를 마지막에 검사하는 것이다. 그래서 블록 안에 문장을 한번 이상 수행해야 할 때 do-while문을 사용한다. 구조는 다음과 같다.
do{
수행문1;
...
}while(조건식);
수행문2;
...
do-while문을 사용하여 1부터10까지의 숫자를 더해보자
int num =1;
int sum = 0;do{
sum+= num;
num++
} while(num<=10);
System.out.println("1부터 10까지의 합은" + "입니다.");
}
▷for문
반복문 중 제일 많이 사용되는 반복문이다.다른 반복문 보다 구조가 더 복잡하다.
왜냐하면 반복문을 구현하는 데 필요한 여러 요소(변수의 초기화식, 조건식, 증감식)를 함께 작성하기 때문이다.
for문의 기본구조는 다음과 같다.
for(초기화식; 조건식; 증감식) {
수행문;
}
초기화식-for문이 시작할 때 딱 한 번만 수행하며 사용할 변수를 초기화한다.
조건식-언제까지 반복수행할 것인지 구현한다.
증감식-반복 횟수나 for문에서 사용하는 변수값을 1만큼 늘리거나 줄인다.
for문으로 1부터 5까지 출력하는 프로그램을 만들어보자
int num;
for(num = 1; num <=5; num++)
{
System.out.println(num);
}
for문에서 가장 자주 사용하는 변수 이름은 i이다. 횟수를 표현할 때 주로 사용된다.
,(콤마)를 사용해 구분하여 여러 문장을 사용할 수 있다.
for(i =1, sum =0; i <= 10; i++){
...
for문은 반복횟수를 간단한 구조로 쓸 수 있기 때문에 유용하다.
for문의 요소를 생략해 쓸 수 있는데 자세히 살펴보자
초기화식 생략- 이전에 이미 변수가 초기화되어 중복으로 초기화 할 필요가 없을 때 초기화 부분 생략가능
int i = 0;
for(: i<5; i++) { ...}
조건식 생략- 연산 결과값이 나왔을 때 for문의 수행을 멈추려면 조건식을 생략하고 for문 안에 if문을 사용하면 된다.
-1부터 시작해 수를 더해갈 때 더한 결과값이 200넘는지 검사할 때
fot(i = 0; ; i++) {
sum += i;
if(sum > 200) break;
}
증감식 생략- 증감식의 연산이 복잡하거나 다른 변수의 연산 결과 값에 좌우된다면 증감식을 생략하고 for문 안에 쓸 수 있다.
for(i =0; i<5; ) { //마지막 부분 증감식 생략
...
i = (++i) % 10;
}
모든요소 생략-무한히 반복하는 경우 사용한다.
▷중첩된 반복문
반복문 안에 또 다른 반복문을 중첩해 사용하는 경우가 종종 있다. 중첩된 반복문으로 구구단을 출력해 보자.
int dan;
int times;for(dan =2; dan <=9; dan++) {
for(times = 1; times <=9; times++){
System.out.println(dan + "X" + times + "=" + dan*times);
}
System.out.println( ); //한 줄 띄어서 출력
}
...
반복문을 중첩해 사용할 때 외부 for문이 어떤 순서로 실행되는지 잘 이해해야한다.
구구단의 앞 숫자는 2,3,4,...숫자로 비교적 간단하게 증가하지만 뒤에 붙는 식은 적어도 9개가 된다.(2x1...2x9)
즉 중첩 반복문을 쓸 때는 어떤 반복문을 먼저 수행해야 하는지 그리고 내부 반복문을 수행하기 전 초기화해야 할 값을 잘 초기화 했는지 살펴보아야 한다.