컴퓨터공학 💻 도서관📚

Part2. 2-7 생성자 오버로딩 (with. 파인만 기법 + 문제출제) 본문

✅🌲강의 복습 노트/패캠 JavaSpring 강의,코드 복습

Part2. 2-7 생성자 오버로딩 (with. 파인만 기법 + 문제출제)

들판속초록풀 2024. 3. 4. 19:27

생성자 오버로딩 :  여러 가지 생성자를 '같이' 정의하는 것

 

메서드 오버로딩도 가능하다

 

public class UserInfo {

	public String userId;            // 멤버변수: 객체의 특성
	public String userPassWord;
	public String userName;
	public String userAddress;
	public String phoneNumber;
	
    
   // 생성자 오버로딩
    
	public UserInfo(){}    // 기본 생성자
	
	public UserInfo(String userId, String userPassWord, String userName) {    // 생성자
		this.userId = userId;
		this.userPassWord = userPassWord;
		this.userName = userName;
	}
	
	public String showUserInfo() {
		return "고객님의 아이디는 " + userId + "이고, 등록된 이름은 " + userName + "입니다."; 
	}
}

 

 

[ 문제 :  여러 가지 생성자를 같이 정의하는 것을 뭐라고 부르는가? ]

 


 

응, 자바에서는 둘 다 가능해.
👉 메서드 오버로딩 O / 생성자 오버로딩 O

다만 규칙은 똑같고, 몇 가지 주의점이 있어.


1️⃣ 메서드 오버로딩 (Method Overloading)

같은 이름의 메서드를 여러 개 정의하는 것

✅ 조건

  • 메서드 이름 같아야 함
  • 매개변수 목록이 달라야 함
    • 개수 다름
    • 타입 다름
    • 순서 다름

리턴 타입만 다른 건 안 됨

예시

class Calculator {

    int add(int a, int b) {
        return a + b;
    }

    double add(double a, double b) {
        return a + b;
    }

    int add(int a, int b, int c) {
        return a + b + c;
    }
}

2️⃣ 생성자 오버로딩 (Constructor Overloading)

매개변수가 다른 생성자를 여러 개 정의하는 것

예시

class Person {
    String name;
    int age;

    // 기본 생성자
    Person() {
        this("이름없음", 0);
    }

    // 생성자 1
    Person(String name) {
        this(name, 0);
    }

    // 생성자 2
    Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
}

👉 this(...)로 다른 생성자 호출도 가능
⚠️ 단, 생성자 안에서 첫 줄에만 가능


3️⃣ 메서드 vs 생성자 오버로딩 차이

구분메서드 오버로딩생성자 오버로딩

이름 같음 클래스명과 같음
리턴 타입 있음 없음
호출 시점 객체 생성 후 객체 생성 시
목적 기능 다양화 객체 초기화 다양화

4️⃣ 헷갈리기 쉬운 포인트 ⚠️

int test(int a) {}
double test(int a) {}   // ❌ 컴파일 에러

👉 리턴 타입만 다르면 오버로딩 아님

void test(int a) {}
void test(Integer a) {} // ⭕ 가능 (타입 다름)

✅ 한 줄 요약

  • 자바는 메서드 오버로딩 가능
  • 자바는 생성자 오버로딩도 가능
  • 차이는 매개변수, 리턴 타입은 기준 아님

원하면
👉 오버로딩 vs 오버라이딩 차이
👉 실제 컴파일러가 어떤 메서드를 고르는지(바인딩)
도 같이 설명해줄게.

Comments