AWS CLOUD FRAMEWORK/Java
[Day10] Ex02_Constructor
JWJ_Hub
2023. 4. 5. 17:56
package oop;
class Product {
// 필드 (상품의 이름과 가격을 기재한다)
String name;
int price;
// 메서드 (상품정보를 간략히 출력하는 기능)
void show() {
System.out.printf("%s : %,d원\n", name, price);
}
// 생성자
Product() {
System.out.println("비어있는 Product 객체 하나 생성");
}
// 생성자는 함수이므로, 오버로딩이 가능하다
// 함수이름이 같아도, 매개변수 타입이 다르거나 순서가 다르다면 여러개 정의할 수 있다
Product(String name, int price) {
// 하나의 클래스로 여러 객체를 생성할 때, 현재 작업중인 객체 자기 자신을 가리키기 위해
// this라는 키워드를 사용한다
this.name = name; // 전달받은 이름을 멤버 필드 name에 저장한다
this.price = price; // 전달받은 가격을 멤버 필드 price에 저장한다
System.out.println("데이터를 전달받아서 Product 객체 하나 생성");
}
}
public class Ex03_Constructor {
public static void main(String[] args) {
// 생성자는 클래스를 이용하여 객체를 생성할 때 호출하는 특수한 함수이다
// 자바에서는 오로지, 생성자를 통한 객체 생성만 가능하다
// 예외적으로 함수형 인터페이스의 람다식 객체 생성이 있으나 방식이 다소 다르다
// 참조변수를 여러개 만들었다고 하더라도, 생성자를 호출하지 않았다면 객체가 없는것이다
// 생성자의 이름은 클래스의 이름과 동일하다
// 생성자는 함수이지만, 반환형을 지정하지 않는다
// 생성자는 함수이므로, 오버로딩이 가능하다
// 생성자의 주 목적은 객체를 생성하는 것이고
// 또다른 목적은 객체 생성시 초기작동을 추가하는 것이다
Product p1 = new Product(); // 비어있는 객체 생성
p1.name = "아메리카노"; // 값을 전달하지 않고 생성했으니
p1.price = 2000; // 멤버 필드에 직접 값을 대입해야 한다
p1.show();
// 초기값을 전달하여 객체를 생성했기 때문에, 대입 과정을 생략할 수 있다
Product p2 = new Product("돌체라떼", 4000);
p2.show();
// 자바는 생성자를 호출하지 않으면 객체를 생성하지 않는다
// Product p3 = null;
// p3.show();
// 클래스를 작성할 때, 생성자를 아예 손대지 않으면(만들지 않으면)
// 컴파일 시에 클래스에 기본 생성자 코드를 추가해준다
// 기본 생성자 : 매개변수를 전달받지 않는 생성자
}
}