생성자를 여러 개 만들면 다양한 방식으로 인스턴스를 생성할 수 있습니다. 이러한 것을 생성자 오버 로딩이라고 하는데요. 생성자 오버 로딩에 도 주의할 점이 있습니다. 강의에서 확인해보죠
ㅤ
여러개의 생성자를 선언하는 것을 생성자 오버로딩이라고 합니다.
class Person {
String name;
int age;
String gender;
Person(String name) {
this.name = name;
}
Person(int age) {
this.age = age;
}
Person(String name, int age) {
this.name = name;
this.age = age;
}
}
Person person1 = new Person("이름", 1);
Person person2 = new Person("이름");
Person person3 = new Person(1);
다만 생성자를 오버로딩 할 때 주의할 점이 있습니다.
같은 자료형의 매개변수로 생성자를 선언하여 오버로딩 할 수 없습니다.
class Person {
String name;
int age;
String gender;
// 같은 자료형의 매개변수로 오버로딩 할 수 없다.
Person(String name, int age) {
this.name = name;
this.age = age;
}
// 같은 자료형의 매개변수로 오버로딩 할 수 없다.
Person(String gender, int age) {
this.gender = gender;
this.age = age;
}
}
Person person = new Person("a", 1);
이유는 간단합니다. new Person(“a”);
은 Person(String name, int age)
을 호출해야 할 지 Person(String gender, int age)
를 호출해야 할 지 알 수 없기 때문입니다. 인간도 알 수 없고 컴퓨터도 알 수 없습니다.
ㅤ
this()
는 클래스 내부에서 자기 자신의 생성자를 호출 하는 방식으로 생성자 내부에서만 사용할 수 있는 명령어입니다.
일반적으론 이렇게 생성자를 선언하여 인스턴스를 생성할 수 있는데요. 코드 중복을 줄이기 위해 이렇게 사용할 수도 있습니다.
인스턴스 생성 명령어가 실행되면 생성자 내부에서 오버로딩된 생성자를 호출하여 데이터를 초기화 할 수 있습니다. 이러한 방식은 this() 명령어에 넣는 인자에 의해서 어떤 생성자를 호출할지 정해집니다.
this(name)
이란 것은 String
자료형 매개변수인 생성자를 호출하는 명령어이고, this(name, age)
는 String
, int
자료형 매개변수인 생성자를 호출하는 명령어입니다.
ㅤ
ㅤ
코드 작성(Person.java)
class Person {
String name;
int age;
String gender;
Person(String name) {
this.name = name;
}
Person(String name, int age) {
this(name);
this.age = age;
}
Person(String name, int age, String gender) {
this(name, age);
this.gender = gender;
}
}
코드 작성(Main.java)
public class Main {
public static void main(String[] args) {
Person person1 = new Person("김철수", 20, "male");
System.out.println(person1.name);
System.out.println(person1.age);
System.out.println(person1.gender);
Person person2 = new Person("김안나", 25);
System.out.println(person2.name);
System.out.println(person2.age);
System.out.println(person2.gender);
}
}
출력
김철수
20
male
김안나
25
null
실습해보세요의 코드를 작성해보세요.
생성자를 여러 개 만들면 다양한 방식으로 인스턴스를 생성할 수 있습니다. 이러한 것을 생성자 오버 로딩이라고 하는데요. 생성자 오버 로딩에 도 주의할 점이 있습니다. 강의에서 확인해보죠
ㅤ
여러개의 생성자를 선언하는 것을 생성자 오버로딩이라고 합니다.
class Person {
String name;
int age;
String gender;
Person(String name) {
this.name = name;
}
Person(int age) {
this.age = age;
}
Person(String name, int age) {
this.name = name;
this.age = age;
}
}
Person person1 = new Person("이름", 1);
Person person2 = new Person("이름");
Person person3 = new Person(1);
다만 생성자를 오버로딩 할 때 주의할 점이 있습니다.
같은 자료형의 매개변수로 생성자를 선언하여 오버로딩 할 수 없습니다.
class Person {
String name;
int age;
String gender;
// 같은 자료형의 매개변수로 오버로딩 할 수 없다.
Person(String name, int age) {
this.name = name;
this.age = age;
}
// 같은 자료형의 매개변수로 오버로딩 할 수 없다.
Person(String gender, int age) {
this.gender = gender;
this.age = age;
}
}
Person person = new Person("a", 1);
이유는 간단합니다. new Person(“a”);
은 Person(String name, int age)
을 호출해야 할 지 Person(String gender, int age)
를 호출해야 할 지 알 수 없기 때문입니다. 인간도 알 수 없고 컴퓨터도 알 수 없습니다.
ㅤ
this()
는 클래스 내부에서 자기 자신의 생성자를 호출 하는 방식으로 생성자 내부에서만 사용할 수 있는 명령어입니다.
일반적으론 이렇게 생성자를 선언하여 인스턴스를 생성할 수 있는데요. 코드 중복을 줄이기 위해 이렇게 사용할 수도 있습니다.
인스턴스 생성 명령어가 실행되면 생성자 내부에서 오버로딩된 생성자를 호출하여 데이터를 초기화 할 수 있습니다. 이러한 방식은 this() 명령어에 넣는 인자에 의해서 어떤 생성자를 호출할지 정해집니다.
this(name)
이란 것은 String
자료형 매개변수인 생성자를 호출하는 명령어이고, this(name, age)
는 String
, int
자료형 매개변수인 생성자를 호출하는 명령어입니다.
ㅤ
ㅤ
코드 작성(Person.java)
class Person {
String name;
int age;
String gender;
Person(String name) {
this.name = name;
}
Person(String name, int age) {
this(name);
this.age = age;
}
Person(String name, int age, String gender) {
this(name, age);
this.gender = gender;
}
}
코드 작성(Main.java)
public class Main {
public static void main(String[] args) {
Person person1 = new Person("김철수", 20, "male");
System.out.println(person1.name);
System.out.println(person1.age);
System.out.println(person1.gender);
Person person2 = new Person("김안나", 25);
System.out.println(person2.name);
System.out.println(person2.age);
System.out.println(person2.gender);
}
}
출력
김철수
20
male
김안나
25
null
실습해보세요의 코드를 작성해보세요.