1. 클래스

  • 클래스는 객체를 생성하는 데 사용되며, 반대로 객체는 클래스에 정의되고 설계된 내용 그대로 생성됩니다.
  • 클래스는 객체 그 자체가 아니라 단지 객체를 생성하는 데 사용되는 하나의 틀입니다.
  • 클래스는 객체 그 자체가 될 수 없습니다.
  • 클래스를 통해 생성된 객체를 우리는 해당 클래스의 인스턴스(instance)라 부릅니다.
  • 클래스로부터 객체를 만드는 과정을 우리는 인스턴스화(instantiate)라 지칭합니다.

  • 객체와 인스턴스의 차이

    객체는 모든 인스턴스를 포괄하는 넓은 의미를 가지고 있는 반면, 인스턴스는 해당 객체가 어떤 클래스로부터 생성된 것인지를 강조함에 있습니다.

public class ExampleClass {
	int x = 10; // (1)필드
	void printX() {...} // (2)메서드
	ExampleClass {...} // (3)생성자
	class ExampleClass2 {...} // (4)이너 클래스
} 

2. 객체와 생성자

  • 객체는 new 키워드로 생성할 수 있습니다.
  • 메서드를 사용해 객체를 생성할 수도 있습니다.
클래스명 참조_변수명 = new 생성자();
public class CarTest {
    public static void main(String[] args) {
        Car tesla = new Car("Model 3", "빨강"); // 객체 생성. 

        System.out.println("내 차의 모델은 " + tesla.model + "이고 " + "색은 " + tesla.color + "입니다."); // 필드 호출
        tesla.power(); // 메서드 호출
        tesla.accelerate();
        tesla.stop();
    }
}

class Car {
    public String model; // 필드 선언
    public String color;

    public Car(String model, String color) { // 인스턴스 초기화를 위한 생성자 함수. 
        this.model = model;
        this.color = color;
    }

    void power() { // 메서드 선언
        System.out.println("시동을 걸었습니다.");
    }

    void accelerate() {
        System.out.println("더 빠르게!");
    }

    void stop(){
        System.out.println("멈춰!!");
    }
}

// 출력값
내 차의 모델은 Model 3이고 색은 빨강입니다.
시동을 걸었습니다.
더 빠르게!
멈춰!!


 public Car(String model, String color) { 
        this.model = model;
        this.color = color;
    }

이부분이 생성자인데 작성하지 않게 되면 Car에 들어가는 값들이 길을 잃습니다.

생성자를 작성하지 않으면 기본 생성자가 사용되며, 이 경우에는 객체를 초기화하는데 필요한 정보를 명시적으로 제공하지 않게 됩니다.
객체가 “길을 잃는다”는 것은 객체를 초기화하는 데 필요한 정보가 누락되어 객체가 제대로 생성되지 않는다는 것을 의미합니다.

만약 객체를 생성할 때 모델과 색상 정보를 제공하지 않으면, 이 정보들을 받아들일 수 있는 생성자가 없기 때문에 객체를 생성할 수 없게 됩니다.
이렇게 되면 프로그램이 컴파일되지 않거나 런타임 오류가 발생할 수 있습니다.

따라서 생성자를 작성하여 객체를 초기화하는 데 필요한 정보를 제공하는 것이 중요합니다.
생성자를 통해 객체를 초기화함으로써 객체가 생성될 때 필요한 정보를 명확하게 전달할 수 있고, 이를 통해 객체가 올바르게 초기화되고 사용될 수 있습니다.