Java 생성자 마스터하기: 종류, 사용법, 실전 예제
Java 생성자
이 튜토리얼에서는 Java 생성자, 종류, 예제를 통해 사용법을 배웁니다.
생성자란?
Java에서 생성자는 클래스의 객체가 생성될 때 호출되는 메서드와 유사합니다.
Java 메서드와 달리 생성자는 클래스와 같은 이름을 가지며 반환 타입이 없습니다. 예:
class Test {
Test() {
// 생성자 본문
}
}
여기서 Test()는 생성자입니다. 클래스와 같은 이름을 가지며 반환 타입이 없습니다.
추천 읽기: 생성자가 값을 반환하지 않는 이유
예제 1: Java 생성자
class Main {
private String name;
// 생성자
Main() {
System.out.println("생성자 호출됨:");
name = "Programiz";
}
public static void main(String[] args) {
// Main 클래스 객체 생성 시 생성자 호출
Main obj = new Main();
System.out.println("이름은 " + obj.name);
}
}
출력:
생성자 호출됨:
이름은 Programiz
위 예제에서 Main()이라는 생성자를 생성했습니다. 생성자 내부에서 name 변수 값을 초기화합니다.
객체 생성 문장을 주목하세요.
Main obj = new Main();
여기서 객체가 생성되면 Main() 생성자가 호출되고 name 변수 값이 초기화됩니다.
따라서 프로그램은 name 변수 값을 Programiz로 출력합니다.
생성자 종류
Java에서 생성자는 3가지 유형으로 나뉩니다:
- 인수 없는 생성자(No-Arg Constructor)
- 매개변수 있는 생성자(Parameterized Constructor)
- 기본 생성자(Default Constructor)
1. Java 인수 없는 생성자
메서드와 마찬가지로 Java 생성자는 매개변수(인수)가 있을 수도 없을 수도 있습니다.
생성자가 매개변수를 받지 않으면 인수 없는 생성자라고 합니다. 예:
private Constructor() {
// 생성자 본문
}
예제 2: Java private 인수 없는 생성자
class Main {
int i;
// 매개변수 없는 생성자
private Main() {
i = 5;
System.out.println("생성자 호출됨");
}
public static void main(String[] args) {
// 매개변수 없이 생성자 호출
Main obj = new Main();
System.out.println("i 값: " + obj.i);
}
}
출력:
생성자 호출됨
i 값: 5
위 예제에서 Main() 생성자를 생성했습니다. 여기서는 매개변수를 받지 않으므로 인수 없는 생성자입니다.
생성자가 private으로 선언된 것을 주목하세요.
생성자가 private으로 선언되면 클래스 외부에서 접근할 수 없습니다. 따라서 private 생성자를 사용하면 클래스 외부에서 객체 생성이 금지됩니다.
여기서는 같은 클래스 내부에서 객체를 생성하므로 프로그램은 생성자에 접근할 수 있습니다. 더 알아보려면 Java Private 생성자 구현 방문.
그러나 클래스 외부에서 객체를 생성하려면 생성자를 public으로 선언해야 합니다.
예제 3: Java public 인수 없는 생성자
class Company {
String name;
// public 생성자
public Company() {
name = "Programiz";
}
}
class Main {
public static void main(String[] args) {
// 다른 클래스에서 객체 생성
Company obj = new Company();
System.out.println("회사 이름 = " + obj.name);
}
}
출력:
회사 이름 = Programiz
추천 읽기: Java 접근 한정자
2. Java 매개변수 있는 생성자
Java 생성자는 하나 이상의 매개변수를 받을 수도 있습니다. 이런 생성자를 매개변수 있는 생성자(매개변수 있는 생성자)라고 합니다.
예제 4: 매개변수 있는 생성자
class Main {
String languages;
// 단일 값 받는 생성자
Main(String lang) {
languages = lang;
System.out.println(languages + " 프로그래밍 언어");
}
public static void main(String[] args) {
// 생성자 호출 시 단일 값 전달
Main obj1 = new Main("Java");
Main obj2 = new Main("Python");
Main obj3 = new Main("C");
}
}
출력:
Java 프로그래밍 언어
Python 프로그래밍 언어
C 프로그래밍 언어
위 예제에서 Main()이라는 생성자를 생성했습니다. 여기서는 생성자가 단일 매개변수를 받습니다. 다음 표현식을 주목하세요:
Main obj1 = new Main("Java");
여기서 생성자에 단일 값을 전달합니다. 전달된 인수에 따라 생성자 내부에서 language 변수가 초기화됩니다.
3. Java 기본 생성자
생성자를 만들지 않으면 Java 컴파일러가 프로그램 실행 중에 자동으로 인수 없는 생성자를 생성합니다. 이 생성자를 기본 생성자라고 합니다.
예제 5: 기본 생성자
class Main {
int a;
boolean b;
public static void main(String[] args) {
// 기본 생성자 호출
Main obj = new Main();
System.out.println("기본값:");
System.out.println("a = " + obj.a);
System.out.println("b = " + obj.b);
}
}
출력:
a = 0
b = false
여기서 생성자를 만들지 않았습니다. 따라서 Java 컴파일러가 자동으로 기본 생성자를 생성합니다.
기본 생성자는 초기화되지 않은 인스턴스 변수를 기본값으로 초기화합니다.
| 타입 | 기본값 |
boolean | false |
byte | 0 |
short | 0 |
int | 0 |
long | 0L |
char | \u0000 |
float | 0.0f |
double | 0.0d |
object | 참조 null |
위 프로그램에서 변수 a와 b는 각각 기본값 0과 false로 초기화됩니다.
위 프로그램은 다음과 동일합니다:
class Main {
int a;
boolean b;
// private 생성자
private Main() {
a = 0;
b = false;
}
public static void main(String[] args) {
// 생성자 호출
Main obj = new Main();
System.out.println("기본값:");
System.out.println("a = " + obj.a);
System.out.println("b = " + obj.b);
}
}
프로그램 출력은 예제 5와 동일합니다.
Java 생성자 중요 사항
- 생성자는 객체 인스턴스화 시 암시적으로 호출됩니다.
- 생성자 생성 두 규칙:
생성자 이름은 클래스와 같아야 함.
Java 생성자는 반환 타입이 없어야 함.
- 클래스에 생성자가 없으면 Java 컴파일러가 런타임에 자동으로 기본 생성자 생성. 기본 생성자는 인스턴스 변수를 기본값으로 초기화. 예:
int 변수는 0으로 초기화.
- 생성자는
abstract, static, final이 될 수 없음.
- 생성자는 오버로드 가능하지만 오버라이드 불가능.
Java 생성자 오버로딩
Java 메서드 오버로딩과 유사하게 서로 다른 매개변수를 가진 두 개 이상의 생성자를 만들 수 있습니다. 이를 생성자 오버로딩이라고 합니다.
예제 6: Java 생성자 오버로딩
class Main {
String language;
// 매개변수 없는 생성자
Main() {
this.language = "Java";
}
// 단일 매개변수 생성자
Main(String language) {
this.language = language;
}
public void getName() {
System.out.println("프로그래밍 언어: " + this.language);
}
public static void main(String[] args) {
// 매개변수 없는 생성자 호출
Main obj1 = new Main();
// 단일 매개변수 생성자 호출
Main obj2 = new Main("Python");
obj1.getName();
obj2.getName();
}
}
출력:
프로그래밍 언어: Java
프로그래밍 언어: Python
위 예제에서 두 생성자 Main()과 Main(String language)가 있습니다. 둘 다 language 변수 값을 다른 값으로 초기화합니다.
객체 생성 시 전달된 매개변수에 따라 다른 생성자가 호출되고 다른 값이 할당됩니다.
한 생성자에서 다른 생성자를 호출하는 것도 가능합니다. 더 알아보려면 Java 다른 생성자 호출 방문.
참고: 클래스 변수를 지정하기 위해 this 키워드 사용. this 키워드 더 알아보려면 Java this 키워드 방문.