생성자와 생성자 오버로딩에 대하여 알아보도록 하겠습니다.
생성자(constructor)
- 객체를 생성할 때(인스턴스를 만들 때) new 키워드와 함께 호출합니다. 다른 메서드들이 언제든 불러서 사용할 수 있는 것과는 다르게 객체를 생성할 때 만 사용할 수 있습니다.
- 생성자는 인스턴스를 생성할 때 멤버 변수를 초기화 하는 코드가 주를 이루어 구현되어 있습니다.
- 일반 메서드와 다르게 반환 값이 없고 상속이 되지 않습니다.(상속은 뒤에 더 자세히 배워보겠습니다.)
- 생성자는 클래의 이름과 항상 동일해야 합니다. ex) Studnt clas의 생성자명은 Student
기본 생성자(default constructor).
public class Student {
public int studentID;
public String studentName;
public String address;
// public Student() {}
public void showStudentInfo(){
System.out.println(studentName +","+ address);
}
public String getStudentName() {
return studentName;
}
}
- 하나의 클래스에는 반드시 하나 이상의 생성자가 존재해야 하는데 위 코드와 같이 프로그래머가 생성자를 구현하지 않을 경우 컴파일러가 'public 클래스명() {}' 과 같은 기본 생성자를 자동으로 생성하게 됩니다.
- 기본 생성자를 더 자세히 살펴보면 public Student() {} 에서 생성자명은 반드시 클래스명과 같고 ()안에 들어가는 매개변수와 {}안에 들어가는 구현부(body)가 없습니다. 그래서 클래스에 생성자를 작성하지 않고 인스턴스를 생성 할시 'class명 참조변수 = new class명()'으로 참조변수를 비운채 생성하는 것 입니다.
- 만약 클래스안에 다른 생성자가 있을 경우 기본 생성자는 제공되지 않습니다. 만약 기본생성자를 사용하고 싶다면 다른 생성자와 함께 기본생성자도 작성해주면 사용할 수 있습니다.
public class Student {
public int studentID;
public String studentName;
public String address;
//생성자1 구현
public Student(String name) {
studentName = name;
}
//생성자2 구현
public Student(int id, String name) {
studentID = id;
studentName = name;
address = "주소 없음"; // 안쓸시 기본값은 null
}
public void showStudentInfo(){
System.out.println(studentName +","+ address);
}
public String getStudentName() {
return studentName;
}
}
- 초기화할 멤버변수가 있다면 기본변수를 생성하지 않고 생성자1과 2 처럼 매개변수와 구현부를 작성하여 생성자를 작성하면 됩니다.
public class StudentTest {
public static void main(String[] args) {
Student studentLee = new Student("이순신"); //생성자1 사용
//studentLee.studentName ="이순신";
studentLee.address = "서울";
studentLee.showStudentInfo();//결과값 이순신,서울
Student studentKim = new Student(1234,"김유신"); //생성자2 사용
//studentKim.studentName ="김유신";
//studentKim.address = "경주";
studentKim.showStudentInfo();//결과값 김유신,주소 없음
}
}
- 생성자를 클래스에서 만든다면 인스턴스를 생성할 때는 사용하고자 하는 생성자의 매개변수를 입력하여 사용하면 됩니다.
- studentLee의 경우 생성자1을 사용하기위해 name만 입력하고 studentKim의 경우는 생성자2를 사용하기 위해 id와 naem 두개 입력해 줍니다.
- 생성자2에서 주소를 "주소 없음"으로 초기화 해두었기 때문에 studetKim에 주소를 입력하지 않아도 초기화 값이 출력되는 것을 확인할 수 있습니다.
생성자 오버로딩(constuctor overloading)]
- 생성자 오버로딩은 위에 Student 클래스처럼 클래스안에서 다른 매개변수를 가지는 두개 이상의 생성자를 구현하는 경우를 뜻합니다.
- public int studentID라는 멤버변수를 private int studentID으로 바꾸면 현재 클래스 내에서만 사용한다는 뜻으로 다른 클래스에서 참조변수를 통해 호출하려고해도 참조목록에 안뜨게 됩니다. 이런 경우에도 생성자에서는 멤버변수를 구현하여 초기화 할 수 있기때문에 private변수를 초기화하는 용도로 생성자가 활용되게 됩니다.
- 구현된 생성자 중에 사용자가 선택해서 사용할 수 있기 때문에 여러개를 구현해두면 사용자 입장에서 상황에 맞게 활용할 수 있어 편의성이 증가합니다.
'Java' 카테고리의 다른 글
[Java] 클래스와 객체 - 정보 은닉 (0) | 2020.07.10 |
---|---|
[Java] 클래스와 객체 - 참조 자료형 (0) | 2020.07.10 |
[Java] 클래스와 객체 - 예제(1) (0) | 2020.07.10 |
[Java] 클래스와 객체 - 인스턴스, 힙 메모리 (0) | 2020.07.09 |
[Java] 클래스와 객체 - 함수와 메서드 (0) | 2020.07.09 |