본문 바로가기
스파르타 내일배움캠프/TIL(Today I learned)

25.02.26 TIL - 조건문, 반복문, 배열, 메서드

by pandastic 2025. 2. 26.
반응형

 

 

목차

     

     

    1. Chapter 1 - 7 : 조건문

    수업 목표

    ● 조건문(if, if-else, else-if)이 무엇인지 학습합니다.
    Switch 문이 무엇인지 학습합니다.

     

    조건문

       - 컴퓨터가 마주할 조건들을 미리 정의해 놓는다면 프로그램을 조건에 맞게 동작시킬 수 있음.

     

    조건문 구조

       - 조건 수식 부분이 참 또는 거짓에 따라 명령문이 실행될 지 결정됨.

     

    1. if문

    1. 조건이 참일 때만 실행됨.

        - 조건이 참일 때 실행 순서

    (1)  조건 확인
    (2)  true면 실행
    (3) 다음 코드 진행

     

    💡if문 구조

    if (조건수식) {
    	명령문; // 실행할까? 말까 ?
    }

     

     

    💡참일 경우 명령문 실행

    if (1 < 2) { // true
    	명령문; // ✅
    }

     

     

    💡거짓일 경우 명령문 실행 ❌

    if (2 < 1) { // false
    	명령문; // ❌
    }

     

    2. if ~ else 문

     - 조건이 거짓일 때 처리.

     

     

    1. 조건이 참일 때 실행 순서

    (1)   조건 확인
    (2)  true면 실행
    (3) 다음 코드 진행

     

    2. 조건이 거짓일 때 실행 순서

    (1)   조건 확인
    (2)  false면 진행
    (3) 다음 코드 진행

     

    3. else ~ if 문

     - 여러 개의 조건을 처리해야할 때 사용.

     

    [예시]

    public class Main {
        public static void main(String[] args) {
            String light = "초록불";               // (1)
            if (light.equals("초록불")) {          // (2)
                System.out.println("건너세요!");    // (3)
            } else if (light.equals("노란불")) {   // (4)
                System.out.println("주의하세요!");   // (5)
            } else {  
                System.out.println("멈추세요!");    // (6)
            }
          	// (7) 다음코드 진행
        }
    }

     

    🟢 light 가 “초록불” 일 때 실행 흐름

    (1) light 변수 저장
    (2) 조건 확인
    (3) "건너세요!" 출력
    (7) 다음코드 진행

     

     

    🟡 light 가 “노란불” 일때 실행 흐름

    (1) light 변수 저장
    (2) 조건 확인
    (4) 조건 확인
    (5) "주의하세요!" 출력
    (7) 다음 코드 진행

     

    🔴 light 가 “빨간불” 일때 실행 흐름

    (1) light 변수 저장
    (2) 조건 확인
    (4) 조건 확인
    (6) "멈추세요!" 출력
    (7) 다음 코드 진행

     

    조건에 없는 불이 변수에 담길 경우 → else문으로 진행됨.

     

     

    4. Switch 문

     - 값에 따라 여러 동작을 실행.

     - 괄호 안에 단일값만 들어감.

     - 조건식 사용 불가.

    switch (단일값) {
        case 값1:
            // 값1일 때 실행할 코드
            break;
        case 값2:
            // 값2일 때 실행할 코드
            break;
        default:
            // 위의 값들과 일치하지 않을 때 실행할 코드
    }

    break; 탈출 버튼이라고 생각하면 됨.

    break; 를 만나는 순간 switch문을 벗어나게 됨.

     

    fall-through 현상 주의

     - break문을 스위치에서 사용하지 않으면 다음 case가 실행됨.

     

     

    [실습 과제]

    더보기

    Q1. 신호등 색상을 입력하면 프로그램이 올바른 안내 메시지를 출력하도록 만드세요!

     

    if문

    public class TrafficLight {
        public static void main(String[] args) {
            Scanner scanner = new Scanner(System.in);
            System.out.print("신호등 색상을 입력하세요 (초록불, 노란불, 빨간불): ");
            String light = scanner.nextLine();
            // if문
            if(light.equals("초록불")){
                System.out.println("건너세요!");
            }else if(light.equals("노란불")){
                System.out.println("주의하세요!");
            }else if(light.equals("빨간불")){
                System.out.println("멈추세요!");
            }else{
                System.out.println("잘못된 입력입니다.");
            }
        }
    }

     

     

    switch문

    public class TrafficLight {
        public static void main(String[] args) {
            Scanner scanner = new Scanner(System.in);
            System.out.print("신호등 색상을 입력하세요 (초록불, 노란불, 빨간불): ");
            String light = scanner.nextLine();
    		// switch문
            switch (light){
                case "초록불":
                    System.out.println("건너세요!");
                    break;
                case "노란불":
                    System.out.println("주의하세요!");
                    break;
                case "빨간불":
                    System.out.println("멈추세요!");
                    break;
                default:
                    System.out.println("잘못된 입력입니다.");
            }
        }
    }

     

     

    정답)

    import java.util.Scanner;
    public class TrafficLight {
        public static void main(String[] args) {
            Scanner scanner = new Scanner(System.in);
            System.out.print("신호등 색상을 입력하세요 (초록불, 노란불, 빨간불): ");
            String light = scanner.nextLine(); // 사용자의 입력을 받음
            // TODO: if-else if-else 문을 사용하여 신호등 로직을 구현하세요.
            if (light.equals("초록불")) {
                System.out.println("건너세요!");
                
            } else if (light.equals("노란불")) {
                System.out.println("주의하세요!");
                
            } else if (light.equals("빨간불")) {
                System.out.println("멈추세요!");
                
            } else {
                System.out.println("잘못된 입력입니다.");
            }
        }
    }

     

     

    2. Chapter 1 - 8: 반목문 - 자동화의 첫걸음

    반복문

     - 일정한 형태의 작업을 반복적으로 수행해야할 때 사용.

     - 단 한 줄로 해결 가능함 😎

     

    1. for문

     - 반복 작업을 시작하기 전에 종결 조건을 확인함.

     - 종결 조건이 참(true)일 경우 반복을 수행하고 거짓(false)이면 반복을 끝냄.

    for (시작조건; 종결조건; 조건변화수식) {
    	...
    }

     

    💡break문(탈출 버튼)과 함께 사용

        ●  for문 활용 + break

           -  break문 = 탈출 버튼.

           - 반복을 벗어나야할 때 사용.

     

     

    예시)

    public class Robot {
        public static void main(String[] args) {
    	int customers = 5;
    		for (int i = 1; i <= customers; i++) {
    			if (i == 4) {
    				break; // (1) 반복을 벗어납니다.
    			}
    			System.out.println(i + "번째 손님, 안녕하세요!");
    		}
    		System.out.println("반복문이 종료되었습니다.");
        }
    }

     

     

    💡continue문(건너뛰기 skip 버튼)

       ●  for문 활용 + continue

          - continue 문은 건너뛰기(스킵)버튼.

          - 특정 회차의 반복을 건너뛸 때 사용.

     

    예시)

    public class Robot {
        public static void main(String[] args) {
    	int customers = 5;
    	for (int i = 1; i <= customers; i++) {
    		if (i == 2) {
    			continue; // (1) 반복을 건너 뜁니다.
    		}
    		System.out.println(i + "번째 손님, 안녕하세요!");
    	}
    	System.out.println("반복문이 종료되었습니다.");
        }
    }

     

     

    2. while문

     - 종결 조건만 가지고 있음.

     - 종결 조건식이 true일 때 반복함.

     - 즉, 종결 조건이 거짓(false)이 될 때까지 명령문 반복 → 무한루프를 조심해야함.

    while (종결조건) {
    		반복할 명령문;
    }

     

    예시)

    int i = 1;
    while (i <= 10) { // 1은 10보다 작음으로 반복!
    		System.out.println("i 가 10 보다 작습니다.");
    		i++; // ✅ 없을 경우 무한루프 발생
    }

     

     

    3. do ~ while문

     - while문과 비슷하나, 종결조건을 반복 전이 아니라 반복 후에 체크함.

     

    do {
    	반복할 명령문..
    } while (종결 조건)

     

     

    예시)

    int i = 1;
    do {
    	System.out.println("안녕하세요.");
    	i++;
    } while (i <= 10);

     

     

    [실습 과제]

    더보기

    Q1. 입력한 숫자의 구구단 출력하기

    import java.util.Scanner;
    public class Gugudan {
        public static void main(String[] args) {
            Scanner scan = new Scanner(System.in);
            System.out.print("출력할 구구단 단수를 입력하세요 (2~9): ");
            int num = scan.nextInt();
            if(num < 2 || num > 9){
                System.out.println("2 ~ 9 사이의 숫자를 입력하세요!");
            }else{
                System.out.println("==== " +  num +"단" + " ====");
                for(int i = 1; i<=9; i++){
                    System.out.println(num + " X " +  i + " = " + (num*i));
                }
            }
        }
    }

     

     

    정답)

    import java.util.Scanner;
    public class Gugudan {
        public static void main(String[] args) {
            Scanner scanner = new Scanner(System.in);
            
            System.out.print("출력할 구구단 단수를 입력하세요 (2~9): ");
            int dan = scanner.nextInt();
            // 2~9 사이의 숫자인지 확인
            if (dan < 2 || dan > 9) {
                System.out.println("2에서 9 사이의 숫자를 입력하세요!");
            } else {
                System.out.println("==== " + dan + "단 ====");
                for (int i = 1; i <= 9; i++) {
                    System.out.println(dan + " x " + i + " = " + (dan * i));
                }
            }
        }
    }

     

     

    Q2. 2단부터 9단까지 구구단을 출력하는 프로그램(중첩 for 문 활용)

    public class GugudanAll {
        public static void main(String[] args) {
            for(int i = 2; i<=9; i++){
                System.out.println("==== " + i + "단" + " ====");
                for(int j = 1; j<=9; j++){
                    System.out.println(i + " X " +  j + " = " + (i*j));
                }
                System.out.println();
            }
        }
    }

     

     

    정답)

    public class GugudanAll {
        public static void main(String[] args) {
        
            for (int dan = 2; dan <= 9; dan++) { // 2단부터 9단까지 반복
                System.out.println("==== " + dan + "단 ====");
                
                for (int i = 1; i <= 9; i++) { // 1~9까지 곱하기
                    System.out.println(dan + " x " + i + " = " + (dan * i));
                }
                System.out.println(); // 단 간격을 띄우기
            }
        }
    }

     

     

     

    3. Chapter 1 - 9 : 배열 - 데이터 관리의 시작

    1. 배열

     - 비슷한 주제의 데이터들을 하나의 그룹으로 묶어서 표현하는 방버.

     - 관련된 데이터를 편리하게 관리하기 위해 사용됨.

     - 모든 자료형의 종류로 배열을 만들 수 있음.

     

    예시)

    String[] adventurerList = {"gygim", "Steve", "Grace", ...};

     

    배열의 길이(Array Length)

     - 배열에 들어갈 수 있는 데이터의 개수 의미.

     - 한 번 크기를 정하면 변경할 수 없음(정적배열).

     

     

    🤓배열의 길이 구하는 법

    배열이름.length

     

    예시)

    int arrLength = adventurerList.length;

     

     

    배열 선언(Array Declaration)

     - new 키워드를 사용해 배열을 선언할 수 있음.

    자료형[] 변수이름 = new 자료형[배열의길이]; // 배열선언

     

     

    1. 배열 선언의 첫번째 방법

        ● (1) 배열의 이름(2) 길이 설정 을 각각 다른 줄에서 할 수 있음.

     

        1) 배열 선언

    // 정수형 배열 arr 선언
    int[] arr; // ✅ (1) 배열을 선언합니다.

     

     

         2) 배열 길이 설정

    arr = new int[5]; // ✅ (2) 배열의 길이를 5로 설정합니다.

     

     

     

         3) 배열 길이 구하기

    // 배열 길이 구하기
    int arrLength = arr.length;
    System.out.println("arrLength = " + arrLength); // arrLength = 5

     

     

    2. 배열 선언 및 길이 설정

        ● 배열 선언과 배열 길이 설정은 같은 줄에서도 가능.

    int[] arr = new int[5]; //// ✅ 선언과 동시에 길이를 설정합니다.
    int arrLength = arr.length; 
    System.out.println("arrLength = " + arrLength); // arrLength = 5

     

     

    배열 살펴보기

     - int 자료형은 "4바이트" 크기의 자료형.

     - 길이가 5인 int형 배열은 메모리에서 "20바이트" 크기를 갖게 됨.

       (4바이트 * 5  = 20바이트)

    int[] arr = new int[5];

     

     

     

    문자열 배열 선언

    // 길이가 5인 문자열 배열 arrA 를 선언 
    String[] arrA = new String[5];

     

     

    논리형 배열 선언

    // 길이가 3인 논리형 배열 arrB 를 선언
    boolean[] arrB = new boolean[3];

     

     

    배열의 요소

     - 배열 안에 들어있는 각각의 값을 "배열의 요소" 라고 함.

     - 배열 선언과 동시에 배열의 요소 설정 가능.

    int[] arr = {10, 20, 30, 40, 50};

     

     

     

    2. 인덱스(index)

     - index의 시작은 0.

     - 인덱스를 통해 원하는 배열의 요소에 빠르게 접근 가능.

    int[] arr = {10, 20, 30, 40, 50};
    
    System.out.println("배열의 1번째 요소 = " + arr[0]);
    System.out.println("배열의 2번째 요소 = " + arr[1]);
    System.out.println("배열의 3번째 요소 = " + arr[2]);
    System.out.println("배열의 4번째 요소 = " + arr[3]);
    System.out.println("배열의 5번째 요소 = " + arr[4]);

     

     

    ⚠️인덱스 사용 시 주의사항

        ● 배열의 범위에 벗어난 요소에 접근하는 경우

           ■ ArrayIndexOutOfBoundsException 에러 발생.

           ■ 인덱스 활용 시 배열의 범위를 벗어나지 않도록 조심할 것!!

    int[] arr = {10, 20, 30, 40, 50}; // 5개의 길이를 가진 배열
    System.out.println("배열의 6번째 요소 = " + arr[5]); // ❌ 에러 발생

    에러 메시지

     

     

    배열에 정보 삽입 수정

      - index를 활용해 각 요소의 값을 삽입/ 수정 가능.

    int[] arr = new int[5];
    arr[0] = 100; // ✅ 1번째 요소를 100로 설정
    arr[1] = 200; // ✅ 2번째 요소를 200로 설정
    arr[2] = 300; // ✅ 3번째 요소를 300로 설정
    arr[3] = 400; // ✅ 4번째 요소를 400로 설정
    arr[4] = 500; // ✅ 5번째 요소를 500로 설정
    arr[5] = 600; // ❌ 접근 불가

     

     

     

    배열 탐색

     - index를 활용해 배열 탐색 가능.

     - 변수에 length를 사용하여 인덱스로 활용하면 반복문을 통해 쉽게 배열 탐색 가능.

    int[] arr = {1, 2, 3, 4, 5};
    for (int i = 0; i < arr.length; i++) {
    		// ✅ 숫자대신 변수i 를 인덱스 활용 
        System.out.println("numbers[" + i + "] = " + arr[i]); 
    }

     

     

    3. 향상된 for문

     - 배열의 모든 요소를 하나씩 꺼내서 활용할 때 편리한 반복문.

     - index를 직접 활용하지 않음.

     - for(int a : arr) → 배열 arr에서 하나씩 꺼내서 a에 저장.

     - IndexOutOfBoundsException 에러가 발생하지 않음 → index를 직접 다루지 않기 때문에 에러가 발생하지 않음.

     

    for(배열의요소 : 배열) {
    	명령문;
    }

     

    예시)

    int[] arr = {100, 200, 300, 400, 500};
    for (int a : arr) {
    		System.out.println("배열의 각 요소 = " + a);
    }

     

    4. 2차원 배열(Two-Dimensional Array)

     - 2차원적인 정보를 표현할 때 적합.

     - 첫번째 인덱스는 행 = 가로 방향.

     - 두번재 인덱스는 열 = 세로 방향.

     - 좌표, 위치 정보(x, y) 등

     

    예시)

    boolean[][] board = new boolean[2][2]; // ✅ 2 x 2 2차원 배열 선언
    boolean[][] board = {
    	{true, false}, // 0행의 0열, 0행의 1열,
    	{false, true}  // 1행의 0열, 1행의 1열
    };

     

    2차원 배열 직접 탐색

      - 1차원 배열 탐색처럼 인덱스를 활용해 탐색.

    System.out.println(board[0][0]); // true 까만돌
    System.out.println(board[0][1]); // false 흰돌
    System.out.println(board[1][0]); // true 까만돌
    System.out.println(board[1][1]); // false 흰돌

     

     

    [실습 과제]

    더보기

    💬 Q1. 1차원 배열에서 짝수만 출력하기

    아래의 정수 배열이 주어졌을 때 짝수만 출력하세요.

    배열 예시: {3, 4, 7, 10, 15, 20}

    public class EvenNumberFinder {
        public static void main(String[] args) {
            int[] arr = {3, 4, 7, 10, 15, 20};
            System.out.print("짝수: ");
            for (int i = 0; i < arr.length; i++) {
                if(arr[i] % 2 == 0) {
                    System.out.print(arr[i] + " ");
                }
            }
        }
    }

     

     

    정답)

    public class EvenNumberFinder {
        public static void main(String[] args) {
            int[] numbers = {3, 4, 7, 10, 15, 20};
            System.out.print("짝수: ");
            for (int i = 0; i < numbers.length; i++) {
                if (numbers[i] % 2 == 0) {
                    System.out.print(numbers[i] + " ");
                }
            }
        }
    }

     

    💬 Q2. 1차원 배열의 누적합 구하기

    아래의 정수 배열의 누적합을 구하세요.

    배열 예시: {2, 5, 8}

    public class PrefixSum {
        public static void main(String[] args) {
            int[] arr = {2, 5, 8};
            int sum = 0;
            for(int i = 0; i < arr.length; i++){
                sum += arr[i];
            }
            System.out.println("누적합: " + sum);
        }
    }

     

     

    정답)

    public class PrefixSum {
        public static void main(String[] args) {
            int[] numbers = {2, 5, 8};
            int sum = 0;
            for (int i = 0; i < numbers.length; i++) {
                sum += numbers[i];
            }
            System.out.println("누적합: " + sum);
        }
    }

     

     

    Q3. 2차원 배열에서 검은돌(true)의 좌표(x, y) 찾기

    배열 예시

    boolean[][] board = {
                {true, false},
                {false, true}
    };

     

    public class BlackStoneFinder {
        public static void main(String[] args) {
            boolean[][] board = {
                    {true, false},
                    {false, true}
            };
            for (int i = 0; i < board.length; i++) {
                for (int j = 0; j < board.length; j++) {
                    if(board[i][j] == true) {
                        System.out.println("검은돌(●) 위치: " + "(" + i + "," + j + ")");
                    }
                }
            }
        }
    }

     

     

    정답)

    public class BlackStoneFinder {
        public static void main(String[] args) {
            boolean[][] board = {
                {true, false},
                {false, true}
            };
            for (int i = 0; i < board.length; i++) {
                for (int j = 0; j < board[i].length; j++) {
                    if (board[i][j]) {
                        System.out.println("검은돌(●) 위치: (" + i + "," + j + ")");
                    }
                }
            }
        }
    }

     

     

    4. Chapter 1 - 10 : 메서드 - 모듈화의 시작

    1. 메서드

      - 작업을 표현하는 방법.

      - 함수, 기능이라고도 함.

      - 여러 개의 작은 명령문을 한 곳에 모아 사용하는 단위.

     

     

    1. 메서드가 필요한 이유

      🤔 메서드가 없다면?

            - 모든 일련의 작업들을 한 줄 한 줄 표현해야함.

             - 수정해야 할 기능의 코드를 일일이 찾아서 수정해줘야 함.

     

      🤓메서드가 있다면?

           - 코드가 명확해짐.

           - 유지보수가 쉬워짐.

     

    2. 메서드 살펴보기

        📖 메서드 구조

               - 메서드는 항상 클래스 내부에 존재.

    public class 클래스이름 {
    [반환자료형][메서드이름](매개변수..) {
    	작업 명령문들...
    	}
    }

     

     

        📖 메서드의 흐름

               - 메서드(함수, 기능)는 호출부, 선언부로 나누어짐.

               - 호출부 – 메서드를 사용하는 곳.

               - 선언부 – 메서드가 정의되어 있는 곳.

               - 매개변수를 활용해 메서드 연산에 필요한 데이터 전달 가능.

     

     

    ※ 지역변수

      - 각 메서드는 자신 만의 영역을 가지고 있음.

      - 영억은 중괄호로 표현함.

      - 중괄호 안에 선언된 변수는 중괄호 안에서만 생존.

     

     

    선언부(메서드가 정의되어 있는 곳) - Calculator.java

    public class Calculator {
    int sum(int value1, value2) { // ✅ 메서드 선언된 곳
    	int result = value1 + value2;
    		return result;
    	}
    }

     

    1) 메서드 이름

        - 기능의 역할을 쉽게 짐작할 수 있는 이름 사용.

        - 카멜케이스(camelCase)를 사용하여 작성하며 주로 동사로 시작하는 것이 좋음.

           Ex) sum(), printMessage(), findUserById()

     

    2) 매개변수

        - 작업을 수행할 때 필요한 데이터를 전달받는 공간(변수)

        - 매개변수 여러 개 사용 가능, 쉼표( , ) 로 구분함.

     

    3) 작업 내용

        -  메서드가 실행할 명령문을 { } 중괄호 안에 작성.

        - 메서드가 호출되면 작성된 코드가 첫번째 줄부터 실행됨.

        - 중괄호가 끝나면 함수 종료.

     

    4) 반환값/ 반환자료형 설명

        ● 반환값

           ■ 작업한 결과를 반환해야할 경우 return 키워드 사용.

           ■ 반환값은 함수가 호출된 곳으로 전달됨.

     

        ● 반환 자료형

           ■ 반환되는 데이터의 자료형을 메서드 선언부에서 명시해야함.

           ■ 반환값이 있는 경우 →  반환되는 데이터의 자료형(int, String, double 등)을 작성.

           ■ 반환값이 없는 경우 → void를 작성.

     

     

    호출부(메서드를 호출하는 쪽) - Main.java

      - 메서드를 활용하고 있는 곳.

    public class Main {
        public static void main(String[] args {
    		Calculator calculator = new Calculator(); // ✅ Calculator 객체 소환
    		int result = calculator.sum(1, 2); // ✅ 호출부
    		System.out.println("결과: " + result);
    	}
    }

     

     

    반환값이 없을 때 - void

    ❗반환 데이터가 없는 메서드

         - 메서드가 데이터를 꼭 반환해야하는 것은 아님.

         - 반환 데이터가 없을 때에는 반환자료형 위치에 void 선언.

         - void는 "비어있다" 의 의미.

     

     

    예시)

    public class Calculator {
    // ✅ void 로 반환 데이터가 없다는 것을 표시
    void sum(int value1, value2) { 
    	int result = value1 + value2;
    	System.out.println("계산결과는 " + result + "입니다.");
    	}
    }

     

     

     

    반환값이 있을 때 – return

    ❗반환 값이 있는 메서드

          - return 키워드를 활용해 반환되는 데이터 표현.

          - 반환된 데이터는 호출부에서 받아서 활용 가능.

     

    예시)

    public class Calculator {
    int sum(int value1, value2) {
    int result = value1 + value2;
    	return result; // ✅ result 가 반환됩니다.
    	}
    }

     

     

    [실습 : 메서드 활용]

    1. 클래스(파일) 만들기

    public class Calculator {
    }

     

     

    2. 더하기 메서드 작성하기

    public class Calculator {
    // 기능1: 더하기 메서드(기능)
    int sum(int value1, int value2) {
    	int result = value1 + value2;
    	System.out.println("더하기 결과: " + result);
    	return result;
    	}
    }

     

     

    3. 프로그램 시작 지점에서 Calculator.java 클래스를 객체화 시켜주기.

    public class Main() {
    public static void main(String[] args) {
    	// ✅ calculator 객체화
    	Calculator calculator = new Calculator();
    	}
    }

     - Calculator 클래스에 정의된 메서드를 사용하려면 객체화 필요.

     

     

    4. Calculator 객체의 sum 메서드 활용하기.

    public class Main() {
    public static void main(String[] args) {
    	Calculator calculator = new Calculator();
    	// ✅ 메서드 호출하기
    	calculator.sum(1, 2);
    	}
    }

     - Calculator 클래스에 작성된 sum() 메서드 호출.

     - 함수를 실행시키는 것을 호출(call)이라고 함.

     

     

     

    반응형