IT
자바 초기화(Initialization)와 생성자(Constructor)
1. 초기화(Initialization)란?
초기화란 변수에 처음 값을 설정하는 것입니다. 자바에서는 변수나 필드를 여러 방식으로 초기화할 수 있습니다.
자바 초기화 방식 요약
초기화 방식
설명
예시
명시적 초기화
선언과 동시에 값을 지정
int x = 10;
초기화 블록
중괄호 {}를 사용한 블록에서 초기화
static 또는 인스턴스 초기화 블록
생성자 초기화
생성자 내부에서 변수 초기화
this.value = 100;
기본값 초기화
자바가 자동으로 설정 (필드에 한함)
int → 0, boolean → false 등
2. 생성자(Constructor)란?
생성자는 객체를 생성할 때 자동으로 호출되는 특수한 메소드입니다. 클래스 이름과 동일하며, 반환 타입이 없습니다.
생성자의 특징
-
클래스 이름과 동일
-
반환값이 없음 (void도 쓰지 않음)
-
오직 객체 생성 시(new 키워드 사용 시) 자동 호출
-
필요에 따라 오버로딩 가능 (여러 개 정의)
기본 생성자
자바 컴파일러는 사용자가 생성자를 정의하지 않으면 자동으로 기본 생성자를 생성합니다.
public class Person {
String name;
// 기본 생성자 (명시적으로 작성)
public Person() {
name = "홍길동";
}
}
3. 매개변수가 있는 생성자
public class Person {
String name;
public Person(String name) {
this.name = name; // this는 현재 인스턴스를 가리킴
}
}
사용 예:
Person p = new Person("이순신");
System.out.println(p.name); // 이순신
4. 생성자 오버로딩
하나의 클래스에 여러 개의 생성자를 정의할 수 있으며, 매개변수의 개수나 타입으로 구분합니다.
public class Car {
String model;
int year;
public Car() {
this("모델 없음", 0);
}
public Car(String model) {
this(model, 0);
}
public Car(String model, int year) {
this.model = model;
this.year = year;
}
}
5. this() 생성자 호출
하나의 생성자에서 같은 클래스 내의 다른 생성자를 호출할 때 this()를 사용합니다.
public class Book {
String title;
int price;
public Book() {
this("제목 없음", 0);
}
public Book(String title, int price) {
this.title = title;
this.price = price;
}
}
6. 초기화 블록
인스턴스 초기화 블록
객체가 생성될 때마다 실행됩니다. 생성자보다 먼저 실행됩니다.
public class Example {
int number;
{
number = 100; // 인스턴스 초기화 블록
}
public Example() {
System.out.println("생성자 호출됨");
}
}
static 초기화 블록
클래스가 메모리에 최초 로딩될 때 단 한 번 실행됩니다.
public class StaticExample {
static int staticVar;
static {
staticVar = 500;
System.out.println("static 초기화 블록 실행");
}
}
7. 생성자와 초기화 순서
객체가 생성될 때 실행 순서는 다음과 같습니다:
-
필드의 명시적 초기화
-
인스턴스 초기화 블록
-
생성자
8. 정리
개념
설명
명시적 초기화
변수 선언과 동시에 초기값 지정
초기화 블록
생성자 호출 전 실행되는 초기화 영역
생성자(Constructor)
객체 생성 시 호출, 클래스 이름과 동일, 반환형 없음
this 키워드
인스턴스 자신을 가리킴
this()
다른 생성자를 호출할 때 사용
생성자 오버로딩
다양한 인자를 받는 여러 생성자 정의 가능
9. 예제 코드 종합
public class Student {
String name;
int grade;
// 인스턴스 초기화 블록
{
grade = 1;
}
// 생성자 1
public Student() {
this("이름 없음");
}
// 생성자 2
public Student(String name) {
this.name = name;
}
void printInfo() {
System.out.println("이름: " + name + ", 학년: " + grade);
}
public static void main(String[] args) {
Student s = new Student("김영희");
s.printInfo(); // 이름: 김영희, 학년: 1
}
}
댓글
아직 댓글이 없습니다.
로그인 후 댓글을 남길 수 있습니다.