Java

Java - 생성자

요가하는 개발자 2023. 1. 24. 23:28

🌱 오늘의 주제  : Java - 생성자

 

 

 

 

 

 

 

 

 

🌱 생성자 (constructor)


  • 생성자 : 인스턴스가 생성될 때 호출되는 '인스턴스 초기화 메서드'이다.
  • 생성자도 오버로딩이 가능하므로 하나의 클래스에 여러개의 생성자가 존재 할 수 있다.
1. 생성자의 이름은 클래스의 이름과 같아야 한다.
2. 생성자는 리턴 값이 없다. (void 붙이지 않는다.)


클래스이름(타입 변수명, 타입 변수명,...) {
 // 인스턴스 생성 시 수행될 코드,
 // 주로 인스턴스 변수의 초기화 코드를 적는다.
}

 

 

class Point {
       Point() {.   // 매개변수가 없는 생성자.
      }


      Point(int x , int y) {  // 매개변수가 있는 생성자.
      }
     

 

 

Card c = new Card();


1. 연산자 new에 의해서 메모리(heap)에 Card클래스의 인스턴스가 생성된다.
2. 생성자 Card()가 호출되어 수행된다.
3. 연산자 new의 결과로, 생성된 Card인스턴스의 주소가 반환되어 참조변수 c에 저장된다. 

 

 

 

 

 

 

 

🌱  기본 생성자 (default constructor)


  • 모든 클래스에는 반드시 하나 이상의  생성자가 정의되어 있어야 한다.
  • 클래스에 생성자를 정의하지 않고도 인스턴스를 생성할 수 있었던 이유는 컴파일러가 제공하는 '기본 생성자' 덕분이다.
클래스이름( ) { } // 기본 생성자.

Point( ) { }  // Point클래스의 기본 생성자.

 

 

 

 

  • 기본 생성자가 컴파일러에 의해서 추가되는 경우는 클래스에 정의된 생성자가 하나도 없을 때 뿐이다.

public class Data_1 {
	int value;
	Data_1() {} // 기본생성자를 추가  // 없어도 됨. 이유는 기본생성자를 컴파일러가 자동추가해줌. // 기본 생성자를 만드는 습관 필요.
	
}






public class Data_2 {

	
		// Data_1
		int value;
		
		Data_2(int x) {	 //매개변수가 있는 생성자.
			value = x;
		

	}

}







public class Ex6_11 {

	public static void main(String[] args) {
		// default constructor
		
		Data_1 d1 = new Data_1();
		Data_2 d2 = new Data_2();  // compile error 발생.  -> new Data_2(10)으로 바꾸면 됨. 매개변수가 있는 생성자 호출로..
		//The constructor Data_2() is undefined
	}

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

🌱  매개변수가 있는 생성자


  • 생성자도 메서드처럼 매개변수를 선언하여 호출 시 값을 넘겨받아서 인스턴스의 초기화 작업에 사용할 수 있다.
  • 매개변수가 있는 생성자를 활용하면 간결하고 직관적인, 객체지향적인 코드를 작성 할 수 있다.
인스턴스를 생성할 때는 2가지 사항을  결정해야 한다.
1. 클래스 - 어떤 클래스의 인스턴스를 생성?
2. 생성자 - 선택한 클래스의 어떤 생성자로 인스턴스를 생성할 것 인가? 

 

 

public class Car {
	// 필드.
	String color;
	String gearType;
	int door;
	
	Car() {}  // 기본 생성자.
	
	Car(String c, String g, int d){	// 매개변수가 있는 생성자.
		color = c;
		gearType = g;
		door = d;
	}
	
    
    
    
 
    
    
    
    public class Ex6_12 {

	public static void main(String[] args) {
		Car c1 = new Car(); // 기본 생성자 호출.
		c1.color = "white";
		c1.gearType = "auto";
		c1.door = 4;
		
		Car c2 = new Car("white", "auto", 4); // 매개변수가 있는 생성자 호출.
		
		System.out.println("c1의 color =" + c1.color + ",  gearType = " + c1.gearType + ", door = " + c1.door);
		System.out.println("c2의 color = " + c2.color + ", gearType = " + c2.gearType + ", door = " + c2.door);

	}