자바 - 생성자
미래의 자바 개발자 여러분, 환영합니다! 오늘은 자바 프로그래밍에서 가장 기본적인 개념 중 하나인 생성자에 대해 다룰 것입니다. 코딩에 새로운 사람이라도 걱정하지 마세요; 저는 수많은 학생들을 위해 수년간 가르쳐왔던 것처럼 단계별로 이 주제를 안내해 드릴 것입니다. 그럼, 커피 한杯을 마시러 가거나 (혹은 좋아하는 음료를), 함께 이 흥미로운 여정을 시작해 보세요!
생성자란 무엇인가요?
집을 지을 때를 상상해 보세요. 인테리어를 시작하기 전에는 기본적인 구조와 토대를 먼저 놓아야 합니다. 자바에서는 생성자가 객체를 만들 때의 청사진과 같습니다 - 객체가 만들어질 때 초기 상태를 설정합니다.
생성자는 클래스의 객체가 만들어질 때 호출되는 특별한 메서드입니다. 이를 통해 객체의 상태를 초기화하고 메모리를 할당합니다.
생성자에 대한 주요 포인트:
- 생성자는 클래스와 같은 이름을 가집니다.
- 반환형이 없습니다 (void조차 아닙니다).
- 객체가 만들어질 때 자동으로 호출됩니다.
다음은 간단한 예제입니다:
public class House {
String color;
int numberOfRooms;
// 이것은 생성자입니다
public House() {
color = "White";
numberOfRooms = 3;
}
}
이 예제에서 House()
는 생성자입니다. 이는 새로운 House
객체가 만들어질 때 기본 색상을 "White"으로 설정하고 방의 수를 3으로 설정합니다.
자바 생성자 만들기의 규칙
이제 기본을 둔 다음, 몇 가지 중요한 규칙을 더해 보겠습니다:
- 생성자의 이름은 클래스의 이름과 정확히 일치해야 합니다.
- 생성자는 반환형이 없어야 합니다 (void조차 아닙니다).
- 생성자는 접근 제한자를 가질 수 있습니다 (public, private, protected, 또는 default).
- 생성자를 제공하지 않으면 자바는 기본적인 no-arg 생성자를 자동으로 만들어 줍니다.
자바 생성자 만들기
생성자를 어떻게 만들고 사용하는지를 보여주기 위해 더 자세한 예제를 만들어 보겠습니다:
public class Student {
String name;
int age;
String major;
// 생성자
public Student(String studentName, int studentAge, String studentMajor) {
name = studentName;
age = studentAge;
major = studentMajor;
}
// 학생 정보 표시 메서드
public void displayInfo() {
System.out.println("Name: " + name);
System.out.println("Age: " + age);
System.out.println("Major: " + major);
}
public static void main(String[] args) {
// 새로운 Student 객체 생성
Student newStudent = new Student("Alice", 20, "Computer Science");
newStudent.displayInfo();
}
}
이 예제에서는 세 가지 매개변수를 받는 Student
클래스의 생성자를 만들었습니다. 새로운 Student
객체를 만들 때 필요한 정보를 전달하면 생성자가 객체의 상태를 초기화합니다.
이 코드를 실행하면 다음과 같은 결과를 볼 수 있습니다:
Name: Alice
Age: 20
Major: Computer Science
자바 생성자의 유형
집의 종류처럼 (번들하우스, 아파트, 맨션) 자바에서도 생성자에는 여러 종류가 있습니다. 그것들을 탐구해 보겠습니다:
1. 기본 생성자
생성자를 제공하지 않으면 자바가 하나를 만들어 줍니다. 이를 기본 생성자라고 합니다.
public class Car {
// 자바가 기본 생성자를 만듭니다
}
// 사용법
Car myCar = new Car();
2. No-arg 생성자
이는 어떤 인수도 받지 않는 생성자입니다.
public class Bicycle {
String color;
// No-arg 생성자
public Bicycle() {
color = "Red";
}
}
// 사용법
Bicycle myBike = new Bicycle();
3. 매개변수 있는 생성자
이 유형의 생성자는 하나 이상의 매개변수를 받습니다.
public class Book {
String title;
String author;
// 매개변수 있는 생성자
public Book(String bookTitle, String bookAuthor) {
title = bookTitle;
author = bookAuthor;
}
}
// 사용법
Book myBook = new Book("The Great Gatsby", "F. Scott Fitzgerald");
자바의 생성자 오버로딩
집의 종류를 언급했을 때, 때로는 객체를 다르게 만들고 싶을 수 있습니다. 이때 생성자 오버로딩이 매우 유용합니다.
생성자 오버로딩은 클래스가 두 개 이상의 생성자를 가질 수 있게 합니다. 각 생성자는 다른 매개변수 목록을 가질 수 있습니다. 이를 통해 객체 생성에 유연성을 제공합니다.
예를 들어보겠습니다:
public class Pizza {
String size;
String topping;
boolean extraCheese;
// 모든 매개변수를 가진 생성자
public Pizza(String pizzaSize, String pizzaTopping, boolean hasExtraCheese) {
size = pizzaSize;
topping = pizzaTopping;
extraCheese = hasExtraCheese;
}
// 크기와 토핑을 가진 생성자
public Pizza(String pizzaSize, String pizzaTopping) {
this(pizzaSize, pizzaTopping, false); // 첫 번째 생성자를 호출
}
// 크기만 가진 생성자
public Pizza(String pizzaSize) {
this(pizzaSize, "Margherita", false); // 첫 번째 생성자를 호출
}
// 피자 정보 표시 메서드
public void displayInfo() {
System.out.println("Size: " + size);
System.out.println("Topping: " + topping);
System.out.println("Extra Cheese: " + (extraCheese ? "Yes" : "No"));
}
public static void main(String[] args) {
Pizza pizza1 = new Pizza("Large", "Pepperoni", true);
Pizza pizza2 = new Pizza("Medium", "Mushroom");
Pizza pizza3 = new Pizza("Small");
System.out.println("Pizza 1:");
pizza1.displayInfo();
System.out.println("\nPizza 2:");
pizza2.displayInfo();
System.out.println("\nPizza 3:");
pizza3.displayInfo();
}
}
이 Pizza
클래스는 생성자 오버로딩을 보여줍니다. 우리는 세 가지 생성자를 가지고 있으며, 각각은 다른 매개변수 목록을 가집니다. 이를 통해 Pizza
객체를 여러 가지 방법으로 만들 수 있어 사용자에게 유연성을 제공합니다.
이 코드를 실행하면 다음과 같은 결과를 볼 수 있습니다:
Pizza 1:
Size: Large
Topping: Pepperoni
Extra Cheese: Yes
Pizza 2:
Size: Medium
Topping: Mushroom
Extra Cheese: No
Pizza 3:
Size: Small
Topping: Margherita
Extra Cheese: No
이렇게 하고 나면 자바 생성자에 대한 깊은 이해를 쌓았습니다. 기억해 주세요, 연습이 체인점입니다. 자신만의 클래스를 만들고 다양한 종류의 생성자를 실험해 보세요. 알다시피, 자바 객체를 전문가처럼 구성할 준비가 되었을 것입니다!
코딩 잘하시고, 미래의 자바 마스터 여러분! ?????
Credits: Image by storyset