목차

클래스는 객체를 생성하기 위한 설계도이다. 데이터를 나타내는 필드와 기능을 나타내는 메서드의 집합으로 이루어져있다.
쉽게 비유하자면, 붕어빵의 틀이라고 생각하면 좋다.
붕어빵틀이 있다면, 붕어빵을 만들 수 있다. 하지만, 붕어빵틀이 있다고 하더라도 붕어빵을 먹을 수 있는것은 아니다. 클래스도 이와 같이, 클래스 만으로는 무언가를 하기 힘들다.
클래스 예시코드
// 클래스 정의 - 틀, 설계도
public class Bread {
String name = "모닝빵"; // 빵의 이름
}
.
.
.
public static void main(String[] args) {
Bread newBread = new Bread("fishbread", 200);
System.out.println(newBread.name);
}
이렇게 작성하면 참조할수 없다면서 오류가 발생한다.
객체가 없이 인스턴스 변수에 접근하려고 했기 때문에 오류가 발생한 것이다.
하지만 이때, 클래스를 InteliJ에서 추천하는 방식인 Make 'Bread.name' static으로 바꾸는 것보다는 객체를 만들어 해결하는 방식이 더 좋다.
실제로 클래스는 설계도에 불과하고, 실제 데이터를 저장하고 동작을 수행하는것은 객체이다.
클래스가 붕어빵틀이라고 한다면 객체는 붕어빵이다. 즉, 클래스의 결과물을 객체라고 생각해도 된다.
위에선 Bread클래스를 정의했다. 하지만 이 클래스는 붕어빵틀에 불과하고 붕어빵을 만들기 위한 방법은 알려주지 않았다. 이 방법에 해당하는것이 바로 생성자이다.
생성자 예시코드
// 클래스 정의 - 틀, 설계도
public class Bread {
String name; // 빵의 이름
int calorie; // 빵의 칼로리
// 생성자 정의 - 어떻게 결과물을 만들 것인가에 대한 방법을 '강제'
public Bread(String name, int calorie) {
this.name = name;
this.calorie = calorie;
}
}
이와같이 생성자를 클래스 내부에 선언해주면, 어떻게 만들어야 되는지에 대한 방법을 알려주게 된다. 물론 생성자를 작성하지 않으면 자바가 기본 생성자를 자동으로 만들어 주지만, 직접 만드는 편이 더욱 좋다.
이때, 생성자에서 요구하는 매개변수는 String name과 int calorie이다.
즉, 생성자는 객체의 필드를 원하는 값으로 초기화 시켜주는 역할을 한다.
public class Main {
public static void main(String[] args) {
Bread newBread = new Bread("fishbread", 200);
System.out.println(newBread.name);
}
}

위에서 생성한 클래스와 생성자를 기반으로 newBread라는 객체를 생성하였다.
또한, sout을 사용하여 newBread의 name을 가져오는 코드를 실행했을때 정상적으로 잘 동작했음을 확인할 수 있다.