본문 바로가기
프로그래밍 언어/Java

[Java] 기본 생성자 & 매개변수 생성자

by 까망 하르방 2021. 2. 23.
반응형

기본 생성자 & 매개변수 생성자

클래스를 설계하고 사용할 때, 생성자를 만들지 않고 메소드만 사용하는 경우도 있습니다.

Q. 객체(클래스)는 생성자 없이 생성이 가능할까? NO

A. 인자도 없이 단순히 리턴되는 형태를 기본 생성자(default constructor)

* 생성자를 명시하지 않더라도 컴파일러가 기본 생성자를 자동으로 생성해준다.

    왜냐하면 객체가 생성될 때 반드시 생성자가 호출되어야 하기 때문이다.

 

Q. 생성자를 명시하든 안하든 컴파일러에 의해 기본 생성자가 무조건 실행되는 것일까?

    생성자에는 기본 생성자(default constructor)와 사용자 정의 생성자(UserDefined Constructor)가 존재합니다. 

    ※ "사용자 정의 생성자"를 "매개변수"가 있는 생성자로 볼 수 있습니다.

A. 생성자가 하나라도 존재하는 클래스에는 컴파일러에 의해 자동으로 기본 생성자가 삽입되지 않습니다.

     (본생성자도 아니면서 생성자라면 당연히 매개변수가 필요한 형태)

 

사용자 정의 생성자 (UserDefined Constructor)

생성자는 개발자가 객체를 만들 때 꼭 이렇게 하고 싶다고 의사표현을 하는 것입니다.

따라서, 컴파일러는 기본 생성자를 포기하고, 개발자의 의견대로 객체를 만들 수 있게 합니다.

public class SampleObj {
    public SampleObj(int value) { }
    public SampleObj(String value) {  }
    public SampleObj(String value, int idx) { }
}

- 사용자 정의 생성자의 경우에는 이름이 다 똑같이 클래스의 이름과 같습니다. 

   다만, 그 안의 파라미터의 값이 경우에 따라 다르게 작성됩니다.

   객체지향에서는 오버로딩(Overloading)이라는 용어로 위의 형태를 설명가능

- 사용자 정의 생성자는 객체에서 여러개 만들 수 있다.

 

오버로딩(Overloading)

; 이름이 같은 메소드나 사용자 정의 함수가 여러 개인 모습을 의미합니다.

호출하는 이름은 같지만, 파라미터들은 다르다.

- 파라미터의 개수가 같다면 파라미터들의 타입이 다르다.

- 리턴 타입은 다를 수 있다.

   (생성자의 경우에는 리턴 타입이 없으므로 신경 쓰지 않아도 된다.)

 

ex) 다른 형태로는 객체가 만들어지면서 어떤 메소드를 실행할 때도 생성자 이용

public class InternetData {
    
    private String domain;
    
    public InternetData(String domain) {
        this.domain = domain;
        checkInternet();
    }
    
    private void checkInternet() {
        System.out.println("인터넷 확인.....!");
    }

    public static void main(String[] args) {
        InternetData obj = new InternetData("http://www.google.com");
    }
}

생성자의 기능을 크게 두 가지로 구분 가능

① 객체 생성 시에 절대적으로 필요한 데이터를 넣도록 하는 강제성의 기능

② 객체가 생성되면 자동으로 어떤 메소드를 호출하는 기능을 위한 장치

※ [Java] 역컴파일로 기본 생성자 확인해보기  

 

[Java] 역컴파일로 기본 생성자 확인해보기

기본 생성자 역컴파일 클래스를 생성하고 별도의 생성자를 만들지 않으면 컴파일러가 자동으로 기본 생성자를 만들어 냅니다. 실제로 그렇게 동작하는지 클래스 파일을 역컴파일하여 확인하고

zoosso.tistory.com

 

 

 

반응형

댓글