자바
생성자 오버로딩
긴가우딘
2024. 6. 27. 16:30
예전에 손코딩 시험을 보던 중 오버로딩 문제가 나왔다
public class Main {
public static void main(String[] args) {
School school1 = new School();
school1.printInfo();
School school2 = new School("홍길동");
school2.printInfo();
School school3 = new School("홍길동", 15);
school3.printInfo();
}
}
자세히 기억은 안나지만 이런 종류의 문제였는데
School 클래스를 직접 적는 문제였다
처음 봤을 때 쉽다고 생각했는데
손코딩을 준비해본 적이 없고 정처기 공부하면서 준비되어 있는 문제를 풀기나 할 수 있었지 직접 적으려니 이게 맞나 저게 맞나 하면서
class School {
String name;
int age;
public School(String name, int age) {
this.name = name;
this.age = age;
}
}
이런 식으로 요거 하나 달랑 적었었다
심지어 이것도 gpt 도움으로 예제 만든 것이지 이렇게 this 키워드 적어가면서 하지도 않았던 것 같다(문제가 제대로 기억이 안난다만..)
그리고 오버로딩도 메소드 오버로딩만 알고 있었지 생성자 오버로딩은 알지 못했다
class School {
String name;
int age;
// 매개변수가 없는 기본 생성자
public School() {
this.name = "이름 없음";
this.age = 0;
}
// 이름을 받는 생성자
public School(String name) {
this.name = name;
this.age = 0;
}
// 이름과 나이를 받는 생성자
public School(String name, int age) {
this.name = name;
this.age = age;
}
// 학생 정보를 출력하는 메소드
public void printInfo() {
System.out.println("이름: " + this.name + ", 나이: " + this.age);
}
}
public class Main {
public static void main(String[] args) {
// 기본 생성자를 사용한 객체 생성
School school1 = new School();
school1.printInfo(); // 출력: 이름: 이름 없음, 나이: 0
// 이름만 받는 생성자를 사용한 객체 생성
School school2 = new School("홍길동");
school2.printInfo(); // 출력: 이름: 홍길동, 나이: 0
// 이름과 나이를 받는 생성자를 사용한 객체 생성
School school3 = new School("홍길동", 15);
school3.printInfo(); // 출력: 이름: 홍길동, 나이: 15
}
}
생성자 오버로딩을 통해 객체를 만들 때 다양한 초기화 방법을 제공할 수 있고,
객체를 생성할 때 필요한 정보를 유연하게 설정할 수 있다
또 코드의 가독성과 일관성도 높일 수 있다
이러한 장점이 있다 한들 왜 생성자를 이렇게 여러개 만드는 걸까?
메소드를 여러개 만드는 대신 생성자 오버로딩을 사용하면, 중복되는 코드를 줄일 수 있다고 한다
예를 들어, setName, setAge 등의 메소드를 각각 호출해야 한다면 그 만큼의 코드가 중복되고 관리해야 할 메소드도 많아지게 된다
class School {
String name;
int age;
// 기본 생성자
public School() {
this.name = "이름 없음";
this.age = 0;
}
// 이름 설정 메소드
public void setName(String name) {
this.name = name;
}
// 나이 설정 메소드
public void setAge(int age) {
this.age = age;
}
// 학생 정보를 출력하는 메소드
public void printInfo() {
System.out.println("이름: " + this.name + ", 나이: " + this.age);
}
}
public class Main {
public static void main(String[] args) {
School school1 = new School();
school1.setName("홍길동");
school1.setAge(15);
school1.printInfo(); // 출력: 이름: 홍길동, 나이: 15
School school2 = new School();
school2.setName("이몽룡");
school2.printInfo(); // 출력: 이름: 이몽룡, 나이: 0
School school3 = new School();
school3.printInfo(); // 출력: 이름: 이름 없음, 나이: 0
}
}
메인 클래스에서 출력 방식이 더 간결해지는 것처럼 보이긴 하다