본문 바로가기

[Section1] 생성자(Constructer)

Min_dev 발행일 : 2022-07-10
반응형

생성자

 

생성자가 인스턴스를 생성하는 역활로 착각할 수 있지만 생성자는 인스턴스를 생성하는 역활이 아니다.

인스턴스를 생성하는 역활은 new 키워드이고

생성자는 인스턴스 변수들을 초기화하는 데 사용되는 특수한 메서드라 할 수 있다.

 

생성자와 메서드는 비슷한 구조를 가지고 있지만 두 가지 차이가 있다.

1) 생성자의 이름은 클래스와 같아야 한다.

2) 생성자는 리턴타입이 없다.

 

일반적인 메서드는 리턴타입이 있다. 메서드에 리턴값이 없는 경우 void 타입을 사용하지만,

생성자는 리턴이라는 개념자체가 없어 void 타입도 사용하지 않는다.

 

또한 메서드가 오버로딩이 가능한 것처럼 생성자 또한 오버로딩이 가능하다.

오버로딩의 조건은 다음과 같다.

1) 매개변수의 갯수를 다르게한다.

2) 매개변수의 타입을 다르게한다.

 

인스턴스를 생성할 때는 기본적으로 기본생성자 ("클래스명(){}") 가 필요하다.

그런데 new 키워드를 사용하여 인스턴스를 생성할 때 다음 코드를 입력하지 않아도 인스턴스가 생성되는 이유는

컴파일러가 자동으로 기본생성자를 만들어주기 때문이다.

생성자를 만들때 매개변수(파라미터) 값을 입력할 경우 다음과 같은 장점이있다.

public class ClassEx {
    public static void main(String[] args) {
        OutClass bongbong = new OutClass("봉봉", "회색", 1);
        OutClass ori = new OutClass("오리" , "흰색" , 1);

        bongbong.catInfo();
        ori.catInfo();

        bongbong.move();
        bongbong.sleep();
        ori.move();
        ori.sleep();
    }
}

class OutClass{
    String name;
    String color;
    int age;

    OutClass(String name, String color, int age){ //constructer 생성시 이름, 색깔, 나이를 매개변수로 받음.
        this.name = name;
        this.color = color;
        this.age = age;
    }

    OutClass(){} //defoult constructer 생성

    public void catInfo(){
        System.out.println("야옹이의 이름은 " + name + "이고 색깔은 " + color + " 나이는 " + age + "살입니다.");
    }

    public void move(){
        System.out.println(name + "이가 뛰어다닙니다.");
    }

    public void sleep(){
        System.out.println(name + "이가 꿈을 꿉니당.");
    }
}

위 코드를 보면 OutClass의 인스턴스를 생성할때 매개변수로 name, color, age를 받아서

인스턴스의 변수를 일일히 설정하지 않고 인스턴스를 생성할 때 곧바로 변수의 값이 들어갈 수 있도록 하였다.

이렇게 매개변수를 통해서 인스턴스 변수의 값을 바로 입력받을 경우 코드가 훨씬 간결해지고 간편해지는 장점이 있다.

 

그러나 인스턴스의 변수를 매개변수로 받아서 인스턴스를 생성할 경우, 인스턴스를 생성할 때 반드시

매개변수의 값대로 입력을 해야만 인스턴스를 생성할 수 있다.

즉 컴파일러가 기본생성자를 만들어 주지 않는다는 뜻이다.

그렇기 때문에 생성자의 오버로딩을 통해서 기본생성자를 따로 만들어 인스턴스를 생성할 수도 있다.

 

반응형

'[Section1]' 카테고리의 다른 글

[Section1] 캡슐화  (0) 2022.07.13
[Section1] 상속(Inheritance)  (0) 2022.07.11
[Section1] Git  (0) 2022.07.06
[Section1] JAVA 특징, 메서드  (0) 2022.07.06
[Section1] 문자열(String)  (0) 2022.07.04

댓글