생성자란?
: 객체가 생성될 때 호출되는 특별한 메서드
자바에서 생성자를 사용하는 이유?
객체가 생성될 때 필요한 초기화 작업을 수행하고 특정 상태로 객체를 설정하기 위해서
예 ) 멤버변수로 이름, 학번, 학과를 가진 객체를 만든다고 했을 때
- 생성자 없이 만들경우
class MyInfo_01 {
public String name;
public int number;
public String dept;
}
public class ConstructorTest_01 {
public static void main(String[] args) {
// MyInfo_01 클래스 형인 객체 my 생성
MyInfo_01 my = new MyInfo_01();
// 생성된 객체에 초기값 부여하는 방법 1
my.name = "소유진";
my.number = 20003324;
my.dept = "소프트웨어학과";
}
}
- 생성자를 사용해서 초기화하는 경우
class MyInfo_02 {
public String name;
public int number;
public String dept;
// 생성자 정의
public MyInfo_02(String s, int i, String d) {
name = s;
number = i;
dept = d;
}
}
public class ConstructorTest_02 {
public static void main(String[] args) { // 메인 메서드
// MyInfo_02 클래스형인 객체를 생성하면서 값을 같이 전달
MyInfo_02 my = new MyInfo_02("소유진",20003324,"소프트웨어학과");
}
}
생성자를 사용하면 객체가 미완성된 상태로 생성되는 문제를 방지하고 안전하게 초기화할 수 있다.
생성자 특징
- 생성자는 클래스 이름과 동일한 이름을 가진다.
- 생성자는 반환값이 없으며 반환 타입도 명시하지 않는다.
- 객체가 생성될 때 new 키워드에 의해 자동으로 호출된다.
- 매개변수를 받아 객체의 초기값을 설정할 수 있다.
- 생성자를 명시하지 않으면 컴파일러가 자동으로 기본 생성자를 제공한다. (생성자를 정의하면 기본 생성자가 자동으로 생성되지 않는다.)
- 하나의 클래스에 여러 개의 생성자를 정의할 수 있다. (생성자 오버로딩)
생성자 중복(오버로딩)
: 하나의 클래스 안에서 여러 개의 생성자를 정의하는 것
같은 이름의 생성자를 서로 다른 매개변수 목록으로 여러 번 정의하는 것이다.
class MyInfo_04 {
public String name;
public int age;
public String dept;
public int degree;
// 생성자 중복
public MyInfo_04() {
name = "윤아";
age = 35;
dept = "소녀시대";
degree = 3;
}
public MyInfo_04(int age, String dept, int degree) {
this.name = "유리";
this.age = age;
this.dept = dept;
this.degree = degree;
}
public MyInfo_04(String name, int age, String dept, int degree) {
this.name = name;
this.age = age;
this.dept = dept;
this.degree = degree;
}
}
public class ConstOverLoadingTest_01 {
public static void main(String[] args) {
// 생성자만 호출하는경우
MyInfo_04 myInfo = new MyInfo_04();
// 생성자를 호출하면서 인수 3개 넘기기
MyInfo_04 myInfo3 = new MyInfo_04(25,"안녕",4);
// 4개 넘기기
MyInfo_04 myInfo4 = new MyInfo_04("효연", 36, "댄스",4);
}
}
생성자 오버로딩의 장점
- 생성자 오버로딩을 통해 다양한 방법으로 객체를 유연하게 생성할 수 있다.
- 필요에 따라 값을 덜 전달하거나 더 전달할 수 있어서 객체를 초기화 하는 방법이 다양해진다.
- 필요한 정보만으로 객체를 생성할 수 있으며 필수 값과 선택적 값을 구분하여 더 안정적인 객체 생성을 보장할 수 있다.
'JAVA > 기초공부' 카테고리의 다른 글
[JAVA] String 클래스 (1) | 2024.09.29 |
---|---|
[JAVA] this와 this() 메소드 (0) | 2024.09.28 |
[JAVA 기초] 클래스 정의 및 객체 생성 (1) | 2024.09.25 |
[JAVA기초] 객체와 클래스의 개념 (4) | 2024.09.25 |
[JAVA기초] 연산자 - 할당, 산술, 단항, 관계, 논리, 조건, 복합할당 (1) | 2024.09.18 |