백엔드 부트캠프/TIL

[내일배움캠프Spring-6일차] Java 강의 1주차

sintory-04 2025. 2. 24. 17:17

 


    이전에도 자바 공부를 한적 있었는데, 이번에는 강의를 들으면서 공부를 해보겠다.

    2025.01.23 - [백엔드 부트캠프[사전캠프]/TIL] - [내일배움캠프-사전캠프 04일차] 자바 공부

     

    [내일배움캠프-사전캠프 04일차] 자바 공부

    len 만해도 python에서는 len() 이런식만 해도 출력이 됐고, 문자열 * 숫자 하면 숫자만큼 문자열이 더해졌는데. 자바는 그런 게 안 된다.그렇다 보니 하나 하나 함수를 찾아보아야 한다.1. 문자열 반

    sintory-04.tistory.com


    ✅ 1주차 - 01 ] JAVA의 탄생

    - C, C++ 같은 언어들은 운영체제마다 코드가 다르게 동작하는 문제가 있었음.

    - James Gosling의 주도로 자바라는 언어가 탄생. 한번작성하면 어디서든 동작할 수 있도록 만든 언어임.

    1. 플랫폼 독립성

    " 프로그램은 어디서든 동작 "

    • JDK? : 자바프로그램을 개발할 때 필요한 도구 모음임.
    • Javac 자바 컴파일러? .java 언어를 Javac가 바이트 코드로 변환해줌.
    • 바이트코드란? .class Java 프로그램이실행되기 위해 변환되는 중간 단계의 코드. JVM이 해석할 수 있는 코드임.
    • VJM이란 ? 바이트코드를 해석하고 자바 프로그램을 실행시키는 역할

    2. 객체지향

    " 모든것이 클래스 "

    - 자바의 세계는 모두 객체, 클래스로 이루어져 있음

    - 객체와 클래스는 개념적으로는 다르지만 실무에선 혼용해서 많이 쓰임

    - 자바에서 코드를 작성할때 서로 관련있는 기능을 묶어 하나의 클래스로 관리

    - 파일이라고 생각하고 넘어가도 됨

    - 클래스 비유: 설계도 / 설명: 객체를 만들기 위한 정의

    - 객체 비유: 설계도를 기반으로 만들어진 존재 / 설명: 클래스에서 만들어진 존재

    > 오 이렇게 설계도를 기반해서 얘기하니까 좀 이해가 되네 'ㅡ'

    3. 거대한 생태계

    - 이미 다양한 오픈소스 라이브러리, 프레임워크 등을 가지고 있음. 관련 학습자료를 쉽게 찾아 볼 수 있음.

    +) 디버그: 문제를 해결하는 과정


    ✅ 1주차 - 02 ] 강의 컴퓨터의 기억 방식

    1. 메모리 (RAM) 주기억장치

    - 사람은 주 기억장치로 뇌를 ,컴퓨터는 RAM 사용함

    - RAM의 특징: 휘발성, 빠른 속도

    2. 보조 기억 장치 HDD/SSD

    - 컴퓨터가 영구적으로 정보를 저장하기 위해 하드디스크를 활용

    - 보조기억장치 특징: 영구저장, 느린 속도

    - 저장된 정보는 영구적으로 유지되나, 저장된 정보를 가져오기 위해서는 더 큰 비용이 소모 됨.

    RAM 주기억장치 휘발성, 빠름
    HDD/SSD 보조기억장치 영구저장, 느림

    3. 컴퓨터가 메모리를 관리하는 방법

    1) 바이트:

    1바이트는 8 비트로 구성되어 있음.

    2) 비트

    - 컴퓨터가 데이터를 저장하고 처리하는 단위 중 하나

    - 비트는 메모리의 최소 저장 단위임.

    - 1 비트는 0 혹은 1중 한개를 저장할 수 있는 공간이다.

    => 따라서 1비트가 있을 때 표현할 수 있는 경우의 수는 2개인 것이다. (이거를 1비트에 저장할 수 있는 데이터의 수라고 표현)


    ✅ 1주차 - 03 ] 자바 프로젝트 관리

    1. 명명 규칙

    1) 카멜 케이스 camelCase

    : 대문자가 혹처럼 튀어나온다.

    firstName, lastName, fullName

    2) 스네이크 케이스 (snake_case)

    : 언더스코어가 뱀처럼 이어짐

    frist_name, last_name, full_name

    3) 패키지 명명 규칙

    - 소문자만 가능 / 숫자로 시작 금지, 특수문자 사용 금지, 예약어 사용 금지

    - ⭕ : chpater1

    - ❌ : chapTer1 1chapter chapter#1 class public static

    4) 클래스 명명규칙

    - 클래스 이름을 작성할 때는 첫 글자 대문자 + 카멜케이스 조합으로 작성

    - ⭕ MyNewClass

    - ❌ : myNewClass, My_new_class, 1MyNewClass, My#New#Class, Class, Public, Static

    2. 패키지 (폴더)

    : Java 프로젝트에서는 파일들의 묶음을 패키지라고 표현

    - 자바 클래스들을 그룹으로 묶는 기능 / 폴더처럼 파일(클래스)을 정리해서 관리할 수 있도록 도와주는 역할


    ✅ 1주차 - 04 ] 변수 - 데이터의 저장 공간

    1. 변수

    : 데이터의 저장공간임.

    2. 변수의 구조

    [자료형] [변수이름] [세미콜론]
    int a;

    3. 변수 명명 규칙

    - 가독성을 위해 카멜케이스를 권장함. 명사형태로 사용할 것.

    - ⭕ : car1, myCar

    - ❌ : 1stCar, my car, int, class, public

    4. 변수 활용

    1) 변수 선언

    : 데이터 저장 공간을 만드는 것을 변수를 선언한다 라고 표현

    int a;
    int b;

    2) 변수에 값을 할당

    : 변수에 값을 넣어주는 것.

    리터럴- 변수 안에 직접 넣은 "값"을 뜻함

    // a 는 변수이름(Variable)
    // 1 은 리터럴(literal)
    a = 1;

    3) 선언과 동시에 값 할당

    int c = 3;

    4) 기존 변수에 데이터 재할당

    c = 4; //(1)
    c = 5; //(2)
    c = 6; //(3)

    5) 변수에 변수를 할당

    - 자바의 경우 코드가 1번부터 실행됨

    int d = 1;
    int e = d;
    d = 10;
    System.out.println("e = " + e); // 정답 1

    5. 자료형 메모리를 사용하는 단위

    - 자료형이 무엇인지 알아보기.

    - 자료형은 상자에 담을 수 있는 데이터의 크기를 결정하는 규칙

    자료형 종류 범위 바이트 비트
    boolean 논리형 true/ false 1 8
    char 문자형 0~65535 유니코드값 2 16
    byte 정수형 -128-127 1 8
    short 정수형 -32,768 ~ 32,767 2 16
    int 정수형 -2,147,483,648 ~ 2,147,483,647 4 32
    long 정수형 -9,233,372,036,854,775,808 ~ 9,233,372,036,854,775,807 8 64
    float 실수형 약 소수점 6~7자리까지 4 32
    double 실수형 약 소수점 15~17자리까지 8 64

    - floatdouble 형의 범위를 약이라고 표현한 이유

    : IEEE 754 부동소수점 표현 방식. Java의 floatdouble은 2진수 기반의 부동소수점으로 저장되며 이는 10진수에서 정확한 자릿수를 보장하지 못하는 경우가 있기 때문임.

    6. 변수의 선언과 메모리 할당

    - 변수에서 메모리는 1바이트 주소로 관리됨.

    int a = 10; // 4 바이트 크기의 a 변수에 정수형 데이터 10을 넣어 초기화.
    int b; // 4바이트 크기의 b 변수에 어떤 값이 저장돼 있는지 알 수 없음.

    7. 형변환(Casting)

    - 형 변환은 변수의 자료형을 다른 자료형으로 변경하는 것

    • 업캐스팅(UpCasting): 작은 데이터를 큰 데이터로 변경 / 데이터손실 X
    int smallBox = 10;
    double bigBox = smallBox;   // ✅ double <- int 자동형 변환
    System.out.println(bigBox); // ✅ 출력: 10.0
    • 다운캐스팅(DownCasting) : 큰 데이터를 작은 데이터로 변경 / 강제로 형 변환 > 데이터의 손실이 발생함
    double bigBox = 10.111;
    int smallBox = (int) bigBox;  // ✅ int <- double 명시적변환
    System.out.println(smallBox); // ✅ 출력: 10 !데이터손실발생!
    형 변환 종류 형변환 방식 자동 형 변환 여부 설명
    다운캐스팅 명시적 큰상자 → 작은상자
    업캐스팅 묵시적 작은상자 → 큰상자 

    ✅ 1주차 - 05 ] 입출력 - 프로그램과 사용자 간의 대화

    1. 출력

    " 결과를 콘솔로 보여주는 것 "

    1) 출력 방법

    // \n 포함한 출력
    System.out.println("Hello");
    // \n 포함하지 않은 출력
    System.out.print("Hello");

    2) 출력방법 정리

    출력방법 설명
    System.out.print()
    줄 바꿈 없이 출력
    System.out.println()
    출력 후 줄 바꿈

    2. 입력

    "데이터를 자바로 전달하는 것, Java에서는 데이터를 읽을때 객체를 사용하는데 Scanner라는 객체를 통해 입력을 전달 가능"

    1) Scanner 객체 소환

    import java.util.Scanner; // Scanner를 사용하려면 import 필요
    
    public class ScannerPractice {
    
        public static void main(String[] args) {
            // ✅ Scanner 객체 생성 & 변수에 담기
            Scanner scanner = new Scanner(System.in);        
        }
    }

    2) 문자열 받기

    - scanner.nextLine();

    Scanner scanner = new Scanner(System.in);
    System.out.print("좋아하는 문장을 입력하세요: ");
    String sentence = scanner.nextLine();

    3) Int 받기

    - scanner.nextInt();

     System.out.print("정수를 입력하세요: ");
    int num1 = scanner.nextInt();

    4) Double 받기

    - scanner.nextDouble();

    System.out.print("실수를 입력하세요: ");
    double num2 = scanner.nextDouble();

    5) Long 받기

    - scanner.nextLong();

    System.out.print("큰 정수를 입력하세요: ");
    long num3 = scanner.nextLong();

    명명규칙 정리

    명명규칙은 손에 익어야하므로 따로 정리해보았다.

    1️⃣패키지 명명 규칙

    - 소문자만 가능 / 숫자로 시작 금지, 특수문자 사용 금지, 예약어 사용 금지

    - ⭕ : chpater1

    - ❌ : chapTer1 1chapter chapter#1 class public static

    2️⃣클래스 명명규칙

    - 클래스 이름을 작성할 때는 첫 글자 대문자 + 카멜케이스 조합으로 작성

    - ⭕ MyNewClass

    - ❌ : myNewClass, My_new_class, 1MyNewClass, My#New#Class, Class, Public, Static

    3️⃣변수

    - 가독성을 위해 카멜케이스를 권장함. 명사형태로 사용할 것.

    - ⭕ : car1, myCar

    - ❌ : 1stCar, my car, int, class, public


    ✅ 1주차 - 06] 사칙연산

    1. 사칙연산

    1) 기본적인 연산

    int a = 10;
    int b = 3;
    
    // 기본 사칙연산
    int sum = a + b;
    System.out.println("sum = " + sum);
    
    int sub = a - b;
    System.out.println("sub = " + sub);
    
    int mul = a * b;
    System.out.println("mul = " + mul);
    
    int div = a / b;
    System.out.println("div = " + div); // ⚠️ 3 (소수점 버려짐)
    
    double div2 = a / 3.0;
    System.out.println("div2 = " + div2); // ✅ 3.333... (소수점 유지)
    • 정수끼리 나누게 되면 소수점이 버려집니다.
    • 소수점을 유지하려면 소수점과 연산을 시켜야 합니다.

    2) 모듈러 연산 / 몫 계산하기

    - 시간을 연산할시 좋음.

    int mod = 10 % 3;
    System.out.println("mod = " + mod); // 나머지: 1
    
    int mod2 = 15 % 4;
    System.out.println("mod2 = " + mod2); // 나머지: 3
    
    int mod3 = 20 % 7;
    System.out.println("mod3 = " + mod3); // 나머지: 6

    2. 대입 연산자

    1) 대입연산자

    • 대입연산자(=) 는 변수에 값을 할당하는데 사용됩니다.
    • 연산자 중에 제일 마지막에 수행됩니다.
    int num = 5;
    System.out.println("변수 num의 값: " + num); // 10

    2) 복합 대입 연산자(+= ,-= , *= , /= , %= )

    • 복합대입연산자는 누적 값을 구할 때 자주 활용
    int num = 5;
    num += 3;  // num = num + 3;
    System.out.println("+= 결과: " + num); // 8
    
    num -= 2;  // num = num - 2;
    System.out.println("-= 결과: " + num); // 6
    
    num *= 2;  // num = num * 2;
    System.out.println("*= 결과: " + num); // 12
    
    num /= 3;  // num = num / 3;
    System.out.println("/= 결과: " + num); // 4
    
    num %= 3;  // num = num % 3;
    System.out.println("%= 결과: " + num); // 1

    3. 증감 연산자

    1) 증감연산자 활용

    • 증감 연산자는 변수를 1 증가 (++) 또는 1 감소 (--) 시킬 때 사용
    int a = 5;
    System.out.println("++a: " + (++a));  // 6 (먼저 증가 후 출력)
    System.out.println("현재 a 값: " + a);  // 6

    2) 전위연산과 후위연산

    • 증감 연산자는 변수 앞(++i)에 위치하는지 뒤(i++)에 위치하는 지에 따라 실행 순서가 달라집니다.
    // 1. 전위연산
    int a = 5;
    System.out.println("++a: " + (++a));  // 6 (먼저 증가 후 출력)
    System.out.println("현재 a 값: " + a);  // 6
    
    // 2. 후위연산
    int b = 5;
    System.out.println("b++: " + (b++));  // 5 (출력 후 증가)
    System.out.println("현재 b 값: " + b);  // 6

    4. 비교연산자

    1) 같음 연산자

    • 두 값이 같으면 true , 다르면 false를 반환 합니다.
    System.out.println("10 == 10: " + (10 == 10)); // true

    2) 다름 연산자

    • 두 값이 다르면 true , 같으면 false를 반환합니다.
    System.out.println("10 != 5: " + (10 != 5)); // true

    3) 크기 비교 연산자

    • 양쪽의 값을 비교했을때 논리에 맞으면 true를 반환
    • 논리에 어긋나면 false를 반환합니다.
    System.out.println("10 < 5: " + (10 < 5)); // false
    System.out.println("10 >= 10: " + (10 >= 10)); // true
    System.out.println("10 <= 5: " + (10 <= 5)); // false
    연산자 설명 예제 결과
    == 두 값이 같으면 true 10 == 10 true
    != 두 값이 다르면 true 10 != 5 true
    > 왼쪽 값이 크면 true 10 > 5 true
    < 왼쪽 값이 작으면 true 10 < 5 false
    >= 왼쪽 값이 크거나 같으면 true 10 >= 10 true
    <= 왼쪽 값이 작거나 같으면 true 10 <= 5 false

    5. 논리연산자

    1) AND 연산자(&&) 는 두 조건이 모두 참일 때 true 를 반환합니다.

    2) OR 연산자(||) 둘 중 하나라도 참이면 true 를 반환합니다.

    • OR연산자는 일반적인 키보드에서 Enter 키 위에 위치해있습니다.
    • Shift + \를 누르면 |을 입력할 수 있습니다.

    3) NOT 연산자(! ) true 일때 false로, false 일때 true 로 변경합니다.

    • truefalse
    • falsetrue
    연산자 설명 예제 결과
    && (AND) 두 조건이 모두 참일 때만 true true && true true
        true && false false
        false && true false
        (OR) 하나라도 참이면 true
        true  
        false  
        false  
    ! (NOT) 참이면 거짓, 거짓이면 참으로 변경 !true false
        !false true

    6. 연산자 우선순위

    1) 산술연산자 우선순위

    • 기본적인 수학 사칙연산의 우선순위 적용

    2) 기본 연산자 우선순위

    • 산술 → 비교 → 논리 → 대입
    boolean flag = 10 + 5 > 12 && true;
    System.out.println(flag);
    // 실행 순서: (10 + 5) > 12 && true : 산술
    // → 15 > 12 && true : 비교
    // → true && true : 논리
    // → flag = true 대입

    3) 비교 연산자와 산술연산자의 우선순위

    • 산술 연산 → 비교 연산

    4) 논리 연산자 우선순위 ( !&&|| )

    • ! 가 제일 먼저 연산 → 두 번째로 && → 마지막으로 ||

    7. 문자열 비교

    • 문자열 비교는 항상 .equals() 를 활용하세요.(동등성/동일성 문제)
    • ==는 문자열 값을 비교하는 것이 아니라 메모리 주소를 비교하는 방식
    String text1 = "Hello";
    String text2 = "Hello";
    boolean isEqual = text1.equals(text2);
    System.out.println("text1과 text2가 같은가? " + isEqual);

    ✅ 1주차 - 07] 조건문

    1. 조건문 구조

    • 조건 수식 부분이 참(true) 혹은 거짓(false) 에 따라 명령문이 실행될지 결정
    if (조건수식) {
        명령문; // 실행할까? 말까 ?
    }

    2. if문 실습 if, if-else, else if

    1) if 문 - 조건이 참일 때만 실행.

    2) if-else 문 - 조건이 거짓일때 처리

    3) else-if 문 - 여러 개의 조건을 처리해야 할때 사용

    3. Switch

    • 괄호안에 단일값만 들어갈 수 있음. 조건식은 사용할 수 없음.
    • break - 해당 조건문을 나가는 것
    • fall-through 현상 주의
    • break 문을 스위치에서 사용하지 않으면 다음 case 가 실행됩니다.

    ✅ 1주차 - 08] 반복문

    1. for

    • for 반복문에서는 반복작업을 시작하기 전에 종결 조건을 확인합니다.
    • 종결 조건이 참(true) 일 경우 반복을 수행하고 거짓(false)이면 반복을 끝냅니다.
    for (시작조건; 종결조건; 조건변화수식) {
            ...
    }

    1) 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("반복문이 종료되었습니다.");
        }
    }
    // 출력 예시:
    오늘의 손님 수를 입력하세요: 5
    1번째 손님, 안녕하세요!
    2번째 손님, 안녕하세요!
    3번째 손님, 안녕하세요!
    반복문이 종료되었습니다.

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

    • continue 문은 건너뛰기(스킵) 버튼
    • 특정 회차의 반복을 건너뛸때 사용

    2. while

    • while 반복문은 종결조건만 가지고 있음.
    • 종결조건식이 true 일때 반복.
    • 즉 종결조건이 거짓(false)이 될때까지 명령문을 반복합니다.
      → 무한루프를 조심
    while (종결조건) {
            반복할 명령문;
    }

    3. do-while

    • do-whilewhile 문과 비슷하지만 종결조건을 반복 전이 아니라 후에 체크한다는 점입니다.

    ✅ 1주차 - 09] 배열

    1. 배열(Array)

    1) 배열이란?

    • 비슷한 주제의 데이터들을 하나의 그룹으로 묶어서 표현.
    • 관련된 데이터를 편리하게 관리하기 위해 사용됨.
    • 모든 자료형의 종류로 배열을 만들 수 있음.

    2) 배열의 길이

    • 배열의 길이는 배열에 들어갈 수 있는 데이터의 개수를 의미합니다.
    • 배열을 만들 때 한 번 크기를 정하면 변경할 수 없습니다. (정적배열)
    • 아래 문법으로 배열의 길이를 구할 수 있습니다.
    배열이름.length
    int arrLenght =  adventurerList.length;

    3) 배열 선언(Array Declaration)

    • new 키워드를 사용해 배열을 선언할 수 있습니다.
    자료형[] 변수이름 = new 자료형[배열의길이]; // 배열선언
    • (1)배열의 이름과 (2)길이 설정을 각 다른 줄에서 할 수 있습니다.
    int[] arr; 
    arr = new int[5]
    • 배열 선언과 배열길이설정은 같은 줄에 할 수도 있습니다.
    int[] arr = new int[5]; 
    • int 자료형은 4바이트 크기의 자료형입니다.
    • 길이가 5int 형 배열은 메모리에서 20바이트크기를 가집니다. (4바이트 * 5 = 20바이트)

    4) 문자열 배열

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

    5) 논리형 배열

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

    6) 배열의 요소

    • 배열 안에 들어있는 각각의 값을 배열의요소 라고 함
    • 배열 선언과 동시에 배열의 요소를 설정할 수도 있음
    int[] arr = {10, 20, 30, 40, 50}; 

    7) 인덱스

    • 각 배열의 요소에 접근하려면 인덱스(index) 를 이해해야 합니다.
    • index 의 시작은 0 입니다.
    • 인덱스를 통해 원하는 배열의 요소에 빠르게 접근할 수 있습니다.
    • 배열의 범위에 벗어난 요소에 접근 시 ArrayIndexOutOfBoundsException 에러가 발생
    • 인덱스(index) 를 활용할 때는 배열의 범위를 벗어나지 않게 주의

    8) 배열에 정보 삽입 수정

    • 인덱스(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; // ❌ 접근 불가

    9) 배열 탐색

    • 인덱스(index) 를 활용해 배열을 탐색할 수 있습니다.
    • 변수를 인덱스(index) 로 활용한다면 반복문을 통해 쉽게 배열을 탐색할 수 있습니다.
    int[] arr = {1, 2, 3, 4, 5};
    
    for (int i = 0; i < arr.length; i++) {
            // ✅ 숫자대신 변수i 를 인덱스 활용 
        System.out.println("numbers[" + i + "] = " + arr[i]); 
    }

    10) 향상된 for

    • 배열의 모든 요소를 하나씩 꺼내서 활용할 때 편리한 반복문
    • index 직접 활용하지 못함
    • for (int a : arr) → 배열 arr 에서 하나씩 꺼내서 a 에 저장
    • IndexOutOfBoundsException 에러가 발생하지 않음.
    for(배열의요소 : 배열) {
            명령문;
    }

    2. 2차원 배열

    • 2차원배열은 2차원적인 정보를 표현할 때 적합
    • 첫 번째 인덱스는 = 가로 방향을 의미
    • 두 번째 인덱스는 = 세로 방향을 의미
    boolean[][] board = new boolean[2][2]; // 2 x 2 2차원 배열 선언

    ✅ 1주차 - 10] 메서드

    • 메서드는 작업을 표현하는 방법임. 함수, 기능이라고도 합니다.
    • 여러 개의 작은 명령문을 한곳에 모아 사용하는 단위를 메서드 라고 함.
    • 생각해 보면 프로그램에게 커피를 마셔라! 라고 알려주는 것은 굉장히 어려운 일

    1. 메서드 구조

    public class 클래스이름 {
    
            [반환자료형] [메서드이름](매개변수..) {
                    작업 명령문들...
            }
    }
    • 메서드(함수, 기능)는 호출부, 선언부로 나누어집니다.
    • 호출부 - 메서드를 사용하는 곳
    • 선언부 - 메서드가 정의되어 있는 곳
    • 호출부 매개변수를 활용해 메서드 연산에 필요한 데이터를 전달할 수 있습니다.
    • 지역변수의 개념
    • 각 메서드는 자신만의 영역을 가지고 있습니다.
    • 영역은 중괄호 {} 로 표현합니다.
    • 중괄호 안에 선언된 변수는 중괄호 안에서만 생존할 수 있습니다.

    2. 선언부

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

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

    3. 반환값이 있을 때 return

    • 반환 값이 있는 메서드
    • return 키워드를 활용해 반환되는 데이터를 표현.
    • 반환된 데이터는 호출부에서 받아서 활용.
    public class Calculator {
    
            int sum(int value1, value2) {
                    int result = value1 + value2;
                    return result; // ✅ result 가 반환됩니다.
            }
    }

    4. 반환값이 없을 때 void

    • 반환 데이터가 없는 메서드
    • 반환 데이터가 없을때는 반환자료형 위치에 void 를 선언.
    • void 는 “비어있다” 의미.
    public class Calculator {
    
            // ✅ void 로 반환 데이터가 없다는 것을 표시
            void sum(int value1, value2) { 
                    int result = value1 + value2;
                    System.out.println("계산결과는 " + result + "입니다.");
            }
    }

    회고를 적었어야 했는데,, 피곤해서 적지 못했었다 😇😇😇