[JAVA] 조건문과 반복문, 배열 타입

dejeong·2024년 9월 7일
0

JAVA

목록 보기
7/24
post-thumbnail

조건문과 반복문

조건문과 반복문은 프로그램의 흐름 제어를 위한 기본적인 제어 구조이다. 조건문특정 조건에 따라 코드의 실행 여부를 결정하고, 반복문조건이 만족될 때까지 코드 블록을 반복 실행한다.

if문

if문은 주어진 조건이 true일 경우, 해당 블록 내의 코드를 실행

if (조건식) {
    // 조건이 true일 때 실행되는 코드
}

if-else문

if문의 조건이 true이면 if 블록의 코드가 실행되고, false이면 else 블록의 코드가 실행

if (조건식) {
    // 조건이 true일 때 실행되는 코드
} else {
    // 조건이 false일 때 실행되는 코드
}

if / else if / else

여러 개의 조건문을 처리하기 위해 if - else if - else 문을 사용한다. 각 조건을 순차적으로 검사하며, 첫 번째로 true인 조건의 블록이 실행되고, 나머지 조건들은 무시된다. 마지막 else 블록은 모든 조건이 false일 때 실행된다.

if (조건식1) {
    // 조건식1이 true일 때 실행되는 코드
} else if (조건식2) {
    // 조건식2가 true일 때 실행되는 코드
} else {
    // 위의 모든 조건이 false일 때 실행되는 코드
}
  • 예제 코드
    /*
    	 매개변수 안에 있는 args 를 통해 외부로부터 입력을 받을 수 있다. 
    	 arge는 배열의 형태로 선언되어 있어 배열의 형태로 값을 꺼내오면 된다. 
    	 여러 값을 넣으려면 숫자 넣고 스페이스를 통해 구분하면 된다.
    */
    // if / else if / else
    public static void main(String[] args) {
    
        int score = Integer.parseInt(args[0]); // 문자열을 int로 변환 , arge 의 타입이 strong 이기 때문에.
        System.out.println(score);
        char grade = ' ';
    
        if (score >= 90) {
            grade = 'A';
        } else if (score >= 80) {
            grade = 'B';
        }else if (score >= 70) {
            grade = 'C';
        }else{
            grade = 'D';
        }
    
        System.out.println(grade);
    }

📝 String[] args 에 배열에 값 선언 (입력 받기)

switch / case문

switch문은 주어진 변수가 어떤 값을 가지느냐에 따라 실행될 코드를 결정한다. 조건문(if)과는 달리, 변수의 값에 따라 분기 처리를 한다.

  • switch문의 입력 변수 자료형은 byte, short, char, int, enum, String만 가능하다.
  • Java 17부터는 Pattern Matching for Switch 기능이 추가되어, 객체의 타입을 검사할 수 있다.
  • break 문은 각 case의 마지막에 위치하여, 다음 case 문이 실행되지 않도록 switch문을 빠져나가게 한다.
  • default는 모든 case와 일치하지 않는 경우에 실행된다.

Pattern Matching for Switch 적용된 코드 (Java 17 이후)

public String test(Object obj) {
    return switch(obj) {
        case Integer i -> "An integer";
        case String s -> "A string";
        case Cat c -> "A Cat";  // Cat이라는 클래스가 선언된 경우
        default -> "I don't know what it is";
    };
}

JDK 17 이전의 코드

public String test2(Object obj) {
    if (obj instanceof Integer) {
        return "An integer";
    } else if (obj instanceof String) {
        return "A string";
    } else if (obj instanceof Cat) {  // Cat이라는 클래스가 선언된 경우
        return "A Cat";
    } else {
        return "I don't know what it is";
    }
}
  • enum(열거형 타입): enum은 일정한 상수의 집합을 정의하는 참조 자료형이며, Java 5 이후부터 도입되었다.

  • 예제 코드

    // switch
    public static void main(String[] args) {
        int month = Integer.parseInt(args[0]); // 문자열 -> 정수타입으로
        String monthString;
        switch (month) {
            case 1 ->
                monthString = "January";
            case 2 ->
                monthString = "February";
            case 3 ->
                monthString = "March";
            case 4 ->
                monthString = "April";
            case 5 ->
                monthString = "May";
            case 6 ->
                monthString = "June";
            case 7 ->
                monthString = "July";
            case 8 ->
                monthString = "August";
            case 9 ->
                monthString = "September";
            case 10 ->
                monthString = "October";
            case 11 ->
                monthString = "November";
            case 12 ->
                monthString = "December";
            default ->
                monthString = "Invalid month";   // 유효하지 않은 범위의 값을 입력받았을 때 예외처리
        }
        System.out.println(monthString);
    }
    // switch 연습 예제
    public static void main(String[] args) {
        String week = "";
        switch (args[0]) {
            case "월요일":
                week = "Start if the work week";
                break;
            case "금요일":
                week = " Almost weekend";
                break;
            default:
                week = "Midweek";
                break;
        }
        System.out.println(week);
    }

for문

for문은 일정 횟수만큼 실행문을 반복적으로 수행할 때 사용된다. for문은 초기화, 조건식, 증감식을 포함한 세 가지 부분으로 구성되며, 반복문의 흐름은 초기화 → 조건식 → 실행문 → 증감식 순서로 진행된다.

for (초기화식; 조건문; 증감식) {
    // 반복 실행할 코드
}
  • 예제 코드
    public static void main(String[] args) {
        // for문을 이용해서 1~50까지 출력하기
        for(int i = 1; i <= 50; i++){
            System.out.println(i);
        }
    
        // 1~50 범위 안에서 짝수만 출력
        for(int j = 1; j <= 50; j++){
            if(j % 2 == 0){
                System.out.println(j);
            }
        }
    }
     public static void main(String[] args) {
        // arguments로 입력받은 args 배열 출력하기
        for(int k = 0; k < args.length; k++){ // 10 20 30 40 50
            System.out.println(args[k]);
        }
    }

[수행 흐름]

  1. 초기화식: 반복문이 시작될 때 한 번만 실행, 반복에 필요한 변수를 초기화
  2. 조건문: 각 반복 전에 평가, true이면 블록이 실행되고, false이면 반복이 종료
  3. 실행문: 조건이 true일 때 실행되는 코드
  4. 증감식: 반복문이 한 번 실행될 때마다 실행, 보통 반복 변수를 증가시키거나 감소시키는 코드가 들어감

for each문

for each문은 향상된 for문으로, 배열이나 컬렉션과 같은 데이터 구조에서 요소를 하나씩 순회하며 처리할 때 사용된다. 일반 for문보다 코드가 간결하고, 반복 구조의 요소를 직접 참조할 수 있다.

for (자료형 변수명 : iterable) {
    // 반복 실행할 코드
}
  • 예제 코드
    public static void main(String[] args) {
        String[] numbers = {"one", "two", "three", "four"};
    
        for (String number : numbers) { // 선언한 number 변수는 for안에서 사용할 수 있게 된다.
            System.out.println(number);
        }
    }
    public static void main(String[] args) {
        // arguments로 입력받은 args 배열 출력하기
        for(int k = 0; k < args.length; k++){ // 10 20 30 40 50
            System.out.println(args[k]);
        }
    
        System.out.println("*-------------*");
    
        // for each문 변환
        for(String arg : args){
            System.out.println(arg);
        }
    }
  • 자료형: 배열 또는 컬렉션의 각 요소의 타입을 나타냄
  • 변수명: 각 반복 시 배열 또는 컬렉션의 요소를 참조하는 변수
  • iterable: 배열 또는 컬렉션과 같은 반복 가능한 객체

for each문은 Collection 인터페이스를 구현하는 클래스(ArrayList, LinkedList, HashMap 등)에서도 사용할 수 있다.

// java에서 제공해주는 자료 구조 Collection 관련 클래스 사용
ArrayList<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);

for(Integer i : list){
    System.out.println(i);
}

continue

continue문은 반복문 내부에서 사용되어, 블록 내의 남은 코드들을 건너뛰고 다음 반복으로 이동시킨다. 주로 특정 조건을 만족할 때 해당 반복을 건너뛰고 싶을 때 사용한다.

  • 예제 코드
    public static void main(String[] args) {
        // 0~60까지 숫자 중 3의 배수만 출력하기 (continue 사용)
        for (int i = 0; i <= 60; i++) {
            int value = i + 1;
            if (value % 3 != 0) {
                continue;
            }
            System.out.println(value + " 는 3의 배수");
        }
    
        System.out.println("*----------------------*");
    
        // 0~60까지 숫자 중 3의 배수만 출력하기 (continue 사용 X)
        for (int j = 0; j <= 60; j++) {
            int value = j + 1;
            if (value % 3 == 0) {
                System.out.println(value + " 는 3의 배수");
            }
        }
    }

이중 for문

이중 for문은 for문 내부에 또 다른 for문을 포함하는 중첩 반복문
바깥 for문이 한 번 실행될 때마다, 안쪽 for문은 조건문 횟수만큼 반복된다.

  • 예제 코드
    public static void main(String[] args) {
        // 이중 for문
        // 3번 중에 한번마다 4번씩 돌아감 그래서 총 돌아가는 횟수는 12회
        for (int i = 0; i < 3; i++) {  // i = 0, 1, 2
            for (int j = 0; j < 4; j++) {  // j = 0, 1, 2, 3
                System.out.println("i = " + i + ", j = " + j);
            }
        }
    
        // 구구단
        for (int i = 2; i <= 9; i++) {
            for (int j = 1; j <= 9; j++) {
                System.out.println(i + " * " + j + " = " + i * j);
            }
            System.out.println("*--------------------*");
        }
    }

while문

while문은 조건식이 true일 동안 계속해서 반복 실행된다.

주로 반복 횟수가 정해져 있지 않고, 특정 조건이 만족될 때까지 반복해야 하는 경우에 사용되며, for문과 같이 break, continue 사용 가능하다.

while (조건문) {
    // 반복 실행할 코드
}
  • 조건문: 반복이 계속될 조건을 정의, 조건이 false가 되면 반복이 종료

  • 예제 코드

    public static void main(String[] args) {
    
        // while 문 사용하여 1~5까지 출력해보기
        int i = 1;
        while (i <= 5){
            System.out.println(i);
            i++;
        }
    
        // '10번 찍어 안 넘어가는 나무 없다' 속담을 while 문을 사용하여 출력하기
        int j = 1;
        while (j <= 10){
            System.out.println("나무를 " + j++ + "번 찍었습니다.");
        }
        System.out.println("나무 넘어갑니다.");
    }

break

break문은 while문을 강제로 종료시킬 때 사용, 반복 중에 특정 조건이 충족되면, 즉시 반복문을 벗어난다.

  • 예제 코드
    // break문 사용
    int coffee = 10;
    int money = 300;
    
    while (money > 0) {
        System.out.println("돈을 받았으니 커피를 줍니다.");
        coffee--;
        System.out.println("남은 커피의 양은 " + coffee + "입니다.");
        if (coffee == 0) {
            System.out.println("커피가 다 떨어졌습니다. 판매를 중지합니다.");
            break;
        }
    }

continue

continue문은 반복문 내에서 특정 조건을 건너뛰고, 다음 반복을 수행하고자 할 때 사용된다.
while문의 경우, continue문을 만나면 조건식으로 돌아가 다음 반복을 시작한다.

  • 예제 코드
     // 0 ~ 60까지의 숫자 중 3의 배수만 출력(continue 사용)
    int num = 0;
    while (num < 60) {
        num++;
        if (num % 3 != 0) {
            continue;
        }
        System.out.println(num);
    }

do-while문

while문과 비슷하지만, 조건문을 뒤에 두어 블록을 먼저 실행한 후 조건식을 평가하기 때문에
최소 한 번은 반드시 실행된다.

  • 예제 코드
    // do-while
    int k = 0;
    do{
        k++; // k = 1
        System.out.println(k); // k = 1
    }while(k < 5); // k = 1로 조건식 체크, true면 do 로 돌아가서 동작 진행, false면 do문 실행이 안되고 빠져나간다.
    
    // do-while 문으로 0~60까지 숫자 중 3 배수 출력해보기
    int l = 0;
    do{
        l++;
        if (l % 3 == 0) {
            System.out.println(l + "는 3의 배수");
        }
    }while(l <= 60);
  • 조건문: 블록을 계속 실행할 조건을 정의한다. 조건이 true일 경우 블록이 반복된다.
  • continuebreak문을 사용할 수 있으며, 반복을 제어할 수 있다.

while문과 do-while문의 차이점

  • while문:
    조건식이 true일 때만 블록을 실행.
    조건식이 처음부터 false이면 블록이 한 번도 실행되지 않을 수 있다.
  • do-while문:
    블록을 최소한 한 번은 실행한 후, 조건식을 평가한다.
    따라서 조건식이 처음부터 false라도 블록이 한 번은 실행된다.

배열 (Array)

배열은 동일한 자료형의 여러 값을 하나의 변수에 저장할 수 있는 자료 구조. 배열의 각 요소는 인덱스를 사용하여 접근할 수 있으며, 인덱스는 0부터 시작한다.

배열의 선언

배열을 선언할 때는 자료형 뒤에 대괄호 []를 붙힌다. 배열을 선언할 때 배열의 크기(길이)를 명시하거나, 값을 바로 할당할 수 있다.

int[] lottoNumbers;   // 정수형 배열 선언
int lottoNumbers[];   // 위와 동일한 정수형 배열 선언 방식

String[] weeks = {"월", "화", "수", "목", "금", "토", "일"}; // 문자열 배열 선언과 초기화
String[] weeks = new String[7]; // 크기가 7인 문자열 배열 선언

배열 초기화 및 값 저장

배열을 선언한 후에 값을 저장할 수 있다. 배열의 특정 인덱스에 값을 할당하면, 해당 위치에 값이 저장된다.

// String[] 문자열 배열 선언, 값 저장
String[] arrayString = new String[10];
arrayString[0] = "첫 번째";
arrayString[1] = "두 번째";

System.out.println(arrayString[2]); // 값을 할당하지 않은 값을 조회하면 null로 출력된다. (비어있음)

배열을 선언하면서 동시에 초기화할 수도 있다.

// 선언, 초기화(값 저장)
String[] arrayString2 = {"첫 번째", "두 번째"};

System.out.println(arrayString2[0]);
System.out.println(arrayString2[1]);
// System.out.println(arrayString2[2]); // 배열에 존재하지 않는 인덱스로 접근하게 된다면 실행 오류가 뜨면서 강제 종료가 된다.(컴파일 오류X)

System.out.println(arrayString2.length);

배열 값 접근

배열의 요소에 접근하기 위해서는 인덱스를 사용해야 하며, 배열의 인덱스는 0부터 시작한다.

String[] arrayString2 = {"첫 번째", "두 번째"};

System.out.println(arrayString2[0]);  // "첫 번째" 출력
System.out.println(arrayString2[1]);  // "두 번째" 출력
System.out.println(arrayString2[2]);  // ArrayIndexOutOfBoundsException 발생

인덱스 범위를 벗어난 값에 접근하려고 하면, ArrayIndexOutOfBoundsException 예외가 발생하며 프로그램이 종료된다.

배열의 길이 구하기

배열의 길이는 length 속성을 사용하여 구할 수 있다. 배열의 길이는 배열에 저장된 요소의 개수를 나타내며, for문을 사용하여 배열의 모든 요소를 순회할 때 유용하다.

 // arguments로 입력받은 args 배열 출력하기
for(int k = 0; k < args.length; k++){ // 10 20 30 40 50
    System.out.println(args[k]);
}
profile
룰루

0개의 댓글