본문 바로가기

웹 프로그래밍/Spring Framework

[JAVA] new 생성자

생성자

 tc라는 객체를 생성할 때 new연산자 다음의 TestClass()를 생성자라 한다.

 TestClass tc = new TestClass();


 지금까지 객체를 생성할 때 아무렇지도 않게 이렇게 객체(인스턴스)를 생성했다. 하지만 new연산자 뒤의 생성자는 어디서 정의 한 것일까? 이는 컴파일러에서 정의된 생성자가 없다면 자동으로 정의해준다. 빈생성자만을 정의 해준다. 하지만 이렇게 빈 생성자를 선언해서 객체를 생성한다면 멤버변수를 따로 초기화 해줘야한다는 불편함이 존재 했었다. 그래서 그러한 문제점을 제거하기 위해 직접 생성자를 선언하면 좋다.

주의할 점
 정의된 생성자가 있을 경우 컴파일러는 빈 생성자를 따로 정의해 주지 않는다. 이렇게 떄문에 생성자를 선언하고 필요에 따라 빈 생성자도 따로 선언해 줘야 한다.

 

예제

package test;
import java.util.Scanner;

class Person {
 int age;
 String name;
 int height;
 int weight;
 public Person(){
 }
 public Person(int age){
  this.age = age;
 }
 public Person(String name){
  this.name = name;
 }
}
public class test {
 public static void main(String[] args) throws Exception {
  Person p1 = new Person();
  System.out.println("p1.age = " + p1.age + ", p1.name = " + p1.name + ", p1.height = " + p1.height + ", p1.weight = " + p1.weight);
  Person p2 = new Person(20);
  System.out.println("p2.age = " + p2.age + ", p2.name = " + p2.name + ", p2.height = " + p2.height + ", p2.weight = " + p2.weight);
  Person p3 = new Person("Lee Shin");
  System.out.println("p3.age = " + p3.age + ", p3.name = " + p3.name + ", p3.height = " + p3.height + ", p3.weight = " + p3.weight);
 }
}

 

결과

p1.age = 0, p1.name = null, p1.height = 0, p1.weight = 0
p2.age = 20, p2.name = null, p2.height = 0, p2.weight = 0
p3.age = 0, p3.name = Lee Shin, p3.height = 0, p3.weight = 0