개발 무지렁이

[Java] 생성자와 오버로딩(Overloading) 본문

Backend/자바

[Java] 생성자와 오버로딩(Overloading)

Gaejirang-e 2023. 3. 12. 16:26

오버로딩(Overloading)


하나의 클래스 내부이름이 같은 method가 여러개 있는 것
(단, parameter 타입이나 개수가 달라야한다, 이에 따라 호출되어지는 함수가 다르다)

Why?
호출하기가 편하다, 사용자 편리성

💡 대표적인 오버로딩
System.out.println();

인자의 개수가 다르거나 타입이 다르다, overloading
- System.out.println();
- System.out.println('A');
- System.out.println(4);
- System.out.println("안녕");

println은 인자가 0개나 1개 들어오도록(2개이상x) 오버로딩 되어 있다.
그래서, 우리가 println으로 출력할때 인자를 문자열 연결 연산자 + 를 이용해서
하나의 인수로 만들어 출력한다.

생성자(Constructor)


객체생성 시점(new)에, 딱 한 번, 자동호출되어 데이터 초기화 작업을 한다 (속성관리)
modifier className() { // return type을 명시x
    // 생성자 구현부
}

⚠️ 생성자를 따로 작성하지 않으면 Default 생성자(인수없는 생성자)가 자동으로 만들어진다.
  (모든 객체는 한개 이상의 생성자를 가진다.)

오버로딩된 생성자


⚠️ 객체 생성시, 모든 오버로딩된 생성자가 메모리에 올라간다

❓ 생성자 오버로딩이 왜 필요할까?
:'초기화하는 값(인수)'가 다를 수 있기 때문에

같은 클래스 내 다른 생성자 호출


this(인수, ...);
⚠️ 생성자 구현부 첫째줄에서만 가능 => 하나의 생성자 안에서 한번만 호출 가능하다.

class Student {
    String name;
    int age;
    String addr;

    Student() { } // class Access modifier를 따른다
    Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    // 생성자 오버로딩
    Student(String name, int age, String addr) { // 데이터 초기화
        this(name, age); // 같은 클래스 내 다른 생성자 호출
        this.addr = addr;
    }
}
public class ConstructorCallTest {
    public static void main(String[] args) {
        Student s1 = new Student("이몽룡", 18); // 객체가 생성되는 시점(new)에 생성자 딱 한 번 호출
        System.out.println("이름: " + s1.name); // 이름: 이몽룡
        System.out.println("나이: " + s1.age); // 나이: 18
        System.out.println();
        Student s2 = new Student("홍길동", 19, "옛날 어느 마을"); // 넘겨지는 인수의 개수나 타입이 다를 수 있다, overloading 필요
        System.out.println("이름: " + s2.name); // 이름: 홍길동
        System.out.println("나이: " + s2.age); // 나이: 19
        System.out.println("주소: " + s2.addr); // 주소: 옛날 어느 마을
    }
}
Comments