프로그래밍언어/Java

[Java 기본] 생성자 - 도입

배세 2024. 7. 5. 16:48

생성자를 만들어보자


프로그래밍을 하다보면 객체를 생성하고 이후에 바로 초기값을 할당해야 하는 경우가 많다. 그래서 대부분의 객체 지향 언어는 객체를 생성하자마자 필요한 기능을 수행할 수 있도록 생성자라는 기능을 제공한다. 생성자를 사용하면 객체를 생성하는 시점에 즉시 필요한 기능을 수행할 수 있다. 

 

public class MemberConstruct {
    String name;
    int age;
    int grade;
    
    MemberConstruct(String name, int age, int grade) {
        System.out.println("생성자 호출 name = " + name + ", age = " + age + ", grade = " + grade);
        this.name = name;
        this.age = age;
        this.grade = grade;
    }
}

 

생성자는 다음과 같은 특징이 있다. 

  • 생성자의 이름은 클래스와 같아야한다. 
  • 생성자는 반환타입이 없다. 
  • 나머지는 메서드와 동일한 특징을 가진다. 

메인 메서드를 만들어서 객체를 생성해보자. 

 

오류가 발생한다.

객체를 생성할 때 생성자를 호출해서 값을 초기화 해준다. 따라서 매개변수를 셋팅해줘야 한다. 

객체를 생성하면서 생성자를 호출하라는 뜻이다. 

   public static void main(String[] args) {
        MemberConstruct member = new MemberConstruct("user1", 15, 90);
    }

 

생성자 호출


생성자는 인스턴스를 생성하고 나서 즉시 호출된다. 생성자를 호출하는 방법은 다음 코드와 같이 new 명령어 다음에 생성자 이름과 매개변수에 맞추어 인수를 전달하면 된다. 

new 키워드를 사용해서 객체를 생성할 때 마지막에 괄호() 를 쓰는 이유도 생성자 때문이다. 

new 생성자이름(생성자에 맞는 인수 목록)
new 클래스이름(생성자에 맞는 인수 목록)

=> 생성자 이름과 클래스 이름이 어차피 동일할 것이므로

 

생성자 장점


중복 호출 제거

이전에는 객체 생성 이후 어떤 작업을 수행하기 위해 메서드를 직접 한번더 호출해야 했다.  생성자 덕분에 객체를 생성하면서 직후 필요한 작업을 한번에 처리할 수 있게 됐다. 

 

// 생성자 사용 전
MemberInit member = new MemberInit();
member.InitMember("user1", 15, 50)

// 생성자 사용
MemberConstruct member = new MemberConstruct("user1", 15, "90)

 

제약 - 생성자 호출 필수

객체 생성 후 초기값 셋팅을 강제할 수 있다. 매개변수를 전달하지 않으면 객체를 생성하는 순간 오류가 발생하기 때문이다. 

즉, 객체를 생성할 때 직접 정의한 생성자가 있다면 직접 정의한 생성자를 반드시 호출해야 한다. 

 

=> 생상자를 사용하면 필수값 입력을 보장할 수 있다.

 

 

기본 생성자


이전 포스팅에서 개발한 코드를 보면 생성자를 만들지 않았음에도 호출이 가능했다. 

public class MemberInit {
    String name;
    int age;
    int grade;
}
    public static void main(String[] args) {
		MemberInit member1 = new MemberInit();
        ...
	}

 

 

기본 생성자


  • 매개변수가 없는 생성자를 기본 생성자라 한다. 
  • 클래스에 생성자가 하나도 없으면 자바 컴파일러는 매개변수가 없고, 작동하는 코드가 없는 기본 생성자를 자동으로 만들어준다. 
  • 생성자가 하나라도 있으면 자바는 기본 생성자를 만들지 않는다. 

 

자바는 기본 생성자를 왜 만들어줄까?


자바에서 기본 생성자를 만들어주지 않으면, 생성자 기능이 필요하지 않은 경우에도 모든 클래스에 개발자가 직접 기본 생성자를 정의해야 한다. 생성자 기능을 사용하지 않는 경우도 많기 때문에 자바에서 편의기능을 제공하는 것이다. 

 

 

 

* 인프런 '김영한의 실전 자바 - 기본편'을 참고하여 작성하였습니다. 

 

 

 

 

* 인프런 '김영한의 실전 자바 - 기본편'을 참고하여 작성하였습니다.