생성자란
생성자는 객체가 만들어 질 때 자동 실행이 되는 것으로, 객체를 생성 할 시 초기화를 담당하는 기능이다.
생성자의 이름이 클래스의 이름과 같아야한다.
묵시적 생성자
묵시적 생성자는 매개변수가 없는 생성자로, 생성자가 지정되지 않는 경우 자동생성된다.
코드
package ex02;
class Cons1{
public int num;
public Cons1(){ //묵시적 생성자
System.out.println("안녕하세요.");
}
public void aa(){ //메소드
System.out.println("반갑습니다.");
}
}
public class ConsTest1 {
public static void main(String[] args) {
Cons1 con1 = new Cons1();
}
}
위 코드를 실행하면 Cons1 con1 = new Cons1();를 통해 객체를 생성하는 동시에 Cons1클래스에서 묵시적 생성자인 Cons1()를 실행한다. 메소드인 aa는 실행이 되지 않지만 생성자인 Cons1()는 실행이 되는 것을 볼 수 있다.
결과
명시적 생성자
명시적 생성자는 객체를 만들 때 매개변수를 입력해주면 그 형태에 맞는 생성자를 실행하는 것이다.
EX01.
코드
class Cons2{
public int num;
public Cons2(int a){ //명시적 생성자
System.out.println(a);
}
}
public class ConsTest2 {
public static void main(String[] args) {
Cons2 con2 = new Cons2(5);
}
}
Cons2 con2 = new Cons2(5);로 객체르 생성하면 Cons2의 클래스에서 int 5를 매개변수로 받는 생성자 public Cons2(int a)가 생성된다는 뜻이다. 이때 자료형은 서로 같아야한다.
결과
EX02. 오버로딩
오버로딩은 생성자의 이름은 같지만 매개변수의 형태와 갯수를 다르게 주는 것을 말한다.
코드
class Cons2{
public int num;
public Cons2(String a){ //명시적 생성자
System.out.println(a);
}
public Cons2(String a, int b){ //명시적 생성자
System.out.println(a);
System.out.println(b);
}
}
public class ConsTest2 {
public static void main(String[] args) {
Cons2 con2 = new Cons2("5번째");
Cons2 con3 = new Cons2("이병일", 25);
}
}
결과
Cons2 con2 = new Cons2("5번째"); 의 매개변수는 String이다. 따라서 Cons2 클래스의 생성자중 String을 매개변수로 입력받는 명시적 생성자 Cons2(String a)가 실행이 된다.
Cons2 con3 = new Cons2("이병일", 25);의 매개변수는 String과 int이다. 따라서 Cons2 클래스의 생성자중 String, int를 매개변수로 입력받는 명시적 생성자 Cons2(String a, int b)가 실행이 된다.
※명시적 생성자 사용 시 묵시적 생성자는 필수
위 예시에서 다음과 같이 묵시적 생성자를 사용하게 되면 어떻게 될까.
코드
class Cons2{
public int num;
public Cons2(String a){ //명시적 생성자
System.out.println(a);
}
public Cons2(String a, int b){ //명시적 생성자
System.out.println(a);
System.out.println(b);
}
}
public class ConsTest2 {
public static void main(String[] args) {
Cons2 con2 = new Cons2();
}
}
결과
에러가 뜬다. 명시적 생성자가 없는 경우에는 묵시적 생성자를 사용해도 문제가 없지만, 명시적 생성자가 있는 경우에는 묵시적 생성자를 기입해 주어야 객체 생성시 오류가 나지 않는다.
즉 이렇게 수정해 주어야한다.
코드
class Cons2{
public int num;
public Cons2(String a){ //명시적 생성자
System.out.println(a);
}
public Cons2(String a, int b){ //명시적 생성자
System.out.println(a);
System.out.println(b);
}
public Cons2(){ //명시적 생성자가 있을 경우 반드시 묵시적 생성자를 적어줘야함
}
}
public class ConsTest2 {
public static void main(String[] args) {
Cons2 con2 = new Cons2();
}
}
'JAVA > 개념정리' 카테고리의 다른 글
[JAVA] 접근제어자(Access Modifier) (0) | 2022.10.07 |
---|---|
[JAVA] 생성자 - 예약어 this (0) | 2022.10.07 |
[Java] System.arraycopy (0) | 2022.10.06 |
[JAVA] Array의 활용 (0) | 2022.10.05 |
[JAVA] Array (0) | 2022.10.05 |
댓글