All About IT
[Java 기초] 생성자는 언제 어떻게 사용할까?
안녕하세요~
벌써 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 메소드로 출력하려고 합니다.
![](/upload/editor_new/8585114861tmpphpwMwdFT.png)
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 ) 가 각각 저장되어 출력되는 것을 확인할 수 있습니다.
꼭 봐야되는 마무리 꿀팁!
- 매개변수가 있는 생성자가 있을 때는 무조건 기본생성자 만들어놓기!
- 기술면접에서 단골질문으로 나오는 오버로딩 개념 확실히 익히고 외워두기!
▲영상으로 한번 더 복습하세요 :)