1. 생성자(Constructor) 란?
1) 개념
객체를 생성할 때 new 키워드를 사용하게 되는데 이때 생성자를 호출하게 된다.
객체 생성할 경우 이외에는 호출할 수 없고, 멤버 변수 초기화 등 인스턴스를 초기화 하는 코드가 구현된다.
생성자 이름은 클래스 이름과 동일하고 반환 값이 없으며 상속되지 않는다.
private 변수는 다른 클래스 에서는 호출할 수 없지만 생성자를 호출할 경우 초기화가 가능하다.
1.1) Student.java
Student 클래스의 생성자를 생성하고 매개 변수로 학번과 이름을 받아온다고 가정했을 때 다음과 같다. (생성자 정의)
public class Student {
public int studentID; //학번
public String studentName; //이름
public String address; //주소
public Student(int id, String name) { //생성자 생성
studentID = id;
studentName = name;
}
}
1.2) StudentTest.java
인스턴스를 호출 할 때 매개 변수에 해당하는 값을 넣어준다. (생성자 호출)
주소 변수는 입력되지 않았기 때문에 인스턴스 생성 시 자동으로 Null 값이 들어간다.
public class StudentTest {
public static void main(String[] args) {
Student studentPark = new Student(1234,"피망"); //Park 객체 생성
//Park 객체에 대한 메서드 출력
studentPark.showStudentInfo();
}
}
1.3) 출력 결과
2) 기본 생성자(default constructor)
하나의 클래스에는 반드시 하나 이상의 생성자가 존재해야 한다.
프로그래머가 생성자를 구현하지 않을 경우, 컴파일러가 자동으로 생성자 코드를 넣어준다.
다른 생성자가 있는 경우 기본 생성자는 제공되지 않고 기본 생성자는 매개 변수가 없고, 구현부가 존재하지 않다.
위에서 매개 변수를 받는 생성자를 만든 후 main 함수에서 인스턴스를 생성할 때 기본 생성자인 Student()를 호출할 경우 해당 생성자는 만들어지지 않았기 때문에 에러가 발생한다.
public class StudentTest {
public static void main(String[] args) {
Student studentPark = new Student(); //Park 객체 생성 (error 발생)
}
}
2. 생성자 오버로딩(Constructor Overloading) 이란?
1) 개념
학번, 이름을 받는 생성자를 이전에 만들었는데, 해당 생성자가 아닌 학번 또는 이름만 입력 받거나 전부다 입력받는 생성자를 만들고자 할 때 생성자 명은 클래스 명과 동일하기 때문에 매개 변수가 다른 똑같은 이름의 생성자들을 여러개 만들어 줘야 한다.
이처럼 생성자를 두 개 이상 구현하는 경우를 생성자 오버로딩이라고 부른다.
1.1) Student.java
Student 클래스 안에 매개 변수가 다른 동일한 이름의 생성자를 생성하였다.
public class Student {
public int studentID; //학번
public String studentName; //이름
public String address; //주소
public Student(int id, String name) {
studentID = id;
studentName = name;
}
public Student(String name) {
studentName = name;
}
}
1.1) StudentTest.java
메인 함수에서 객체를 생성할 경우 Student.java에서 2개의 생성자를 만들었기 때문에 해당 생성자에 맞는 매개변수를 대입하여 객체를 생성할 수 있다.
public class StudentTest {
public static void main(String[] args) {
Student studentPark = new Student(1234,"피망"); //Park 객체 생성
Student studentKim = new Student("사과");
}
}
3. O,X QUIZ
Question 1: 생성자는 클래스를 통해 객체를 생성하고 객체의 필드 값을 초기화 할 수 있다.
Question 2: 생성자는 메소드이기 때문에 반환 타입을 적어야 한다.
Question 3: 클래스에 생성자가 없는 경우에는 객체를 생성할 수 없다.
정답 보기
Question 1: O
클래스에서 객체를 생성할 때 new 키워드를 사용하여 생성자를 생성하고 생성자를 통해 멤버 변수의 값을 초기화 한다.
Question 2: X
생성자는 매개 변수는 존재할 수 있지만 반환 값은 존재하지 않는다.
Question 3: X
클래스에 생성자가 없는 경우 디폴트 생성자가 자동으로 생성되어 객체를 생성할 수 있다.
'Language > JAVA' 카테고리의 다른 글
[JAVA]접근 제어자(Access modifier) 개념 및 구현 (0) | 2021.02.14 |
---|---|
[JAVA] 참조 자료형(Reference data type) 개념 및 구현 (0) | 2021.02.14 |
[JAVA] 클래스와 객체를 이용한 간단한 예제 풀이 (0) | 2021.02.13 |
[JAVA] 함수(Function), 메서드(Method), 인스턴스(Instance) 개념 및 구현 (0) | 2021.02.13 |
[JAVA] 객체(Object), 클래스(Class) 개념 및 구현 (0) | 2021.02.13 |
공부&일상 블로그
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요! 질문은 언제나 환영입니다😊