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
'Programming > Java' 카테고리의 다른 글
[Java 객체지향 프로그래밍] 접근 제한자 (접근 제어자) (0) | 2021.03.01 |
---|---|
[Java 객체지향 프로그래밍] 메모리 모델 - JVM (0) | 2021.03.01 |
[Java 객체지향 프로그래밍] 오버로딩(Overloading) (0) | 2021.02.22 |
[JAVA 객체지향 프로그래밍] 패키지의 개념 (0) | 2021.02.21 |
[Java 객체지향 프로그래밍] 객체와 클래스 (0) | 2021.02.21 |