생성자(Constructor)
생성자(Constructor)는 클래스의 인스턴스(객체)가 생성될 때 자동으로 호출되는 메서드이다. 생성자의 주 목적은 클래스의 멤버 변수(속성)을 초기화하는 것이다.
// [1] : 생성자 (Constructor)
// 생성자는 new 키워드로 클래스의 객체(또는 인스턴스)가 생성될 때 제일 먼저 자동적으로 호출되는 특별한 메서드이다.
// 따라서, 객체의 초깃값 설정하는 등의 용도로 많이 사용된다.
// 생성자명은 클래스명과 동일하게 만든다.
// 생성자는 리턴되는 반환값이 없다.
// 생성자는 오버로딩이 가능하다.
// 생성자는 default 생성자란게 있다. -> 클래스내에 생성자가 없다면 default 생성자가 자동호출 -> 클래스명과 동일하고, 받는인자값 X
// [2] : 생성자 위치
// 보통 속성과 메서드 사이에 기술한다.
// 생성자도 메서드이므로 메서드 그룹에 속하는데, 제일 상단에 보통 위치한다.
class Person{
// [1] : 속성 (attribute)
int age;
String name;
// [2] : 생성자 (Constructor)
Person(){
}
// [3] : 메서드 (Method)
void move() {
System.out.println("취미: 걷기");
}
}
public class oop_Exam05 {
public static void main(String[] args) {
// Person 클래스의 인스턴스 생성
Person person = new Person();
// person의 속성 설정
person.age = 25;
person.name = "jin";
// person의 속성 출력
System.out.println("person's Name: " + person.name);
System.out.println("person's age: " + person.age);
// person의 move 메서드호출
person.move();
}
}
생성자 오버로딩
java에서는 같은 이름의 생성자를 여러개 정의할 수 있다. 이를 생성자 오버로딩이라고 한다. 생성자는 오버로딩을 사용하면, 다양한 방식으로 객체를 초기화할 수 있다. 각 생성자는 매개변수의 개수나 타입이 달라야한다.
class Person {
Person() {
// 기본 생성자
}
Person(String name) {
// 이름을 매개변수로 받는 생성자
}
Person(String name, int age) {
// 이름과 나이를 매개변수로 받는 생성자
}
}
디폴트 생성자
생성자를 프로그래머가 정의하지 않는 경우, 컴파일러는 자동으로 매개변수가 없는 생성자를 기본적으로 제공한다. 이를 디폴트 생성자라고 하며, 디폴트 생성자는 멤버변수를 기본값으로 초기화 한다.
default 생성자 기본값
정수형: 0
실수형: 0.0
참조형: null
this 키워드
생성자 내부에서 클래스의 멤버변수를 참조할 때 `this` 키워드를 사용할 수 있다. `this`는 현재 객체를 가리키는 참조이다. 특히 매개변수 이름과 멤버 변수이름이 같을 때 이를 구별하기 위해 사용한다.
class Person {
int age;
String name;
Person(String name, int age) {
this.name = name;
this.age = age;
}
}
생성자에서 다른 생성자 호출
생성자 내에서 `this()`를 사용하여 같은 클래스의 다른 생성자를 호출할 수 있다. 이를 생성자 체이닝이라고 하며, 생성자 체이닝은 코드 중복을 줄이고 가독성을 높이는데 유용하다. `this()`는 반드시 생성자 첫 줄에서 호출해야 한다.
class Person {
Person() {
this("Unknown", 0); // 다른 생성자 호출
}
Person(String name, int age) {
// 멤버 변수 초기화
}
}

'Java > JAVA 100 문제 풀이' 카테고리의 다른 글
| 자바 part.3 문제풀이 - 상속(Inheritance)의 이해와 활용 (0) | 2023.07.24 |
|---|---|
| 자바 part.3 문제풀이 - 생성자 활용, 객체 생성과 초기화 (0) | 2023.07.24 |
| 자바 part.3 문제풀이 - 클래스와 파일명의 관계 (0) | 2023.07.24 |
| 자바 part.3 문제풀이 - Integer.parseInt(string, radix) 진수변환 (0) | 2023.07.24 |
| 자바 part.3 문제풀이 - 문자열을 숫자로 변환하는방법 (0) | 2023.07.23 |