Java 생성자(Constructor), 메서드 오버로딩(Method Overloading), 가변인자(Varargs) 정리

My Pale Blue Dot·2025년 3월 4일
0

JAVA

목록 보기
12/35
post-thumbnail

📅 날짜

2025-03-04

📝 학습 내용


📌 생성자(Constructor)란?

생성자(Constructor)객체가 생성될 때 자동으로 호출되는 특수한 메서드이다.

생성자의 특징

  1. 클래스 이름과 동일한 이름을 가져야 한다.
  2. 반환 타입이 없다. (void도 작성하지 않음!)
  3. 객체를 초기화하는 역할을 한다.
  4. 생성자는 한 번만 호출되며, 객체가 생성될 때 실행된다.
  5. 사용자가 생성자를 명시하지 않으면, 컴파일러가 자동으로 "디폴트 생성자"를 추가한다.
  6. 생성자 오버로딩이 가능하다. (매개변수를 다르게 설정하여 여러 생성자를 정의 가능)

디폴트 생성자(Default Constructor)

class Person {
    String name;
    int age;

    // 디폴트 생성자 (매개변수 없음)
    Person() {
        System.out.println("Person() 생성자 호출!");
        this.name = "이름 없음";
        this.age = 0;
    }
}

public class Main {
    public static void main(String[] args) {
        Person p = new Person(); // 디폴트 생성자 호출
        System.out.println("이름: " + p.name + ", 나이: " + p.age);
    }
}

🔹 출력 결과

Person() 생성자 호출!
이름: 이름 없음, 나이: 0

생성자 오버로딩(Constructor Overloading)

class Car {
    String model;
    int year;

    // 생성자 1 (디폴트 생성자)
    Car() {
        this.model = "기본 모델";
        this.year = 2020;
    }

    // 생성자 2 (매개변수 1개)
    Car(String model) {
        this.model = model;
        this.year = 2022;
    }

    // 생성자 3 (매개변수 2개)
    Car(String model, int year) {
        this.model = model;
        this.year = year;
    }

    void showInfo() {
        System.out.println("모델: " + model + ", 연식: " + year);
    }
}

public class Main {
    public static void main(String[] args) {
        Car car1 = new Car();
        Car car2 = new Car("Tesla");
        Car car3 = new Car("BMW", 2023);

        car1.showInfo();
        car2.showInfo();
        car3.showInfo();
    }
}

🔹 출력 결과

모델: 기본 모델, 연식: 2020
모델: Tesla, 연식: 2022
모델: BMW, 연식: 2023

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

메서드 오버로딩같은 이름의 메서드를 매개변수의 개수나 타입에 따라 다르게 정의하는 기법이다.

오버로딩의 조건

  1. 메서드 이름은 같아야 한다.
  2. 매개변수의 개수 또는 타입이 달라야 한다.
  3. 반환 타입만 다르면 오버로딩이 적용되지 않는다.

메서드 오버로딩 예제

class OverloadingExample {
    // 2개의 정수를 더하는 메서드
    int sum(int x, int y) {
        return x + y;
    }

    // 3개의 정수를 더하는 메서드
    int sum(int x, int y, int z) {
        return x + y + z;
    }

    // 3개의 실수를 더하는 메서드 (double 타입)
    double sum(double x, double y, double z) {
        return x + y + z;
    }
}

public class Main {
    public static void main(String[] args) {
        OverloadingExample obj = new OverloadingExample();
        System.out.println("sum(10, 20) 결과: " + obj.sum(10, 20));
        System.out.println("sum(10, 20, 30) 결과: " + obj.sum(10, 20, 30));
        System.out.println("sum(10.5, 20.5, 30.5) 결과: " + obj.sum(10.5, 20.5, 30.5));
    }
}

🔹 출력 결과

sum(10, 20) 결과: 30
sum(10, 20, 30) 결과: 60
sum(10.5, 20.5, 30.5) 결과: 61.5

📌 가변인자(Varargs)란?

가변인자(Varargs)매개변수 개수가 정해지지 않은 경우 사용한다.

가변인자의 특징

  1. int... argarg배열처럼 동작함 (int[] arg와 동일)
  2. 한 개의 메서드로 다양한 개수의 매개변수를 처리 가능
  3. 가변인자는 항상 마지막 매개변수로 선언해야 함

가변인자(Varargs) 예제

import java.util.Arrays;

class VarargsExample {
    int sum(int... numbers) {  
        System.out.println("입력된 값: " + Arrays.toString(numbers)); // 가변인자 배열 출력
        int result = 0;
        for (int num : numbers) {        
            result += num;
        }
        return result;
    }
}

public class Main {
    public static void main(String[] args) {
        VarargsExample obj = new VarargsExample();
        System.out.println("결과: " + obj.sum(10, 20, 30, 40, 50));
        System.out.println("결과: " + obj.sum(10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110));
    }
}

🔥 정리

생성자는 객체가 생성될 때 한 번만 호출되며, 객체 초기화를 수행한다.
디폴트 생성자는 클래스 내에 생성자를 명시하지 않으면 자동으로 추가된다.
생성자 오버로딩을 사용하면 다양한 방식으로 객체를 생성할 수 있다.
메서드 오버로딩은 같은 이름의 메서드를 여러 개 정의할 수 있도록 해준다.
가변인자는 int... numbers 와 같이 선언하여 매개변수 개수를 유연하게 처리 가능하다.
가변인자는 항상 마지막 매개변수로 선언해야 한다.


🔗 참고 자료


profile
Here, My Pale Blue.🌏

0개의 댓글