Programming/Java

[Java 객체지향 프로그래밍] 생성자 (Constructor)

joah.k 2021. 2. 22. 23:07
728x90

- 생성자 

 

생성자란 오브젝트 생성과 함께 자동적으로 호출되는 특수한 메소드이다. 

만약 개발자가 생성자를 기술하지 않는다면, 인수가 없는 생성자가 자동으로 생성된다. (=디폴트 생성자) 

 

- 디폴트 생성자 

  • 메소드와 같은 모양이지만 반환형이 없다. 
  • 클래스 이름과 동일한 이름을 가진다. 
class Product{
	String name; // 상품 이름
	int price;  // 상품 가격 
    
    // 매개변수가 없는 디폴트 생성자
    Product(){
    	name = "인형"; 
        price = 8000;
    }
    
    
    // 매개변수가 두 개 ( String~ , int~) 인 생성자
    Product(String name, int price){
    	this.name=name;
        this.price=price; 
     }
   }  

- <주의> 매개 변수가 있는 생성자를 만든 경우, 디폴트 생성자를  호출하면 에러 발생.
             만약 매개 변수가 없는 디폴트 생성자를 호출하고자 한다면 디폴트 생성자도 같이 구현해주어야 한다. 

class Product{
	public static void main(String[] args){
  		//Product product = new Product();   이렇게 생성하면 에러 발생
       
    	Product product = new Product("강아지 인형", 5000);
    }
 }

- <Tip> 생성자를 일일이 타이핑 하기 귀찮을 때는 이클립스의 [Source]-[Generate Constructor using Fileds...] 를 선택하고 변수를 체크해주면 자동 생성 됩니다! 

 

- 복제 생성자 : 매개변수가 자기 자신과 똑같은 클래스 타입의 변수 

class Product{
	String name; // 상품 이름
	int price;  // 상품 가격 
    
    // 매개변수 있는 생성자 
    Product(String name, int price){
    	this.name= name;    // 매개변수에서 들어온 name을 대입시켜줌 
        this.price=price;
    }
    
    // 복제 생성자 
    Product(Product copy){
    	name=copy.name;
        price=copy.price;
     }
     
     void print(){
     System.out.println("물품명: "+name);
     System.out.println("가격: "+price);
     } 
 }
 
public class MyProduct {

	public static void main(String[] args) {
		//Product product1 = new Product();  이건 디폴트 생성자니까 오류 
		Product product1 = new Product("지우개", 1000);  
		product1.print(); // product1의 print 메소드 호출 
		
		Product product2 = new Product(product1);
		//product1의 name과 price가 product2에 대입 
		product2.name = "샤프";
		// product2의 price는 product1에서 복제되므로 여전히 1000 
		product2.print(); //잘 대입됐는지 확인해보자 
		
	}

728x90