TIL/[TIL]

[TIL]Java 제어문과 배열

namerong 2026. 4. 30. 23:26

1. 오늘 학습 주제

조건문, 반복문, 분기문을 통해 실행 흐름을 제어하는 방식과, 배열을 선언하고 반복문으로 데이터를 처리하는 구조를 익혔다.

  • if, if-else, if-else-if 조건문 사용하기
  • switch와 향상된 switch 문법 이해하기
  • for, while, do-while 반복문 사용하기
  • 중첩 반복문으로 구구단과 별 출력하기
  • break, continue로 반복 흐름 제어하기
  • 배열 선언, 할당, 초기화 방식 익히기
  • 배열과 반복문을 함께 사용해 합계와 평균 구하기

2. 조건문

조건문은 특정 조건이 참인지 거짓인지에 따라 다른 코드를 실행할 때 사용한다.
if, 중첩 if, if-else, if-else-if, switch를 학습했다.

if(num % 2 == 0) {
    System.out.println("입력한 숫자는 짝수입니다.");
} else {
    System.out.println("입력한 정수는 홀수입니다.");
}
  • if는 조건이 참일 때만 실행된다.
  • if-else는 참과 거짓일 때 실행 흐름을 나눌 수 있다.
  • if-else-if는 여러 조건을 순차적으로 비교할 때 사용한다.
  • 중첩 if와 논리 연산자를 함께 사용하면 더 복잡한 조건도 처리할 수 있다.

성적 계산 예제도 확인했다.

if(point >= 90) {
    grade = "A";
    if(point >= 95) { grade += "+"; }
} else if(point >= 80) {
    grade = "B";
}
  • 조건을 구간별로 나누어 학점을 계산할 수 있다.
  • if 안에 또 다른 if를 넣어 세부 조건도 처리할 수 있다.

3. switch문

여러 경우의 수 중 하나를 선택해야 할 때 switch를 사용할 수 있다.
사칙연산 계산기 예제를 통해 switch와 향상된 switch를 함께 확인했다.

switch (op) {
    case '+':
        result = first + second;
        break;
    case '-':
        result = first - second;
        break;
    default:
        System.out.println("잘못된 연산 기호를 입력했습니다.");
        return;
}
int modernResult = switch (op) {
    case '+' -> first + second;
    case '-' -> first - second;
    default -> {
        System.out.println("잘못된 기호입니다.");
        yield 0;
    }
};
  • switch는 값에 따라 실행할 코드를 분기할 수 있다.
  • 각 case 뒤에 break를 넣어야 다음 case로 넘어가지 않는다.
  • 향상된 switch는 더 간결하게 값을 반환할 수 있다.
  • Scanner에서 문자 입력을 받을 때 next().charAt(0)을 사용할 수 있다.

4. 반복문

반복문은 같은 작업을 여러 번 실행할 때 사용한다.
for, while, do-while을 학습했다.

for (int i = 1; i <= 5; i++) {
    System.out.print(i + "번째 학생의 이름 : ");
}
  • for문은 반복 횟수가 정해져 있을 때 사용하기 좋다.
  • 초기식, 조건식, 증감식을 함께 작성한다.

합계 계산도 반복문으로 처리했다.

int sum = 0;
for (int i = 1; i <= num; i++) {
    sum += i;
}
  • 반복문을 사용하면 누적 합계 같은 계산을 쉽게 할 수 있다.
  • sum += i처럼 누적 패턴을 자주 사용한다.

5. 중첩 반복문

반복문 안에 또 다른 반복문을 넣으면 2차원적인 출력이나 패턴을 만들 수 있다.

for (int i = 2; i <= 9; i++) {
    for (int j = 1; j <= 9; j++) {
        System.out.println(i + " * " + j + " = " + i * j);
    }
}
  • 바깥쪽 반복문은 큰 단위의 반복을 담당한다.
  • 안쪽 반복문은 그 안에서 세부 반복을 담당한다.
  • 구구단이나 별 찍기 같은 문제에서 자주 사용된다.
for (int i = 1; i <= row; i++) {
    for (int j = 1; j <= i; j++) {
        System.out.print("*");
    }
    System.out.println();
}
  • 줄 수와 별 개수의 관계를 반복문으로 표현할 수 있다.
  • 중첩 반복문은 출력 패턴을 이해하는 데 중요하다.

6. while과 do-while

while은 조건을 먼저 검사하고, do-while은 일단 한 번 실행한 뒤 조건을 검사한다.

while(!str.equals("exit")) {
    str = sc.nextLine();
}
do {
    str = sc.nextLine();
} while (!str.equals("exit"));
  • while은 조건이 처음부터 거짓이면 한 번도 실행되지 않을 수 있다.
  • do-while은 최소 한 번은 반드시 실행된다.
  • 문자열 비교는 ==가 아니라 .equals()를 사용해야 한다.

7. break와 continue

반복문 안에서는 break와 continue를 사용해 흐름을 세밀하게 제어할 수 있다.

if(i == 10) {
    break;
}
if(!(i % 4 == 0 && i % 5 == 0)) {
    continue;
}
  • break는 반복문 자체를 종료한다.
  • continue는 현재 회차만 건너뛰고 다음 반복으로 넘어간다.
  • 중첩 반복문에서는 어느 반복문에 영향을 주는지 잘 이해해야 한다.

이름표가 붙은 break도 확인했다.

break ohgiraffers;
  • 라벨을 사용하면 바깥 반복문까지 한 번에 빠져나올 수 있다.
  • 다만 가독성이 떨어질 수 있어 자주 권장되지는 않는다.
  • 대신 flag 변수를 사용해 바깥 반복문을 제어하는 방식도 배웠다.

8. 배열의 개념

배열은 같은 자료형의 값을 여러 개 묶어서 저장하는 구조이다.
여러 변수를 따로 만들지 않고 하나의 이름으로 관리할 수 있다는 점이 중요하다.

int[] scores = new int[5];
  • 배열은 동일한 자료형의 데이터만 저장할 수 있다.
  • new를 사용해 heap 영역에 배열 공간을 할당한다.
  • 인덱스는 0부터 시작한다.

배열을 사용하면 합계와 평균 계산도 훨씬 간단해진다.

for(int i = 0; i < scores.length; i++) {
    sum2 += scores[i];
}
  • 반복문과 배열을 함께 사용하면 여러 데이터를 쉽게 처리할 수 있다.
  • length를 사용하면 배열 길이를 기준으로 안전하게 반복할 수 있다.

9. 배열 선언과 초기화

배열은 여러 방식으로 선언하고 초기화할 수 있다.

int[] iarr = new int[5];
int[] iarr3 = new int[]{11, 22, 33, 44, 55};
int[] iarr4 = {11, 22, 33, 44, 55};
  • 선언 후 나중에 할당할 수도 있다.
  • 선언과 동시에 new로 생성할 수도 있다.
  • 초기값을 바로 넣는 경우 {} 형태를 사용할 수 있다.
  • new 생략은 선언과 동시에 초기화할 때만 가능하다.

배열의 기본값도 확인했다.

  • 정수형 배열은 기본값이 0이다.
  • 실수형 배열은 0.0이다.
  • 논리형 배열은 false이다.
  • 참조형 배열은 null이다.

10. 배열과 인덱스

배열은 인덱스로 각 요소에 접근한다.

iarr[0] = 10;
iarr[1] = 20;
  • 첫 번째 요소는 0번 인덱스에 저장된다.
  • 존재하지 않는 인덱스에 접근하면 오류가 발생한다.
  • 배열 길이보다 작은 범위에서만 접근해야 한다.

문자열 배열도 다뤘다.

String[] sarr = {"apple", "banana", "orange"};
  • 배열은 기본 자료형뿐 아니라 문자열 같은 참조형도 저장할 수 있다.
  • 같은 방식으로 반복문을 사용해 출력할 수 있다.

11. 실습 흐름 정리

11.1 제어문

  • 짝수/홀수 판별
  • 양수이면서 짝수인지 조건 판단
  • 점수에 따른 학점 계산
  • switch를 활용한 사칙연산 처리
  • for, while, do-while 반복 구조 확인
  • 구구단과 별 찍기 출력
  • break, continue, flag 변수로 흐름 제어

11.2 배열

  • 배열의 필요성과 개념 이해
  • 배열 선언, 할당, 초기화 방식 학습
  • 기본값 확인
  • 반복문으로 배열 요소 출력
  • 점수 합계와 평균 계산 구조 이해
  • 5명의 점수를 입력받는 배열 실습 틀 확인

12. 오늘 배운 핵심 정리

  1. 조건문은 상황에 따라 실행 흐름을 나누기 위해 사용한다.
  2. if, if-else, if-else-if, switch는 각각 쓰임이 다르다.
  3. switch는 특정 값에 따라 여러 경우를 깔끔하게 처리할 수 있다.
  4. for문은 반복 횟수가 명확할 때 유용하다.
  5. while은 조건을 먼저 검사하고, do-while은 한 번 실행 후 조건을 검사한다.
  6. break는 반복문을 종료하고, continue는 현재 반복만 건너뛴다.
  7. 중첩 반복문은 구구단이나 별 출력 같은 패턴 문제에 자주 사용된다.
  8. 배열은 같은 자료형의 여러 값을 하나로 묶어 관리할 수 있게 해준다.
  9. 배열의 인덱스는 0부터 시작하며, length를 활용해 순회할 수 있다.
  10. 배열과 반복문을 함께 사용하면 합계, 평균 같은 처리를 훨씬 효율적으로 할 수 있다.