생성자란?
- 생성자란 new 연산자에 의해서 단 한 번 호출되는 단위이다. 객체는 new 연산자에 의해서 무조건 단 한 번 호출된다.
this()
- this는 인스턴스 자신의 참조값을 가리킨다.
예시 코드
MemberConstruct
package construct;
public class MemberConstruct {
String name;
int age;
int grade;
public MemberConstruct(String name, int age) {
this.name = name;
this.age = age;
this.grade = 50;
}
public MemberConstruct(String name, int age, int grade) {
System.out.println("생성자 호출 name= " + name + ",age= " +age + ",grade= " + grade);
this.name = name;
this.age = age;
this.grade = grade;
}
}
생성자는 메서드와 비슷하지만 다음과 같은 차이가 있다.
- 생성자의 이름은 클래스 이름과 같아야 한다. 따라서 첫 글자도 대문자로 시작한다.
- 생성자는 반환 타입이 없다. 비워두어야 한다.
- 나머지는 메서드와 같다.
ConstructMain1
package construct;
public class ConstructMain1 {
public static void main(String[] args) {
MemberConstruct member1 = new MemberConstruct("user1", 15, 90);
MemberConstruct member2 = new MemberConstruct("user2", 16, 80);
MemberConstruct[] members = {member1, member2};
for (MemberConstruct member : members) {
System.out.println("이름: " + member.name + " 나이: " + member.age + " 성적: " + member.grade);
}
}
}
생성자 호출
- 생성자는 인스턴스를 생성하고 나서 즉시 호출된다. 생성자를 호출하는 방법은 다음 코드와 같이 new 명령어 다음에 생성자 이름과 매개변수에 맞추어 인수를 전달하면 된다.
new 생성자 이름(생성자에 맞는 인수 목록)
new 클래스 이름(생성자에 맞는 인수 목록)
생성자의 장점
- 중복 호출 제거
- 생성자 덕분에 객체를 생성하면서 동시에 생성 직후의 작업을 한번에 처리 할 수 있게 되었다.
기본 생성자
public class MemberInit {
String name;
int age;
int grade;
MemberInit() { //생성자 필요
}
}
- 매개변수가 없는 생성자를 기본 생성자라고 한다.
- 클래스에 생성자가 하나도 없으면 자바 컴파일러는 매개변수가 없고, 작동하는 코드가 없는 기본 생성자를 자동으로 만들어준다.
- 생성자가 하나라도 있으면 자바는 기본생성자를 만들지 않는다.
생성자 - 오버로딩과 this
package construct;
public class MemberConstruct {
String name;
int age;
int grade;
public MemberConstruct(String name, int age) {
this.name = name;
this.age = age;
this.grade = 50;
}
public MemberConstruct(String name, int age, int grade) {
System.out.println("생성자 호출 name= " + name + ",age= " +age + ",grade= " + grade);
this.name = name;
this.age = age;
this.grade = grade;
}
}
- 생성자도 메서드 오버로딩처럼 매개변수만 다르게 해서 여러 생성자를 제공할 수 있다.
- 위 코드에서 이름, 나이, 성적의 매개변수만 다르게해서 두 개의 생성자를 제공
**this()는 생성자 코드의 첫줄에만 작성할 수 있다.
'Java' 카테고리의 다른 글
| Java 기본 - 자바 메모리 구조 및 static (1) | 2024.12.25 |
|---|---|
| Java 기본 - 접근제어자 (0) | 2024.12.21 |
| Java 기본 - 객체지향 프로그래밍 (1) | 2024.12.07 |
| Java 기본 - 기본형과 참조형 (0) | 2024.12.04 |
| Java 기본 - 클래스(배열) (0) | 2024.11.19 |