Java - 제어문

이호인·2022년 8월 1일
0

자바 기초

목록 보기
3/4

📌 제어문

  • 프로그램의 흐름을 바꾸는 역할을 하는 문장

대표적으로 조건문과 반복문이 있다.

📌 조건문

  • 주어진 조건식의 결과에 따라 별도의 명령을 수행하도록 제어하는 명령문

1. if문

  • 조건식의 결과가 true이면 주어진 명령문을 실행, false라면 아무것도 실행하지 않는다.
if(조건식) {
	// 조건식의 결과가 참일 때 실행하고자 하는 명령문;
}
  • 보통 블록에 속한 명령문은 오른쪽으로 들여쓰기한다.
  • 이를 통해 코드의 가독성을 높이는 것을 인덴트(indent)라고 한다.
int man = 25;

if(man > 19) {
	System.out.println("man은 성인입니다.");
}

// if문에서 실행될 명령문이 한 줄이라면 중괄호를 생략 가능
if(man <= 19) System.out.println("man은 성인이 아닙니다."); 

2. if/else문

  • 조건식의 결과가 false 일 때 else에 주어진 명령문을 수행
if(조건식) {
	// 조건식의 결과가 참일 때 실행하고자 하는 명령문;
} else {
	// 조건식의 결과가 거짓일 때 실행하고자 하는 명령문;
}
int man = 25;

if(man > 19) {
	System.out.println("man은 성인입니다.");
} else {
	System.out.println("man은 성인이 아닙니다.");
}

3. if/else if/else문

  • 처리해야 할 경우가 셋 이상인 경우 사용한다.
  • else if는 개수 상관없이 생성 가능하다.
if (조건식1) {
    // 조건식1의 결과가 참일 때 실행하고자 하는 명령문;
} else if (조건식2) {
    // 조건식2의 결과가 참일 때 실행하고자 하는 명령문;
} else {
    // 조건식1의 결과도 거짓이고, 조건식2의 결과도 거짓일 때 실행하고자 하는 명령문;
}

4. switch문

  • if문과 달리 switch문은 단 하나의 조건식으로 많은 경우의 수를 처리할 수 있다.
  • 표현도 간결하여 가독성이 더 좋고 컴파일러가 최적화를 쉽게 할 수 있어 속도 또한 빠른 편이다.
  • 하지만 제약조건이 있어 if/ else보다는 사용할 수 있는 상황이 적다.
  • switch문의 제약조건
    - 조건식 결과는 정수 또는 문자열이어야한다. (문자열 리터럴은 JDK 1.7부터 허용)
    - case문의 값은 정수, 상수(문자 포함), 문자열만 가능하며 중복되지 않아야한다.
switch (조건 값) {
    case1:
        // 조건 값이 값1일 때 실행하고자 하는 명령문;
        break;
    case2:
        // 조건 값이 값2일 때 실행하고자 하는 명령문;
        break;
    ...
	// default 절은 반드시 존재해야 하는 것은 아니다.
    default:
        // 조건 값이 어떠한 case 절에도 해당하지 않을 때 실행하고자 하는 명령문;
        break;
}
  • 각 case절 및 default절은 반드시 break 키워드를 포함하고 있어야 한다.

📌 반복문

  • 반복문이란 프로그램 내에서 똑같은 명령을 일정 횟수만큼 반복하여 수행하도록 제어하는 명령문

1. while문

  • 특정 조건을 만족할 때까지 계속해서 주어진 명령문을 반복, 실행한다.
while(조건식) {
	// 조건식의 결과가 참인 동안 반복적으로 실행하고자 하는 명령문;
}
int i = 1;

while (i <= 5) {
	System.out.println(i);
    i++; // 이 부분이 없으면 무한 루프 (0은 항상 5보다 작기 때문에)
}

// 결과
1
2
3
4
5

2. do/while문

  • while문과 다른 점은 일단 루프를 한번 실행하고 조건식을 검사한다.
  • 즉, 조건식의 결과와 상관없이 무조건 한 번은 루프를 실행하는 것.
do {
	// 조건식의 결과가 참인 동안 반복적으로 실행하고자 하는 명령문; 
    // 한번은 무조건 실행된다.
} while (조건식);
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int input = 0;
        do {
            System.out.print("0부터 10 사이 숫자를 입력해주세요. : ");
            input = sc.nextInt();
            
            if(input < 0) System.out.println("0보다 커야합니다.");
            if(input > 10) System.out.println("10보다 작아야합니다.");
        
        } while (input < 0 || input > 10);

        System.out.println("입력하신 숫자는 : " + input);
    }
}

// 출력
0부터 10 사이 숫자를 입력해주세요. : 12
10보다 작아야합니다.
0부터 10 사이 숫자를 입력해주세요. : -1
0보다 커야합니다.
0부터 10 사이 숫자를 입력해주세요. : 3
입력하신 숫자는 : 3

3. for문

  • 초기식, 조건식, 증감식을 모두 포함하는 반복문
for (초기식; 조건식; 증감식) {
	// 조건식의 결과가 참인 동안 반복적으로 실행하고자 하는 명령문;
}

for(;;) { // 이때 for문을 구성하는 초기식, 조건식, 증감식은 각각 생략이 가능하다.
	// 무한 반복문
}

4. 중첩 for문

  • for문안에 또 다른 for문을 포함시키는 것이다.
  • 대표적인 예시로 별찍기가 있다.
**********
**********
**********
**********
**********
  • 다섯 줄의 별을 출력하기 위해서 3번처럼 중첩 for문을 사용할 수도 있다.
// 1번 - 5번 출력하기
System.out.println("**********");
System.out.println("**********");
System.out.println("**********");
System.out.println("**********");
System.out.println("**********");

// 2번 - for문 활용
for(int i = 1; i <=5; i++) {
	System.out.println("**********")
}

// 3번 - 중첩 for문 활용
for(int i = 1; i <=5; i++) {
	for(int j = 1; j <= 10; j++) {
    	System.out.println("*"); // 별 10개 출력
    }
    System.out.println(); // 줄바꾸기
}

5. Enhanced for문

  • JDK 1.5부터 배열과 컬렉션의 모든 요소를 참조하기 위한 반복문이 추가 되었다.
  • 배열과 컬렉션 프레임 워크에서 유용하게 사용된다.
for(타입 변수이름 : 배열이나 컬렉션 이름) {
	// 배열의 길이만큼 반복적으로 실행하고자하는 명령문;
}

int[] arr = new int[] {1,2,3,4,5};

for(int e : arr) {
	System.out.print(e + " ");
}

// 출력
1 2 3 4 5
  • 주의점
int[] arr1 = new int[]{1, 2, 3, 4, 5};
int[] arr2 = new int[]{1, 2, 3, 4, 5};

for (int i = 0; i < arr1.length; i++) {
	arr1[i] += 10; // 각 배열 요소에 10을 더함.
}

for (int e : arr2) {
	e += 10;       // 각 배열 요소에 10을 더함.
}

// 결과
첫번째 반복문
11 12 13 14 15

두번째 반복문
1 2 3 4 5
  • Enhanced for문 내부에서 사용되는 배열 요소는 배열 요소 그 자체가 아닌 배열 요소의 복사본이다.
  • 때문에 Enhanced for문에서 배열 요소의 값을 변경하더라도 원본 배열에는 아무런 영향을 주지 않는다.
  • 요소를 참조할 때만 사용하는 것이 좋고, 요소에 값을 변경하는 작업에는 적합하지 않다.

📌 기타 제어문

1. break문

  • 자신이 포함된 가장 가까운 반복문을 벗어난다.
  • 주로 if문과 함께 사용되어 특정 조건을 만족할 때 반복문을 벗어난다.
  • 무한 반복문에는 조건문과 break문을 항상 같이 사용한다. break문이 없다면 무한 루프에 빠져 프로그램이 종료되지 않는다.

2. continue문

  • 반복문의 끝으로 이동하여 다음 반복으로 넘어가게 해준다.
  • for문의 경우 증감식으로 이동, while문과 do-while문의 경우 조건식으로 이동한다.
  • 전체 반복 중 특정조건을 만족하는 경우를 제외하고자 할 때 유용하다.

reference !

http://www.tcpschool.com/java/java_control_condition
http://www.tcpschool.com/java/java_control_loop
http://www.tcpschool.com/java/java_control_etc
자바의 정석 기초편

profile
공부 기록

0개의 댓글