Development

[JAVA] 클래스의 모든 것 #4 - 생성자 (Constructor) 본문

Languages/JAVA

[JAVA] 클래스의 모든 것 #4 - 생성자 (Constructor)

yo~og 2021. 11. 3. 13:22
반응형

클래스를 알아봅시다! #3 😉


오늘은 클래스에서 생성자를 알아봅시다!

 

[ 자바 클래스 링크 ]

1. [JAVA] 클래스의 모든 것 #1 - 클래스의 개념과 용도
2. [JAVA] 클래스의 모든 것 #2 - 클래스의 static
3. [JAVA] 클래스의 모든 것 #3 - 클래스의 this


생성자는 constructor라고도 합니다.

생성자는 단어 그대로 클래스가 생성할때 호출되는 것인데요.

 

 

생성자의 기본형식

//객체를 new(생성) 할때 호출되는 생성자
public ClassName() {
	
}

생성자의 기본형식은 이렇습니다. public 클래스명으로 생성하면됩니다. 

 


이제 예제를 보며 설명하겠습니다!

package test.mypac;

public class Car {
   //필드 정의하기
   public Engine engine;
   
   //객체를 new(생성) 할때 호출되는 생성자
   public Car() {
      System.out.println("Car() 생성자 호출됨");
   }
   // Engine 객체를 인자로 전달 받는 생성자 
   public Car(Engine engine) {
      //지역변수에 담긴 값을 필드에 저장하기 
      this.engine = engine;
      System.out.println("Car(Engine engine) 생성자 호출됨");
   }
   
   //달리는 메소드
   public void drive() {
      if(this.engine==null) {
         System.out.println("Engine 이 없어서 달릴수가 없어요!");
         return; //메소드를 여기서 끝내기 
      }
      System.out.println("신나게 달려요~");
   }
}

Car 클래스를 만들어봅시다. 

public Car( )라는 생성자가 보이시나요? 이렇게 아무런 파라미터를 받지 않는 생성자는 기본으로 만들어지는 생성자입니다. 객체가 생성될때 무언가 조작을 하고싶으면 이런식으로 호출하여 사용하면 됩니다.

 

생성자는 하나만 만들 수 있는 것이 아닙니다. 파라미터를 다르게 하여 여러개의 Car 생성자를 만들 수 있습니다.

public Car(Engine engine) 라는 생성자가 보이시나요? Engine 객체를 파라미터로 가진 생성자를 만든 모습입니다.

 

이때 주의해야할 것은 파라미터를 가진 생성자를 만들면 기본 생성자는 없어지게 된다는 것입니다. 

그렇기 때문에 기본생성자를 따로 만들어주어야합니다.

 

이 부분은 main 클래스를 작성하면서 자세히 보겠습니다.

 


 

Car c1 = new Car();
Car c2 = new Car(new Engine());
c2.drive();

main클래스입니다.

Car() 생성자와 Car(new Engine())생성자를 호출한 모습입니다.

 

main을 실행시키면 호출이 된것을 볼 수 있습니다.


이때 주의해야할 것은 파라미터를 가진 생성자를 만들면 기본 생성자는 없어지게 된다는 것입니다. 
그렇기 때문에 기본생성자를 따로 만들어주어야합니다.

위에서 설명했던 이부분을 코드를 보면서 설명해보겠습니다.

Car 클래스에서 파라미터를 가진 생성자만 두고 기본생성자( Car() )를 없애보겠습니다.

package test.mypac;

public class Car {
   //필드 정의하기
   public Engine engine;

   // Engine 객체를 인자로 전달 받는 생성자 
   public Car(Engine engine) {
      //지역변수에 담긴 값을 필드에 저장하기 
      this.engine = engine;
      System.out.println("Car(Engine engine) 생성자 호출됨");
   }
   
   //달리는 메소드
   public void drive() {
      if(this.engine==null) {
         System.out.println("Engine 이 없어서 달릴수가 없어요!");
         return; //메소드를 여기서 끝내기 
      }
      System.out.println("신나게 달려요~");
   }
}

기본생성자를 없앤 Car클래스 모습입니다.


Car c1 = new Car();
Car c2 = new Car(new Engine());
c2.drive();

Main은 위와 동일하게 만들어주었습니다.


실행시켜보면 에러가 나오게됩니다. 에러의 내용은 Car()생성자가 정의되지않았다고 나오네요.

이것을 보면 다른 생성자를 추가할경우 기본생성자는 없어지게 되니 기본생성자를 꼭! 만들어줘야하는 것을 알 수 있습니다.

반응형
Comments