생성자(Constructor)
1. 생성자란?
생성자는 new 연산자로 호출되는 특별한 메소드로 클래스로부터
객체를 생성할 때 호출되어 객체의 초기화를 담당한다.
생성자와 new 연산자에 의해 힙(Heap) 영역에 객체가 생성되고 생성된 객체의 주소가 리턴된다.
생성자의 이름은 클래스의 이름과 같아야 한다.
생성자는 리턴 값이 없다.
모든 클래스는 생성자가 반드시 존재해야 하고 생성자를 하나 이상을 가질 수 있다.
오버로딩이 가능하다.
Practice클래스의 인스턴스를 생성 과정
Practice p = new Practice(); → Practice() : 생성자
- 연산자 new에 의해서 메모리(Heap)에 Practice클래스의 인스턴스가 생성된다.
- 생성자 Practice()가 호출되어 수행된다.
- 연산자 new의 결과로, 생성된 Practice인스턴스의 주소가 반환되어 참조변수 p에 저장된다.
2. 기본 생성자(default constructor)
매개변수가 없는 생성자
생성자가 하나도 없을 때만, 컴파일러가 자동으로 추가해준다.
3. 매개변수가 있는 생성자
메서드와 같이 매개변수를 선언하여 호출 시 값을 넘겨 받아 인스턴스의 초기화 작업에 사용할 수 있다.
// 클래스
class MyInformation {
String name;
int weight;
char gender;
MyInformation (){} // 생성자
MyInformation(String n, int w, char g){
name = n;
weight = w;
gender= g;
}
}
// main
MyInformation m = new MyInformation();
m.name = "ParkHyeonJin";
m.weight = 161;
m.gender = '여';
MyInformation m1 = new MyInformation("ParkHyeonJin", 161, '여');
...
4. 생성자에서 다른 생성자 호출하기 - this(), this
생성자 간에 서로 호출이 가능하다.
조건
- 생성자의 이름으로 클래스이름 대신 this를 사용한다.
- 한 생성자에서 다른 생성자를 호출할 때는 반드시 첫 줄에서만 호출이 가능하다.
- ‘this’는 참조변수로 인스턴스 자신을 가리키며 인스턴스멤버만 사용할 수 있다.
- 클래스 메서드 (static 메서드)에서 사용 불가
this
: 인스턴스 자신을 가리키는 참조변수, 인스턴스의 주소가 저장되어 있고 모든 인스턴스 메서드에 지역변수로 숨겨친 재로 존재한다.
this(), this(매개변수)
: 생성자, 같은 클래스의 다른 생성자를 호출할 때 사용한다.
public class Application {
public static void main(String[] args) {
User user = null; // 참조변수를 null로 초기화
// 기본 생성자로 객체 생성
user = new User();
System.out.println(user.information());
// 매개 변수가 있는 생성자로 객체 생성 (3개의 값을 생성자로 전달)
user = new User("hgggny", "1234", "박현진");
System.out.println(user.information());
// 매개 변수가 있는 생성자로 객체 생성 (5개의 값을 생성자로 전달)
user = new User("hgggny", "1234", "박현진", 29, '여');
System.out.println(user.information());
}
}
public class User {
private String id;
private String password;
private String name;
private int age;
private char gender;
// 기본 생성자 : 객체 생성을 목적으로 만든다.
public User() {
System.out.println("기본 생성자 호출");
}
// 오버로딩 : 동일한 함수 또는 생성자를 매개변수에 따라서 여러개 가능하다
// 매개 변수가 있는 생성자(아이디, 패스워드, 이름)
public User(String id, String password, String name) {
this.id = id;
this.password = password; // 필드의 password = 매개변수의 password
this.name = name;
}
// 매개 변수가 있는 생성자(아이, 패스워드, 이름, 나이, 성별)
public User(String id, String password, String name, int age, char gender) {
// this.id = id;
// this.password = password;
// this.name = name;
// 위 세개의 중복되는 코드를 아래로 정리
// 클래스 내에서 문자열 매개 변수 3개를 가지는 생성자를 호출한다.
this(id, password, name);
this.age = age;
this.gender = gender;
}
public String information() {
// this(id, password, name); // 다른 메소드에서 생성자를 호출하는 것은 불가능하다.
return this.id + "," + this.password + "," + this.name + "," + this.age + "," + this.gender;
}
}
5. 생성자를 이용한 인스턴스의 복사
- 현재 사용하고 있는 인스턴스와 같은 같은 상태의 인스턴스를 하나 더 만들고자 할 때 생성자를 이용 가능하다.
'Java' 카테고리의 다른 글
객체(Object) - 상속(inheritance) (0) | 2022.09.19 |
---|---|
객체(Object) - 변수의 초기화 (0) | 2022.08.24 |
객체(Object) - 오버로딩(Overloading) (0) | 2022.08.23 |
객체(Object) - 변수와 메서드 (0) | 2022.08.23 |
객체(Object) - 클래스와 객체 (0) | 2022.08.22 |