안녕하세요~ 

벌써 3번째 시간이네요. 저를 많이 기다리셨나요? 그럴거라고 믿습니다..

오늘은 생성자에 대해 알아봅시다!

매개변수의 개수가 다양한 생성자 - 생성자 오버로딩

class Animal {
	String name;
	int legs;
	
	Animal(String name, int legs){
		this.name = name;
		this.legs = legs;
	}
	void print() {
		System.out.println(name+"의 다리 수는 "+legs+"개 입니다.");
	}
}

public class Main {	
	public static void main(String[] args) {
		Animal a = new Animal();
		Animal b = new Animal("강아지");
		Animal c = new Animal("강아지", 4);
		a.print();
		b.print();
		c.print();	
	}	
}

 Animal 객체를 생성하고 name 변수에 "강아지", legs 변수에 4를 저장하고 print 메소드로 출력하려고 합니다.

 

 Animal 객체를 3개 생성했는데 2개가 오류가 나네요..

생성자에 대한 규칙을 읽어볼까요?

오늘의 핵심 키워드
1.  생성자는 객체 생성( 클래스타입 변수이름 = new 생성자; )을 할 때 실행된다. 따라서, 메소드처럼 매개변수의 타입과 개수가 일치해야한다.
2. 기본 생성자( 클래스이름 ( ) { } ; )는 기본적으로 생성되지만 매개변수가 존재하는 생성자가 있을 때는 직접 작성해야한다. 

class Animal {
	String name;
	int legs;
	
	Animal(){
		
	}
	Animal(String name){
		this.name = name;
	}
	Animal(String name, int legs){
		this.name = name;
		this.legs = legs;
	}
	void print() {
		System.out.println(name+"의 다리 수는 "+legs+"개 입니다.");
	}
}

public class Main {	
	public static void main(String[] args) {
		Animal a = new Animal();
		Animal b = new Animal("강아지");
		Animal c = new Animal("강아지", 4);
		a.print();
		b.print();
		c.print();	
	}	
}

 

1번 규칙에 따라서 String 변수 name 하나만 받는 생성자를 만들었고, 2번 규칙에 따라서 기본생성자도 만들었습니다.

여기서 잠깐 ! !

오버로딩(Overloading)이란?

①자바의 한 클래스 내에 이미 사용하려는 이름과 

②같은 이름을 가진 메소드가 있더라도 

③매개변수의 개수 또는 타입이 다르면, 

같은 이름을 사용해서 메소드를 정의할 수 있다.

class Animal {

	Animal(){
		
	}
	Animal(String name){
		this.name = name;
	}
	Animal(String name, int legs){
		this.name = name;
		this.legs = legs;
	}
	
}

오늘 코드 중에서 생성자 부분만 모아놓은 모습입니다. 

Animal 클래스 내에서 같은 이름인 Animal 생성자를 3개나 정의했는데 매개변수의 개수와 타입이 달라 오류가 나지 않는 것을 확인할 수 있습니다.

이클립스 실행화면

 아무것도 입력하지 않은 a 객체 = ( null, 0 ),

이름만 입력한 b 객체 = ( "강아지", 0 ),

이름, 다리 수 모두 입력한 c 객체 = ( "강아지", 4 ) 가 각각 저장되어 출력되는 것을 확인할 수 있습니다.

꼭 봐야되는 마무리 꿀팁!

  • 매개변수가 있는 생성자가 있을 때는 무조건 기본생성자 만들어놓기!
  • 기술면접에서 단골질문으로 나오는 오버로딩 개념 확실히 익히고 외워두기!

▲영상으로 한번 더 복습하세요 :)