1. 몬스터(Pokemon) 클래스 예제 🌟

 필드(멤버 변수)는 클래스 내부에서 타입과 함께 선언됩니다.

📝 Java 코드

Java
 
// 🌟 Pokemon (포켓몬) 클래스
class Pokemon {
    
    // 2. ✨ 필드 (Field) / 자바에서는 멤버 변수
    //    객체가 가지는 속성(데이터)을 정의합니다. (타입 지정 필수!)
    String name;  // 이름 멤버 변수
    String type;  // 타입 멤버 변수
    int hp;       // 체력 멤버 변수

    // 1. 🛠️ 생성자 (Constructor)
    //    클래스 이름과 동일하며, 객체를 만들 때(new Pokemon("피카츄", "전기", 35);) 실행됩니다.
    public Pokemon(String name, String type, int hp) {
        // 매개변수로 받은 값을 필드에 초기 설정합니다.
        this.name = name;
        this.type = type;
        this.hp = hp; 
        
        System.out.println("새로운 포켓몬 '" + this.name + "'(이)가 탄생했습니다! (생성자 실행)");
    }

    // 3. 🏃‍♂️ 메서드 (Method)
    //    객체가 할 수 있는 행동(기능)입니다.
    public void useSkill(String skillName) {
        System.out.println("[" + this.name + "]이(가) '" + skillName + "' 스킬을 사용합니다! ⚡️");
    }

    public void showStatus() {
        System.out.println("--- " + this.name + " 상태 ---");
        System.out.println("타입: " + this.type + ", 체력: " + this.hp);
        System.out.println("--------------------");
    }
}

// --- 객체 만들기 및 사용 (Main 메서드) ---
public class PokemonExample {
    public static void main(String[] args) {
        // 이 순간 생성자(public Pokemon(...))가 실행됩니다!
        Pokemon pikachu = new Pokemon("피카츄", "전기", 35); 
        
        // --- 필드 접근 및 메서드 사용 ---
        System.out.println("피카츄의 현재 체력 필드: " + pikachu.hp); // 필드(hp) 값 확인
        pikachu.useSkill("백만볼트"); // 메서드(useSkill) 사용
        pikachu.showStatus();       // 메서드(showStatus) 사용
    }
}

💻 코드 실행 결과 (예상)

새로운 포켓몬 '피카츄'(이)가 탄생했습니다! (생성자 실행)
피카츄의 현재 체력 필드: 35
[피카츄]이(가) '백만볼트' 스킬을 사용합니다! ⚡️
--- 피카츄 상태 ---
타입: 전기, 체력: 35
--------------------

2. 자동차(Car) 클래스 예제 🚗

자바에서는 타입을 명시해야 하며, 기본값 False는 boolean 타입의 false로 지정됩니다.

📝 Java 코드

Java
 
// 🌟 Car (자동차) 클래스 정의
class Car {
    // 2. ✨ 필드 (Field) / 멤버 변수
    //    자동차 객체가 가지는 특징들을 저장하는 곳입니다.
    String color;          // 색깔 필드
    int maxSpeed;          // 최고 속도 필드
    boolean isRunning;     // 현재 달리고 있는지 (기본값은 false)

    // 1. 🛠️ 생성자 (Constructor)
    public Car(String color, int maxSpeed) {
        this.color = color;          // 색깔 필드 설정
        this.maxSpeed = maxSpeed;    // 최고 속도 필드 설정
        this.isRunning = false;      // 현재 상태는 false로 초기화 (명시적으로 안 해도 기본값은 false)
        
        System.out.println("[" + this.color + "색 자동차]가 공장에서 만들어졌습니다! (생성자 완료)");
    }

    // 3. 🏃‍♂️ 메서드 (Method) - 시동 걸고 달리기
    public void startEngine() {
        this.isRunning = true;
        System.out.println("[" + this.color + "색 자동차]가 시동을 걸고 **부릉부릉** 달리기 시작합니다! 💨");
    }

    // 3. 🏃‍♂️ 메서드 (Method) - 멈추기
    public void stopEngine() {
        this.isRunning = false;
        System.out.println("[" + this.color + "색 자동차]가 멈췄습니다. (현재 속도: 0)");
    }

    // 3. 🏃‍♂️ 메서드 (Method) - 상태 확인
    public void checkStatus() {
        // 자바에서는 삼항 연산자 (조건 ? 참일 때 값 : 거짓일 때 값)를 사용합니다.
        String status = this.isRunning ? "달리는 중" : "정지 상태";
        
        System.out.println("--- 현재 상태 ---");
        System.out.println("색깔: " + this.color);
        System.out.println("최고 속도: " + this.maxSpeed + " km/h");
        System.out.println("상태: **" + status + "**");
        System.out.println("-----------------");
    }
}

// --- 객체 만들기 및 사용 (Main 메서드) ---
public class CarExample {
    public static void main(String[] args) {
        System.out.println("=== 첫 번째 자동차 만들기 ===");
        // 1️⃣ 빨간색 스포츠카 객체(인스턴스) 만들기
        Car myCar = new Car("빨강", 300);
        System.out.println("\n");
        
        System.out.println("=== 두 번째 자동차 만들기 ===");
        // 2️⃣ 파란색 미니카 객체(인스턴스) 만들기
        Car friendCar = new Car("파랑", 150);
        System.out.println("\n");
        
        // --- 객체의 필드와 메서드 사용 ---
        System.out.println("=== 내 자동차 (빨강) 작동 시작 ===");
        myCar.checkStatus(); // 메서드 사용: 현재 정지 상태
        myCar.startEngine(); // 메서드 사용: 시동 걸고 달리기
        myCar.checkStatus(); // 메서드 사용: 현재 달리는 중
        System.out.println("\n");
        
        System.out.println("=== 친구 자동차 (파랑) 작동 시작 ===");
        friendCar.checkStatus(); // 메서드 사용: 현재 정지 상태
        friendCar.startEngine();
        friendCar.stopEngine();  // 메서드 사용: 멈추기
        friendCar.checkStatus();
    }
}

💻 코드 실행 결과 (예상)

=== 첫 번째 자동차 만들기 ===
[빨강색 자동차]가 공장에서 만들어졌습니다! (생성자 완료)

=== 두 번째 자동차 만들기 ===
[파랑색 자동차]가 공장에서 만들어졌습니다! (생성자 완료)

=== 내 자동차 (빨강) 작동 시작 ===
--- 현재 상태 ---
색깔: 빨강
최고 속도: 300 km/h
상태: **정지 상태**
-----------------
[빨강색 자동차]가 시동을 걸고 **부릉부릉** 달리기 시작합니다! 💨
--- 현재 상태 ---
색깔: 빨강
최고 속도: 300 km/h
상태: **달리는 중**
-----------------

=== 친구 자동차 (파랑) 작동 시작 ===
--- 현재 상태 ---
색깔: 파랑
최고 속도: 150 km/h
상태: **정지 상태**
-----------------
[파랑색 자동차]가 시동을 걸고 **부릉부릉** 달리기 시작합니다! 💨
[파랑색 자동차]가 멈췄습니다. (현재 속도: 0)
--- 현재 상태 ---
색깔: 파랑
최고 속도: 150 km/h
상태: **정지 상태**
-----------------

3. 은행 계좌(Account) 클래스 예제 🏦

자바에서는 조건문 (if (조건) { ... } else { ... }) 을 사용하여 잔액이 충분한지 확인하는 로직을 만듭니다.

📝 Java 코드

Java
 
// 🌟 Account (은행 계좌) 클래스 정의
class Account {
    
    // 2. ✨ 필드 (Field) / 멤버 변수
    //    계좌 객체가 가지는 중요한 데이터들을 저장하는 곳입니다.
    String ownerName;        // 예금주 이름 필드 (String)
    String accountNumber;    // 계좌 번호 필드 (String)
    long balance;            // 잔액 필드 (long 타입으로 큰 금액도 처리)
    
    // 1. 🛠️ 생성자 (Constructor)
    public Account(String ownerName, String accountNumber) {
        this.ownerName = ownerName;
        this.accountNumber = accountNumber;
        this.balance = 0; // 잔액 필드 (처음엔 0원으로 시작)
        
        System.out.println("**[" + this.ownerName + " 님]**의 계좌가 개설되었습니다! (계좌번호: " + this.accountNumber + ")");
    }

    // 3. 🏃‍♂️ 메서드 (Method) - 저금/입금 기능
    public void deposit(long amount) {
        // amount (금액)만큼 잔액 필드(this.balance)에 더해줍니다.
        this.balance += amount;
        System.out.println("💰 " + amount + " 원이 입금되었습니다.");
        checkBalance(); // 잔액 확인 메서드 호출
    }

    // 3. 🏃‍♂️ 메서드 (Method) - 출금 기능
    public void withdraw(long amount) {
        if (this.balance >= amount) {
            // 잔액이 충분하면, amount만큼 잔액 필드에서 빼줍니다.
            this.balance -= amount;
            System.out.println("💸 " + amount + " 원이 출금되었습니다.");
        } else {
            System.out.println("🚨 잔액이 부족합니다!");
        }
        checkBalance(); // 잔액 확인 메서드 호출
    }

    // 3. 🏃‍♂️ 메서드 (Method) - 잔액 확인 기능
    public void checkBalance() {
        // 잔액 필드의 현재 값을 보여줍니다.
        System.out.println("✅ 현재 잔액: **" + this.balance + "** 원");
        System.out.println("--------------------");
    }
}

// --- 객체 만들기 및 사용 (Main 메서드) ---
public class AccountExample {
    public static void main(String[] args) {
        System.out.println("=== 🧒 철수 계좌 개설 ===");
        // 1️⃣ 내 계좌 객체(인스턴스) 만들기
        Account myAccount = new Account("철수", "123-456");
        System.out.println("\n");
        
        System.out.println("=== 👩 영희 계좌 개설 ===");
        // 2️⃣ 엄마 계좌 객체(인스턴스) 만들기
        Account momAccount = new Account("영희", "789-012");
        System.out.println("\n");
        
        // --- 객체의 메서드 사용 ---
        System.out.println("=== 💰 철수 계좌 활동 ===");
        myAccount.deposit(50000);   // 50,000원 입금 메서드 사용
        myAccount.withdraw(10000);  // 10,000원 출금 메서드 사용
        myAccount.withdraw(80000);  // 잔액 부족으로 출금 실패 (조건문 확인)
        System.out.println("\n");
        
        System.out.println("=== 💰 영희 계좌 활동 ===");
        momAccount.deposit(1000000); // 1,000,000원 입금 메서드 사용
        momAccount.checkBalance();  // 잔액 확인 메서드 사용
    }
}

💻 코드 실행 결과 (예상)

=== 🧒 철수 계좌 개설 ===
**[철수 님]**의 계좌가 개설되었습니다! (계좌번호: 123-456)

=== 👩 영희 계좌 개설 ===
**[영희 님]**의 계좌가 개설되었습니다! (계좌번호: 789-012)

=== 💰 철수 계좌 활동 ===
💰 50000 원이 입금되었습니다.
✅ 현재 잔액: **50000** 원
--------------------
💸 10000 원이 출금되었습니다.
✅ 현재 잔액: **40000** 원
--------------------
🚨 잔액이 부족합니다!
✅ 현재 잔액: **40000** 원
--------------------

=== 💰 영희 계좌 활동 ===
💰 1000000 원이 입금되었습니다.
✅ 현재 잔액: **1000000** 원
--------------------
✅ 현재 잔액: **1000000** 원
--------------------

자바 예제를 통해 클래스, 생성자, 필드(멤버 변수), 메서드의 개념이 파이썬과 거의 동일하며, 단지 문법(타입 선언, 생성자 모양 등)만 다르다는 것을 이해하셨을 겁니다.

 

☕ 클래스, 객체, 인스턴스 자바로 이해하기

붕어빵 비유는 그대로 유지하면서, 자바 문법으로 어떻게 구현되는지 살펴보겠습니다.


1. 🌟 Pokemon 클래스 (붕어빵 틀) 만들기

자바에서 클래스는 데이터(속성)와 메서드(기능)의 묶음입니다. 이 클래스가 바로 객체를 찍어내는 설계도인 '붕어빵 틀'의 역할을 합니다.

Java
 
// 1. 🌟 Pokemon (포켓몬) 클래스 만들기
//    이것이 바로 '붕어빵 틀' 입니다.
class Pokemon {
    // 📝 속성 (특징) - 모든 포켓몬이 가질 기본 특징을 정의합니다.
    String name;  // 이름
    String type;  // 타입 (전기, 물, 불 등)
    int hp;       // 체력

    // 🔨 생성자 (Constructor) - 객체를 만들 때(new) 속성 값을 초기화하는 기능입니다.
    //    파이썬의 __init__과 같은 역할을 합니다.
    public Pokemon(String name, String type, int hp) {
        this.name = name; // this.name은 클래스의 속성, name은 매개변수
        this.type = type;
        this.hp = hp;
    }

    // 🔨 기능 (할 수 있는 행동) - '메서드(Method)'라고 부릅니다.
    public void useSkill() {
        System.out.println("[" + this.name + "]이(가) 스킬을 사용합니다!");
    }

    public void showStatus() {
        System.out.println("--- " + this.name + " 상태 ---");
        System.out.println("타입: " + this.type);
        System.out.println("체력: " + this.hp);
        System.out.println("--------------------");
    }
}
  • 속성 (Attribute): String name, int hp 등은 클래스가 가진 변수로, 객체마다 다른 값을 가질 수 있습니다.
  • 생성자 (Constructor): public Pokemon(...)는 클래스 이름과 같은 특별한 메서드입니다. new 키워드를 사용하여 객체(인스턴스)를 생성할 때 반드시 호출되며, 속성을 초기화하는 역할을 합니다.
  • 메서드 (Method): public void useSkill() 등은 객체가 수행할 수 있는 동작을 정의합니다.

2. ⚡️ 객체 (인스턴스) 만들기 및 기능 사용하기

new 키워드를 사용하여 Pokemon 클래스라는 틀에서 **실제 객체(인스턴스)**인 피카츄와 꼬부기를 찍어냅니다.

Java
 
// 2. ⚡️ 객체 (인스턴스) 만들기 및 기능 사용해 보기
public class Main {
    public static void main(String[] args) {
        // '피카츄' 라는 객체(인스턴스) 만들기
        // new Pokemon(...)은 생성자를 호출하며 메모리에 실제 객체를 만듭니다.
        Pokemon pikachu = new Pokemon("피카츄", "전기", 35);

        // '꼬부기' 라는 객체(인스턴스) 만들기
        Pokemon squirtle = new Pokemon("꼬부기", "물", 44);

        System.out.println("--- ⚡️ 피카츄 행동 ---");
        pikachu.showStatus(); // 피카츄 객체의 기능 사용
        pikachu.useSkill();   // 피카츄 객체의 기능 사용

        System.out.println("\n");

        System.out.println("--- 💧 꼬부기 행동 ---");
        squirtle.showStatus(); // 꼬부기 객체의 기능 사용
        squirtle.useSkill();   // 꼬부기 객체의 기능 사용

        System.out.println("\n");
        
        // 4. 🧩 같은 클래스(틀)에서 나왔지만 서로 다른 값 (속성)을 가질 수 있어요.
        System.out.println("피카츄의 타입: " + pikachu.type);
        System.out.println("꼬부기의 타입: " + squirtle.type);
    }
}

코드 실행 결과 (예상)

--- ⚡️ 피카츄 행동 ---
--- 피카츄 상태 ---
타입: 전기
체력: 35
--------------------
[피카츄]이(가) 스킬을 사용합니다!


--- 💧 꼬부기 행동 ---
--- 꼬부기 상태 ---
타입: 물
체력: 44
--------------------
[꼬부기]이(가) 스킬을 사용합니다!


피카츄의 타입: 전기
꼬부기의 타입: 물

🖼️ 자바에서의 개념 정리

개념 붕어빵 비유 자바 (Java)에서의 역할
클래스 (Class) 붕어빵 틀 객체를 만들기 위한 설계도. 속성(변수)과 기능(메서드)을 정의.
객체 (Object) 실제 붕어빵 클래스를 기반으로 new 키워드를 통해 메모리에 생성된 실체.
인스턴스 (Instance) 팥 붕어빵, 슈크림 붕어빵 **"특정 클래스(Pokemon)를 기반으로 만들어진 객체"**를 강조할 때 사용. pikachu는 Pokemon 클래스의 인스턴스.

이처럼 자바에서 클래스는 틀이고, 객체는 그 틀로 만들어진 실체이며, 인스턴스는 그 객체가 특정 클래스에 속한다는 관계를 강조할 때 사용되는 용어라고 이해하시면 됩니다.

 

🍪 클래스란 무엇일까요? (설계도, 틀)

자바에서 클래스는 뭔가 만들 때 쓰는 '설계도'나 '틀'이라고 생각하면 이해하기 쉬워요.

예를 들어, 친구들과 함께 가지고 놀 '쿠키'를 만들고 싶다고 생각해 보세요.

  1. 쿠키 틀 (클래스): 쿠키를 찍어내는 '쿠키 틀'이 바로 클래스예요. 이 틀에는 "쿠키는 동그랗다", "쿠키의 색깔은 갈색이다", "쿠키는 먹을 수 있다" 같은 정보와 기능이 정해져 있죠. 이 틀 자체로는 먹을 수 없지만, 이 틀을 이용해서 수많은 쿠키를 만들 수 있어요.
  2. 클래스 역할: 컴퓨터 프로그램에게 "이런 모양과 특징을 가진 것을 만들어야 해!"라고 알려주는 정의설계도의 역할을 합니다.

🤖 클래스 예제: '강아지' 클래스 만들기

우리가 '강아지'라는 클래스를 만들어 본다고 가정해 봅시다.

1. 강아지 클래스 설계도 (Class)

이 설계도에는 모든 강아지가 가질 수 있는 공통적인 특징(속성)과 행동(기능)을 적어 넣어요.

종류 컴퓨터 용어 예시 (강아지)
특징 속성 (변수) 이름 (name), 색깔 (color), 나이 (age)
행동 기능 (메소드) 짖기 (bark), 꼬리 흔들기 (wagTail), 자기 (sleep)

2. 자바 코드 예제

Java
 
// '강아지' 설계도(클래스)를 만듭니다.
class Dog {
    // 🐾 속성 (강아지의 특징): 모든 강아지가 가질 수 있는 특징이에요.
    String name;  // 이름
    String color; // 색깔
    int age;      // 나이

    // 🔊 기능 (강아지의 행동): 모든 강아지가 할 수 있는 행동이에요.
    void bark() {
        System.out.println(name + "가 '멍멍!' 하고 짖습니다.");
    }

    void wagTail() {
        System.out.println(name + "가 꼬리를 흔듭니다.");
    }
}

3. 클래스를 사용해서 강아지 만들기

이제 이 설계도를 이용해서 실제로 강아지들을 만들어 봅시다!

Java
 
// 이 부분이 클래스를 사용하는 부분입니다.
public class PuppyHouse {
    public static void main(String[] args) {
        // 1. 설계도(Dog 클래스)를 이용해서 '첫 번째 강아지'를 만듭니다.
        Dog puppy1 = new Dog(); // 'puppy1'이라는 강아지 한 마리를 새로 만듭니다.
        
        // 2. 이 강아지의 특징(속성)을 정해 줍니다.
        puppy1.name = "초코";
        puppy1.color = "갈색";
        puppy1.age = 1;
        
        // 3. 이 강아지에게 행동(기능)을 시켜 봅니다.
        System.out.println("첫 번째 강아지 이름: " + puppy1.name);
        puppy1.bark();      // 출력: 초코가 '멍멍!' 하고 짖습니다.

        System.out.println("---");

        // 4. 설계도(Dog 클래스)를 이용해서 '두 번째 강아지'를 또 만듭니다.
        Dog puppy2 = new Dog(); // 'puppy2'라는 다른 강아지 한 마리를 새로 만듭니다.

        // 5. 이 강아지의 특징은 다르게 정해 줍니다.
        puppy2.name = "흰둥이";
        puppy2.color = "흰색";
        puppy2.age = 3;

        // 6. 두 번째 강아지에게 행동을 시킵니다.
        System.out.println("두 번째 강아지 이름: " + puppy2.name);
        puppy2.wagTail();   // 출력: 흰둥이가 꼬리를 흔듭니다.
    }
}

🧐 헷갈리는 4가지 단어 설명

클래스를 배울 때 클래스, 객체, 오브젝트, 인스턴스 네 단어가 비슷해서 헷갈릴 수 있어요. 아까의 쿠키 틀 예시로 설명해 드릴게요!

1. 클래스 (Class) - 🍪 쿠키 틀 (설계도)

  • 의미: 무언가를 만들기 위한 정의설계도예요.
  • 특징: 메모리 공간을 차지하지 않아요. 틀 자체로는 쿠키를 먹을 수 없죠.
  • 예시: Dog (강아지 설계도)

2. 객체 (Object) & 오브젝트 (Object) - 🍪 막연한 쿠키 (만들어진 것)

  • 의미: 설계도(클래스)에 따라 만들어진 모든 것을 통틀어 부르는 가장 일반적인 이름이에요. '물건'이라는 뜻과 같아요.
  • 특징: 자바에서는 클래스에 의해 만들어져 메모리에 올라간 모든 것을 객체 또는 오브젝트라고 부릅니다.
  • 예시: '만들어진 강아지' (초코, 흰둥이...를 통틀어서)

3. 인스턴스 (Instance) - 🍪 특정 쿠키 (실제로 만들어진 것)

  • 의미: 클래스(설계도)를 바탕으로 실제로 컴퓨터 메모리 안에 '만들어진 실체'를 말해요.
  • 특징: 특정한 클래스짝지어서 부릅니다.
  • 예시:
    • puppy1은 Dog 클래스의 인스턴스입니다.
    • puppy2는 Dog 클래스의 인스턴스입니다.

🌟 정리: 객체와 인스턴스

객체는 "만들어진 것"을 가리키는 더 넓은 이름이고,

인스턴스는 "만들어진 것" 중에서도 "어떤 설계도로 만들었는지"를 강조할 때 쓰는 이름이라고 생각하면 됩니다.

단어 비유 설명
클래스 쿠키 틀 정의, 설계도, 만드는 방법
객체 쿠키 만들어진 것(실체)을 부르는 일반적인 이름
인스턴스 초코 맛 쿠키 클래스를 바탕으로 실제 만들어진 특정한 실체

 

버블 정렬(  Bubble Sort )

버블 정렬은 이름 그대로 배열 내의 원소들이 마치 물속의 거품(Bubble) 처럼 떠오르듯이 정렬되는 방식입니다.

  • 원리: 인접한 두 개의 원소를 계속 비교하여, 정렬 순서에 맞지 않으면 자리(위치)를 바꿉니다(Swap).
  • 특징: 이 과정을 반복하면, 배열에서 가장 크거나 작은 원소가 배열의 가장 끝으로 이동하게 됩니다. (가장 무거운 거품이 가장 위로 뜨는 것과 유사합니다.)

💡 버블 정렬은 언제 사용하나요?

버블 정렬은 다른 정렬 알고리즘(퀵 정렬, 병합 정렬 등)에 비해 매우 느린 편입니다. 따라서 실제 프로그래밍에서는 거의 사용되지 않습니다.

하지만 다음 두 가지 경우에만 유용할 수 있습니다.

  1. 배열의 크기가 매우 작을 때: 정렬할 데이터가 몇 개 되지 않을 때는 단순하기 때문에 구현이 빠릅니다.
  2. 정렬 방법을 배울 때: 알고리즘의 개념을 이해하기 가장 쉽기 때문에 교육용으로 많이 사용됩니다.

일반 for 문을 사용한 가장 간결한 버블 정렬

✨ 일반 for 문을 사용한 가장 간결한 버블 정렬향상된 for 문은 사용할 수 없지만, 코드를 최대한 간결하게 줄인 버전은 다음과 같습니다.📌 출력 결과요약: 버블 정렬에서 정렬(비교 및 교환) 로직은 인덱스 기반의 for 문을 사용해야 하고, 단순히 정렬 결과를 출력할 때만 향상된 for 문을 사용하는 것이 일반적입니다.

Java
 
public class SimplifiedBubbleSort {
    public static void main(String[] args) {
        int[] arr = {5, 2, 8, 1}; // 간단한 예시 배열
        int n = arr.length;
        
        // 정렬 로직
        for (int i = 0; i < n - 1; i++) {
            for (int j = 0; j < n - 1 - i; j++) {
                // 인접한 두 원소를 비교하고 교환
                if (arr[j] > arr[j + 1]) {
                    int temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }
            }
        }
        
        // 출력 (향상된 for 문을 사용해 결과만 깔끔하게 출력)
        System.out.print("정렬된 배열: ");
        for (int value : arr) {
            System.out.print(value + " ");
        }
        System.out.println();
    }
}
정렬된 배열: 1 2 5 8 

향상된 for 문은 사용할 수 없지만, 코드를 최대한 간결하게 줄인 버전 입니다.

 

1. 🔍 최대값 (Maximum) 반환 메서드

두 숫자 중 더 큰 값을 찾아 반환하는 메서드입니다.

📝 메서드 정의: findMax

Java
 
public class ValueFinder {

    /**
     * 두 개의 정수 중 큰 값을 찾아 반환하는 메서드입니다.
     * @param num1 첫 번째 숫자
     * @param num2 두 번째 숫자
     * @return 두 수 중 더 큰 정수
     */
    public static int findMax(int num1, int num2) {
        // if 문을 사용하여 두 수를 비교합니다.
        if (num1 > num2) {
            // num1이 더 크면 num1을 반환
            return num1;
        } else {
            // num2가 더 크거나 같으면 num2를 반환
            return num2;
        }
        
        // 💡 팁: 더 간단하게는 Math.max(num1, num2); 를 사용할 수도 있습니다.
    }
    
    // --- 메서드 실행 예시 ---
    public static void main(String[] args) {
        int a = 25;
        int b = 40;
        
        int maxValue = findMax(a, b);
        System.out.println("두 수 (" + a + ", " + b + ") 중 최대값은: " + maxValue);
        
        int x = 100;
        int y = 50;
        int maxValue2 = findMax(x, y);
        System.out.println("두 수 (" + x + ", " + y + ") 중 최대값은: " + maxValue2);
    }
}

💻 결과:

두 수 (25, 40) 중 최대값은: 40
두 수 (100, 50) 중 최대값은: 100

2. 📉 최소값 (Minimum) 반환 메서드

두 숫자 중 더 작은 값을 찾아 반환하는 메서드입니다.

📝 메서드 정의: findMin

Java
 
public class ValueFinder {

    /**
     * 두 개의 정수 중 작은 값을 찾아 반환하는 메서드입니다.
     * @param num1 첫 번째 숫자
     * @param num2 두 번째 숫자
     * @return 두 수 중 더 작은 정수
     */
    public static int findMin(int num1, int num2) {
        // if 문을 사용하여 두 수를 비교합니다.
        if (num1 < num2) {
            // num1이 더 작으면 num1을 반환
            return num1;
        } else {
            // num2가 더 작거나 같으면 num2를 반환
            return num2;
        }
        
        // 💡 팁: 더 간단하게는 Math.min(num1, num2); 를 사용할 수도 있습니다.
    }
    
    // --- 메서드 실행 예시 ---
    public static void main(String[] args) {
        int a = 25;
        int b = 40;
        
        int minValue = findMin(a, b);
        System.out.println("두 수 (" + a + ", " + b + ") 중 최소값은: " + minValue);
        
        int x = 100;
        int y = 50;
        int minValue2 = findMin(x, y);
        System.out.println("두 수 (" + x + ", " + y + ") 중 최소값은: " + minValue2);
    }
}

💻 결과:

두 수 (25, 40) 중 최소값은: 25
두 수 (100, 50) 중 최소값은: 50

 

💡 Java 사칙연산 메서드 구현 예제

Java에서 두 정수(int)를 입력받아 덧셈, 뺄셈, 곱셈, 나눗셈을 수행하는 기본적인 메서드들을 구현하는 예제입니다. 이 예제는 메서드 선언, 매개변수 사용, 그리고 반환(return)의 개념을 이해하는 데 도움이 될 것입니다.

1. 예제 코드

Java
 
public class ArithmeticOperations {

    // 덧셈 메서드
    // 두 정수(a, b)를 더한 결과를 반환합니다.
    public static int add(int a, int b) {
        return a + b;
    }

    // 뺄셈 메서드
    // 두 정수(a에서 b를 뺀) 결과를 반환합니다.
    public static int subtract(int a, int b) {
        return a - b;
    }

    // 곱셈 메서드
    // 두 정수(a, b)를 곱한 결과를 반환합니다.
    public static int multiply(int a, int b) {
        return a * b;
    }

    // 나눗셈 메서드
    // 두 정수(a를 b로 나눈) 결과를 반환합니다. 
    // 정수 나눗셈이므로 소수점 이하는 버려집니다.
    // 0으로 나누는 경우를 방지하기 위해 간단한 예외 처리를 추가했습니다.
    public static int divide(int a, int b) {
        if (b == 0) {
            System.out.println("오류: 0으로 나눌 수 없습니다.");
            return 0; // 또는 다른 오류 처리 방식을 사용
        }
        return a / b;
    }

    public static void main(String[] args) {
        int num1 = 10;
        int num2 = 5;

        // 각 메서드를 호출하고 결과를 출력합니다.
        int sum = add(num1, num2);
        System.out.println("덧셈 결과: " + num1 + " + " + num2 + " = " + sum); // 15

        int difference = subtract(num1, num2);
        System.out.println("뺄셈 결과: " + num1 + " - " + num2 + " = " + difference); // 5

        int product = multiply(num1, num2);
        System.out.println("곱셈 결과: " + num1 + " * " + num2 + " = " + product); // 50

        int quotient = divide(num1, num2);
        System.out.println("나눗셈 결과: " + num1 + " / " + num2 + " = " + quotient); // 2
        
        // 0으로 나누는 경우 테스트
        int divideByZero = divide(10, 0); // 오류 메시지 출력 후 0 반환
        System.out.println("0으로 나눈 결과: " + divideByZero);
    }
}

2. 코드 설명

  • public static int add(int a, int b):
    • public: 이 메서드가 어디서든 접근 가능함을 의미합니다.
    • static: 객체를 생성하지 않고도 이 메서드를 호출할 수 있게 합니다 (클래스이름.메서드이름() 형태로 사용).
    • int: 메서드가 정수(int) 타입의 결과를 반환함을 의미합니다 (반환 타입).
    • add: 메서드의 이름입니다.
    • (int a, int b): 이 메서드가 호출될 때 두 개의 정수 값을 매개변수(parameter)로 받는다는 것을 의미합니다.
  • return a + b;:
    • a와 b를 더한 계산 결과를 메서드를 호출한 곳으로 반환합니다.
  • divide 메서드의 0 처리:
    • divide 메서드에서 if (b == 0)을 사용하여 두 번째 숫자가 0인지 확인합니다. 수학적으로 0으로 나누는 것은 불가능하므로, 실제 연산 전에 오류 메시지를 출력하고 특정 값(여기서는 0)을 반환하여 프로그램이 비정상적으로 종료되는 것을 방지하는 기본적인 예외 처리를 했습니다.
  • main 메서드:
    • 이 메서드는 자바 프로그램의 시작점입니다.
    • add(num1, num2)와 같이 메서드 이름을 사용하여 구현된 사칙연산 메서드를 호출하고, 반환된 값을 변수에 저장하여 사용합니다.

이 예제를 통해 자바에서 메서드를 정의하고 사용하는 기본적인 방식을 이해할 수 있을 거예요!

💡 Java 사칙연산 메서드 구현 예제

Java에서 두 정수(int)를 입력받아 덧셈, 뺄셈, 곱셈, 나눗셈을 수행하는 기본적인 메서드들을 구현하는 예제입니다. 이 예제는 메서드 선언, 매개변수 사용, 그리고 반환(return)의 개념을 이해하는 데 도움이 될 것입니다.

1. 예제 코드

Java
 
public class ArithmeticOperations {

    // 덧셈 메서드
    // 두 정수(a, b)를 더한 결과를 반환합니다.
    public static int add(int a, int b) {
        return a + b;
    }

    // 뺄셈 메서드
    // 두 정수(a에서 b를 뺀) 결과를 반환합니다.
    public static int subtract(int a, int b) {
        return a - b;
    }

    // 곱셈 메서드
    // 두 정수(a, b)를 곱한 결과를 반환합니다.
    public static int multiply(int a, int b) {
        return a * b;
    }

    // 나눗셈 메서드
    // 두 정수(a를 b로 나눈) 결과를 반환합니다. 
    // 정수 나눗셈이므로 소수점 이하는 버려집니다.
    // 0으로 나누는 경우를 방지하기 위해 간단한 예외 처리를 추가했습니다.
    public static int divide(int a, int b) {
        if (b == 0) {
            System.out.println("오류: 0으로 나눌 수 없습니다.");
            return 0; // 또는 다른 오류 처리 방식을 사용
        }
        return a / b;
    }

    public static void main(String[] args) {
        int num1 = 10;
        int num2 = 5;

        // 각 메서드를 호출하고 결과를 출력합니다.
        int sum = add(num1, num2);
        System.out.println("덧셈 결과: " + num1 + " + " + num2 + " = " + sum); // 15

        int difference = subtract(num1, num2);
        System.out.println("뺄셈 결과: " + num1 + " - " + num2 + " = " + difference); // 5

        int product = multiply(num1, num2);
        System.out.println("곱셈 결과: " + num1 + " * " + num2 + " = " + product); // 50

        int quotient = divide(num1, num2);
        System.out.println("나눗셈 결과: " + num1 + " / " + num2 + " = " + quotient); // 2
        
        // 0으로 나누는 경우 테스트
        int divideByZero = divide(10, 0); // 오류 메시지 출력 후 0 반환
        System.out.println("0으로 나눈 결과: " + divideByZero);
    }
}

2. 코드 설명

  • public static int add(int a, int b):
    • public: 이 메서드가 어디서든 접근 가능함을 의미합니다.
    • static: 객체를 생성하지 않고도 이 메서드를 호출할 수 있게 합니다 (클래스이름.메서드이름() 형태로 사용).
    • int: 메서드가 정수(int) 타입의 결과를 반환함을 의미합니다 (반환 타입).
    • add: 메서드의 이름입니다.
    • (int a, int b): 이 메서드가 호출될 때 두 개의 정수 값을 매개변수(parameter)로 받는다는 것을 의미합니다.
  • return a + b;:
    • a와 b를 더한 계산 결과를 메서드를 호출한 곳으로 반환합니다.
  • divide 메서드의 0 처리:
    • divide 메서드에서 if (b == 0)을 사용하여 두 번째 숫자가 0인지 확인합니다. 수학적으로 0으로 나누는 것은 불가능하므로, 실제 연산 전에 오류 메시지를 출력하고 특정 값(여기서는 0)을 반환하여 프로그램이 비정상적으로 종료되는 것을 방지하는 기본적인 예외 처리를 했습니다.
  • main 메서드:
    • 이 메서드는 자바 프로그램의 시작점입니다.
    • add(num1, num2)와 같이 메서드 이름을 사용하여 구현된 사칙연산 메서드를 호출하고, 반환된 값을 변수에 저장하여 사용합니다.



 

💻 Java 사칙연산 계산기 코드

Java
 
import java.util.Scanner;

public class SimpleCalculator {

    public static void main(String[] args) {
        // 1. Scanner 객체 생성
        Scanner scanner = new Scanner(System.in);

        // 2. 값 입력 받기
        System.out.println("간단한 사칙연산 계산기");

        // 첫 번째 값 (1값) 입력
        System.out.print("첫 번째 숫자(1값)를 입력하세요: ");
        double num1 = scanner.nextDouble();

        // 연산자 입력
        System.out.print("연산자(+, -, *, /)를 입력하세요: ");
        String operator = scanner.next();

        // 두 번째 값 (2값) 입력
        System.out.print("두 번째 숫자(2값)를 입력하세요: ");
        double num2 = scanner.nextDouble();

        double result = 0; // 결과를 저장할 변수

        // 3. switch문으로 연산자 처리
        switch (operator) {
            case "+":
                // 덧셈 함수 호출
                result = add(num1, num2);
                break;
            case "-":
                // 뺄셈 함수 호출
                result = subtract(num1, num2);
                break;
            case "*":
                // 곱셈 함수 호출
                result = multiply(num1, num2);
                break;
            case "/":
                // 나눗셈 함수 호출 및 0으로 나누는 경우 처리
                if (num2 != 0) {
                    result = divide(num1, num2);
                } else {
                    System.out.println("오류: 0으로 나눌 수 없습니다.");
                    scanner.close();
                    return; // 프로그램 종료
                }
                break;
            default:
                // 유효하지 않은 연산자 처리
                System.out.println("오류: 유효하지 않은 연산자입니다.");
                scanner.close();
                return; // 프로그램 종료
        }

        // 4. 결과 출력
        System.out.println("--- 결과 ---");
        System.out.println(num1 + " " + operator + " " + num2 + " = " + result);

        // Scanner 닫기
        scanner.close();
    }

    // --- 사칙연산 함수(메서드) 구현 ---

    /**
     * 두 수의 덧셈 결과를 반환합니다.
     * @param a 첫 번째 수
     * @param b 두 번째 수
     * @return 덧셈 결과
     */
    public static double add(double a, double b) {
        return a + b;
    }

    /**
     * 두 수의 뺄셈 결과를 반환합니다. (a - b)
     * @param a 첫 번째 수
     * @param b 두 번째 수
     * @return 뺄셈 결과
     */
    public static double subtract(double a, double b) {
        return a - b;
    }

    /**
     * 두 수의 곱셈 결과를 반환합니다.
     * @param a 첫 번째 수
     * @param b 두 번째 수
     * @return 곱셈 결과
     */
    public static double multiply(double a, double b) {
        return a * b;
    }

    /**
     * 두 수의 나눗셈 결과를 반환합니다. (a / b)
     * @param a 첫 번째 수
     * @param b 두 번째 수
     * @return 나눗셈 결과
     */
    public static double divide(double a, double b) {
        // main 함수에서 0으로 나누는 경우를 이미 검사했지만, 
        // 함수 자체의 안전성을 위해 추가 검사를 할 수도 있습니다.
        // 여기서는 main의 검사에 의존합니다.
        return a / b;
    }
}

📝 코드 설명

1. main 메서드 역할

  • Scanner 클래스를 이용해 사용자로부터 num1 (첫 번째 값), operator (연산자), **num2 (두 번째 값)**를 차례로 입력받습니다.
  • 입력받은 operator 문자열을 기준으로 switch문을 실행합니다.
  • 각 case (+, -, *, /)에서 해당하는 사칙연산 함수(add, subtract, multiply, divide)를 호출하고, 그 리턴값을 result 변수에 저장합니다.
  • 특히 나눗셈(case "/")에서는 num2가 0인지 검사하여 0으로 나누는 예외 상황을 처리했습니다.
  • 모든 처리가 끝난 후 최종 결과를 출력합니다.

2. 사칙연산 함수 (add, subtract, multiply, divide)

  • 각 연산은 public static double 타입의 메서드로 구현되어 있습니다.
  • 두 개의 double 타입 매개변수를 받아 해당 연산을 수행한 후, 연산 결과를 double 타입으로 리턴합니다.
  • 숫자를 실수(double)로 처리하여 정수뿐만 아니라 소수점 연산도 가능하도록 했습니다.

 

🔑 자바 범위, 지역과 전역으로 다시 설명!

자바에서 변수의 범위(Scope)는 그 변수가 "어디까지 영향을 미치고, 어디서 불러서 사용할 수 있는지"를
정하는 규칙이라고 했죠?

이것을 크게 두 종류로 나누면 다음과 같습니다.

1. 🏠 아파트 전체: 전역 변수 역할 (클래스 멤버 변수)

이 변수는 아파트 전체와 같아요.

용어 자바에서의 이름 아파트 비유 특징
전역 변수 역할 클래스 멤버 변수 (Field) 🏢 아파트 단지 이름 아파트 단지 안의 모든 동, 모든 호수에서 이 이름을 알고 사용할 수 있어요.
위치 클래스 {} 안에 있지만,
메소드 {} 밖
   

쉽게 말해: 한 번 만들면 그 클래스(아파트 단지) 안에 있는 모든 곳에서 사용할 수 있어요.

2. 🚪 방 안: 지역 변수 (Local Variable)

이 변수는 특정 방 안에서만 사용할 수 있어요.

용어 자바에서의 이름 아파트 비유 특징
지역 변수 지역 변수 (Local Variable) 🎈 어떤 방에서 산 장난감 그 방(메소드나 블록) 안에서만 가지고 놀 수 있고, 방을 나가면 친구들은 그 장난감이 있는지 몰라요.
위치 메소드나 특정 블록 {} 안    

쉽게 말해: 변수가 만들어진 중괄호 {} 안에서만 잠깐 사용하고, 중괄호를 벗어나면 사라지는 변수입니다.


💡 예시로 확인하기: 아파트 단지

Java
 
class ApartmentComplex { // 🏢 아파트 단지 전체 (클래스)

    String complexName = "행복 아파트"; // 1️⃣ 전역 변수 역할 (클래스 멤버 변수)
    
    // (이 변수는 단지 전체 어디서든 사용 가능!)

    void room_A() { // 🏠 A동의 한 호실 (메소드 1)
        int toy_A = 5; // 2️⃣ 지역 변수 (A 호실 안에서만 존재)

        System.out.println("우리는 " + complexName + "에 살고 있어요.");
        System.out.println("내 방에 있는 장난감은 " + toy_A + "개!");
        
    } // toy_A는 이 방을 나가는 순간 사라져요.

    void room_B() { // 🏠 B동의 한 호실 (메소드 2)
        System.out.println("옆집도 " + complexName + "에 살고 있죠.");

        // 만약 여기서 toy_A를 사용하려고 한다면?
        // System.out.println(toy_A); 
        // ❌ 에러! toy_A는 A 호실(room_A)에만 있었어요.

        if (true) { // 📦 작은 상자 (블록)
            String snack = "아이스크림"; // 3️⃣ 지역 변수 (이 상자 안에서만 존재)
            System.out.println("상자 안에 " + snack + "이 들어있어요!");
        } // snack 변수는 상자를 닫는 순간 사라져요.
    }
}

🎈 요약

  1. complexName: 아파트 단지 전체 이름이라 A 방, B 방 모두 사용할 수 있는 전역 변수 역할입니다.
  2. toy_A: room_A() 방 안에서만 만든 변수라 room_B()에서는 사용할 수 없는 지역 변수입니다.
  3. snack: if라는 작은 상자 안에서만 만든 변수라, 그 상자를 벗어나면 바로 사라지는 더 작은 지역 변수입니다.

이렇게 자바는 변수들을 클래스(전체)와 메소드/블록(부분)으로 나누어 효율적으로 관리하고, 서로 방해하지 않도록 해주는 것이 바로 범위(Scope)랍니다!

 

덮어쓰기: 메서드 오버라이딩 (Method Overriding)

메서드 오버라이딩은 부모 클래스(Parent Class)로부터 상속받은 메서드의 내용을 자식 클래스(Child Class)에서 새로 정의(덮어쓰기)하는 기능입니다.

쉽게 말해, 아빠(부모)가 하는 행동(메서드)을 아들(자식)이 물려받았지만, 아들의 방식대로 똑같은 행동을 다르게 하는 것입니다.

🔑 오버라이딩의 필수 조건

메서드 오버라이딩이 성립하려면 다음 세 가지 조건을 모두 만족해야 합니다.

  1. 메서드 이름이 같아야 합니다.
  2. 매개변수(입력)의 개수, 타입, 순서가 모두 같아야 합니다. (메서드의 시그니처(Signature)가 완전히 같아야 함)
  3. 반환 타입(출력)이 같아야 합니다. (자바 1.5 이후부터는 부모 메서드가 반환하는 타입의 자식 타입까지 허용됨)

💡 핵심: 오버로딩은 메서드를 추가하는 것이고, 오버라이딩은 메서드를 덮어써서 교체하는 것입니다.


📝 오버라이딩 예제: "말하기" 행동

동물 클래스와 이를 상속받은 고양이, 강아지 클래스를 통해 오버라이딩을 살펴볼게요. 모든 동물은 말하다()라는 행동을 가지고 있지만, 각자 다른 소리를 냅니다.

Java
 
// 부모 클래스
class Animal {
    public void 말하다() {
        System.out.println("동물이 울음소리를 냅니다.");
    }
}

// 자식 클래스 1
class Dog extends Animal {
    // 부모의 말하다() 메서드를 덮어쓰기(오버라이딩)
    @Override
    public void 말하다() {
        System.out.println("🐕 멍멍! (강아지가 짖습니다.)");
    }
}

// 자식 클래스 2
class Cat extends Animal {
    // 부모의 말하다() 메서드를 덮어쓰기(오버라이딩)
    @Override
    public void 말하다() {
        System.out.println("🐈 야옹! (고양이가 울어요.)");
    }
}

💻 메서드 실행

각 객체(강아지, 고양이)가 자신의 방식으로 말하다() 메서드를 실행합니다.

Java
 
public class OverridingExample {
    public static void main(String[] args) {
        
        Animal genericAnimal = new Animal();
        Dog myDog = new Dog();
        Cat myCat = new Cat();
        
        genericAnimal.말하다(); // 부모 클래스의 메서드 실행
        myDog.말하다();         // Dog 클래스가 덮어쓴 메서드 실행
        myCat.말하다();         // Cat 클래스가 덮어쓴 메서드 실행
    }
}

💻 결과:

동물이 울음소리를 냅니다.
🐕 멍멍! (강아지가 짖습니다.)
🐈 야옹! (고양이가 울어요.)

🌟 오버라이딩을 사용하는 이유

오버라이딩은 객체 지향 프로그래밍의 핵심 개념인 다형성(Polymorphism)을 구현하는 데 사용됩니다.

  • 다형성 (Polymorphism): 같은 이름의 메서드를 호출하더라도, 어떤 객체(Dog, Cat)인지에 따라 다른 결과(멍멍, 야옹)가 나오는 능력입니다.
  • 재사용 및 맞춤화: 부모 클래스의 기본 기능(뼈대)은 상속받아 재사용하면서, 각 자식 클래스(강아지, 고양이)의 특성에 맞게 기능을 맞춤 설정(Customization)할 수 있습니다.
  • Override: 코드 위에 붙은 Override는 필수는 아니지만, '이 메서드는 오버라이딩된 것이다'라고 컴파일러와 다른 프로그래머에게 알려주는 표시(어노테이션)로, 실수를 줄이는 데 큰 도움이 됩니다.

 

🔄 메서드 오버로딩 (Method Overloading)

메서드 오버로딩이란 자바(Java)에서 하나의 클래스 안에 이름이 같은 메서드를 여러 개 만들 수 있도록 허용하는 기능입니다.

쉽게 말해, 같은 목적(예: '더하기'나 '계산하기')을 가진 도구를 여러 버전으로 만드는 것이라고 생각할 수 있습니다.


🔑 오버로딩의 규칙 (조건)

메서드 오버로딩이 성립하기 위해서는 이름이 같은 메서드들이 반드시 다음 두 가지 조건 중 하나 이상을 만족해야 합니다.

  1. 매개변수의 개수가 달라야 합니다. (가장 흔한 경우)
  2. 매개변수의 타입이 달라야 합니다. (예: 정수 int 대신 실수 double를 사용)
  3. 매개변수의 순서가 달라야 합니다. (타입이 다를 경우에만 해당)

⚠️ 주의: 메서드의 반환 타입($\text{return type}$)만 다르거나,
매개변수 이름만 다른 것은 오버로딩으로 인정되지 않습니다.


📝 오버로딩 예제

계산기 클래스를 만들어 '더하기'라는 이름의 메서드를 여러 버전

Java
 
public class Calculator {

    // 1. 매개변수가 2개인 더하기 (정수 2개 합)
    public int 더하기(int a, int b) {
        System.out.println("정수 2개 더하기 버전 실행");
        return a + b;
    }

    // 2. 매개변수의 '개수'가 다름 (정수 3개 합) -> 오버로딩 성립
    public int 더하기(int a, int b, int c) {
        System.out.println("정수 3개 더하기 버전 실행");
        return a + b + c;
    }

    // 3. 매개변수의 '타입'이 다름 (실수 2개 합) -> 오버로딩 성립
    public double 더하기(double a, double b) {
        System.out.println("실수 2개 더하기 버전 실행");
        return a + b;
    }
}

💻 메서드 호출과 선택

자바는 우리가 메서드를 호출할 때 넘겨주는 인수(Argument)의 개수와 타입을 보고,
어떤 더하기 메서드를 실행할지 자동으로 결정합니다.

Java
 
public static void main(String[] args) {
    Calculator calc = new Calculator();
    
    // ① 인수가 2개의 정수(int)이므로 1번 메서드가 호출됨
    int result1 = calc.더하기(10, 5); 
    
    // ② 인수가 3개의 정수(int)이므로 2번 메서드가 호출됨
    int result2 = calc.더하기(10, 5, 2); 
    
    // ③ 인수가 2개의 실수(double)이므로 3번 메서드가 호출됨
    double result3 = calc.더하기(10.5, 5.2);
    
    /*
    출력 결과:
    정수 2개 더하기 버전 실행
    정수 3개 더하기 버전 실행
    실수 2개 더하기 버전 실행
    */
}

🌟 오버로딩을 사용하는 이유

메서드 오버로딩을 사용하면 프로그래밍을 더 직관적이고 편리하게 만들 수 있습니다.

  1. 일관성 유지: 기능은 같지만 처리하는 데이터가 다를 때, 메서드 이름을 하나로 통일할 수 있습니다. (예: intAdd, doubleAdd 대신 그냥 더하기만 사용)
  2. 가독성 증가: 사용자(프로그래머)가 메서드의 기능(더하기)을 이름만 보고 바로 알 수 있습니다.
  3. 편의성 제공: 어떤 타입이나 개수의 데이터를 넘기든, 프로그래머는 항상 똑같은 이름의 메서드만 호출하면 됩니다.

'Java_language' 카테고리의 다른 글

자바 범위 (Scope)  (0) 2025.11.24
메서드 오버라이딩 (Method Overriding)  (0) 2025.11.24
자바 메서드(Method)  (0) 2025.11.24
반복문 , 배열 (Array) 기타 예제  (0) 2025.11.24
Scanner 일반변수,배열변수 입력받기  (0) 2025.11.24

 

출처 : https://brunch.co.kr/@greembook/101

 

🥄 자바 메서드(Method) 쉽게 이해하기!

메서드는 컴퓨터 프로그래밍에서 **"특정 행동을 수행하도록 미리 만들어 둔 작은 명령어 꾸러미"**예요. 우리가 요리를 할 때 레시피를 보고 단계별로 따라 하는 것처럼, 메서드는 컴퓨터에게 **'이 순서대로 이 일을 해!'**라고 명령하는 도구랍니다.

가장 중요한 장점은, 이 도구를 한 번 만들어두면 필요할 때마다 이름만 불러서 계속 다시 쓸 수 있다는 거예요!


🛠️ 메서드의 종류별 쉬운 예제

메서드를 만들 때 재료(입력)가 필요할 수도 있고, 필요 없을 수도 있어요. 이것을 매개변수라고 부릅니다.

1. 재료가 없는 메서드 (매개변수가 없는 메서드)

이 메서드는 특별한 입력(재료) 없이도 항상 똑같은 일을 수행해요. 마치 버튼을 누르면 정해진 대로 노래를 틀어주는 자동 재생 장치 같아요.

📝 예제: "아침 인사 메서드"

구성 요소 설명
이름 아침인사()
입력 (매개변수) 없음 (항상 똑같은 인사를 할 거예요)
행동 "안녕하세요!"를 화면에 출력
Java
 
public class MethodExample {
    
    // 1. 재료가 없는 메서드 정의 (만들기)
    public static void 아침인사() {
        // 이 메서드를 부르면, 항상 이 행동을 해요.
        System.out.println("☀️ 안녕하세요! 좋은 아침입니다."); 
    }
    
    // 메인 프로그램
    public static void main(String[] args) {
        
        // 2. 메서드 사용 (호출)
        System.out.println("오늘은 즐거운 월요일!");
        아침인사(); // ① 메서드 사용
        아침인사(); // ② 또 사용! 재료 없이도 잘 동작해요.
    }
}

💻 결과:

오늘은 즐거운 월요일!
☀️ 안녕하세요! 좋은 아침입니다.
☀️ 안녕하세요! 좋은 아침입니다.

2. 재료가 있는 메서드 (매개변수가 있는 메서드)

이 메서드는 일을 할 때 **필요한 재료(매개변수)**를 받아야 해요. 마치 믹서기에 **어떤 과일(재료)**을 넣을지 결정해야 주스가 만들어지는 것과 같아요.

📝 예제: "이름 부르기 메서드"

구성 요소 설명
이름 이름불러주기()
입력 (매개변수) String 이름 (누구를 부를지 알려줘야 해요)
행동 받은 이름을 사용해서 문장을 만들어 출력
Java
 
public class MethodExample2 {
    
    // 1. 재료(매개변수)가 있는 메서드 정의 (만들기)
    // String 이름: 메서드가 사용할 재료(입력)입니다.
    public static void 이름불러주기(String 이름) {
        System.out.println(이름 + "야! 밥 먹으러 오렴!"); 
    }
    
    // 메인 프로그램
    public static void main(String[] args) {
        
        // 2. 메서드 사용 (호출): 사용할 때 꼭 재료를 넣어줘야 해요!
        이름불러주기("민지"); // ① 재료로 "민지"를 넣음
        이름불러주기("철수"); // ② 재료로 "철수"를 넣음
        이름불러주기("선생님"); // ③ 재료로 "선생님"을 넣음
    }
}

💻 결과:

민지야! 밥 먹으러 오렴!
철수야! 밥 먹으러 오렴!
선생님이야! 밥 먹으러 오렴!

➡️ 매개변수는 메서드가 더 다양하고 유용한 일을 할 수 있도록 해주는 입력 재료라고 생각하면 됩니다!

+ Recent posts