자바
[JAVA] 생성자
planting grass
2025. 3. 6. 09:52
728x90
생성자(Constructor)는 클래스의 객체가 생성될 때 자동으로 호출되는 특별한 메서드다. 생성자는 객체의 초기 상태를 설정하는 역할을 하며, 일반적으로 멤버 변수의 초기화에 사용된다.
생성자의 특징은 아래와 같다.
- 클래스의 이름과 동일해야 한다.
- 생성자의 이름은 클래스의 이름과 동일해야 한다.
- 리턴 타입이 없다.
- 생성자는 void를 포함한 어떠한 반환 타입도 가지지 않는다.
- 객체가 생성될 때 자동으로 실행된다.
- new 키워드를 사용하여 객체를 생성할 때 자동으로 호출된다.
- 주의할점) 생성자를 1줄이라도 작성했다면 컴파일러는 자동으로 작성해주지 않는다.
사용 예시
기본 생성자
생성자를 명시적으로 정의하지 않으면, 자바 컴파일러가 기본 생성자(매개변수가 없는 생성자)를 자동으로 추가해준다.
class Person {
String name;
// 기본 생성자 (컴파일러가 자동 추가)
public Person() {
System.out.println("기본 생성자 호출됨");
this.name = "홍길동"; // 기본값 설정 가능
}
}
public class Main {
public static void main(String[] args) {
Person p = new Person(); // 기본 생성자 호출
System.out.println(p.name); // 홍길동 출력
}
}
매개변수가 있는 생성자(Parameter Constructor)
class Person {
String name;
// 매개변수 있는 생성자
public Person(String name) {
this.name = name; // 멤버 변수 초기화
}
}
public class Main {
public static void main(String[] args) {
Person p1 = new Person("이순신");
Person p2 = new Person("김유신");
System.out.println(p1.name); // 이순신
System.out.println(p2.name); // 김유신
}
}
생성자 오버로딩(Constructor Overloading)
class Person {
String name;
int age;
// 기본 생성자
public Person() {
this.name = "홍길동";
this.age = 20;
}
// 매개변수 1개
public Person(String name) {
this.name = name;
this.age = 20;
}
// 매개변수 2개
public Person(String name, int age) {
this.name = name;
this.age = age;
}
}
public class Main {
public static void main(String[] args) {
Person p1 = new Person();
Person p2 = new Person("이순신");
Person p3 = new Person("강감찬", 45);
System.out.println(p1.name + ", " + p1.age); // 홍길동, 20
System.out.println(p2.name + ", " + p2.age); // 이순신, 20
System.out.println(p3.name + ", " + p3.age); // 강감찬, 45
}
}
this()를 사용한 생성자
this()
는생성자 내부에서 멤버 변수와 지역 변수의 이름이 동일할 때 구분하는 용도로 사용한다.
class Person {
String name;
// 생성자
public Person(String name) {
this.name = name; // this를 사용하여 멤버 변수와 지역 변수 구분
}
}
또한, this()를 이용하면 같은 클래스 내의 다른 생성자를 호출할 수 있다.
이는 중복 코드를 줄이고 유지보수성을 높이는 효과가 있다.
class Person {
String name;
int age;
// 기본 생성자
public Person() {
this("홍길동", 20); // 아래의 두 번째 생성자 호출
}
// 매개변수 2개 있는 생성자
public Person(String name, int age) {
this.name = name;
this.age = age;
}
}
public class Main {
public static void main(String[] args) {
Person p1 = new Person(); // 기본 생성자 호출 -> "홍길동", 20으로 초기화됨
System.out.println(p1.name + ", " + p1.age); // 홍길동, 20
}
}
super()를 이용한 부모 생성자 호출
super()는 부모 클래스의 생성자를 호출할 때 사용된다.
class Animal {
String type;
public Animal(String type) {
this.type = type;
}
}
class Dog extends Animal {
String name;
public Dog(String name) {
super("강아지"); // 부모 클래스의 생성자 호출
this.name = name;
}
}
public class Main {
public static void main(String[] args) {
Dog d = new Dog("바둑이");
System.out.println(d.type + ": " + d.name); // 강아지: 바둑이
}
}
728x90