-
생성자JAVA/개념 - 김영한 강의 2024. 8. 24. 23:33
생성자(Constructor)
- 객체 생성 후 바로 초기값을 할당해야하는 경우가 많음. 이를 계속 반복하기보다 편리하게 객체를 사용할 수 있도록 생성자를 사용. 생성자를 사용하면 객체를 생성하는 시점에 즉시 필요한 기능을 수행할 수 있기에.
- 생성자의 이름은 클래스 이름과 같아야 한다. 따라서 첫 글자도 대문자로 시작한다.
- 생성자는 반환 타입이 없다. 비워두어야 한다.
- 나머지는 메서드와 같다.
public class MemberConstruct { String name; int age; int grade; // MemberConstruct << 얘가 생성자 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; } }
public class ConstructMain1 { public static void main(String[] args) { //객체생성 //()는 생성자 인수 부르기 MemberConstruct member1 = new MemberConstruct("user1", 15, 90);
객세를 생성하고 메모리에 만들어지자마 "user1", 15, 90 <<이걸 호출해준다.
생성자 호출
- 생성자는 인스턴스를 생성하고 나서 즉시 호출된다.
- 생성자를 호출하는 방법은 다음 코드와 같이 new 명령어 다음에 생성자 이름과 매개변수에 맞추어 인수를 전달하면 된다.
new 생성자이름(생성자에 맞는 인수 목록)
new 클래스이름(생성자에 맞는 인수 목록)
*참고로 생성자이름이 클래스 이름이기 때문에 둘다 맞는 표현이다.- new MemberConstruct("user1", 15, 90) << 이렇게 하면 인스턴스를 생성하고 즉시 해당 생성자를 호출한다.
- 여기서는 Member 인스턴스를 생성하고 바로 MemberConstruct(String name, int age, int grade) 생성자를 호출한다.
- 참고로 new 키워드를 사용해서 객체를 생성할 때 마지막에 괄호 () 도 포함해야 하는 이유가 바로 생성자 때문이다. 객체를 생성하면서 동시에 생성자를 호출한다는 의미를 포함한다.
생성자 장점
1) 중복 호출 제거
생성자가 없던 시절에는 생성 직후에 어떤 작업을 수행하기 위해 메서드를 한 번 더 호출해야 했다.
MemberInit member = new MemberInit(); member.initMember("user1", 15, 90);
여기서 initMember(...)를 호출하지 않으면 어떻게 될까? 프로그램은 작동하지만 이름, 나이, 성적 데이터가 없는 상태로 프로그램이 동작하게 된다.
생성자 덕분에 객체를 생성하면서 동시에 생성 직후에 필요한 작업을 한 번에 처리할 수 있게 됐다.
또한 객체를 생성할 때 직접 정의한 생성자가 있다면 그 생성자를 반드시 호출해야 한다(데이터가 없는 상태는 발생하지 않는다)
MemberConstruct member = new MemberConstruct("user1", 15, 90);
생성자를 사용하면 필수값 입력을 프로그래밍 언어 차원에서 보장받을 수 있다.
기본 생성자
- 매개변수가 없는 생성자를 기본 생성자라 한다
- 클래스에 생성자가 하나도 없으면 자바 컴파일러는 매개변수가 없고 기본 생성자를 자동으로 만들어준다(우리 눈에는 보이지 않는다)
- 생성자가 하나라도 있으면 자바는 기본 생성자를 만들지 않는다
public class MemberDefault { String name; //기본 생성자 public MemberDefault() { } }
Q. 왜 자바는 기본 생성자를 자동으로 만들어줄까?
만약 자바에서 기본 생성자를 만들어주지 않는다면 생성자 기능이 필요하지 않은 경우에도 모든 클래스에 개발자가 직접 기본 생성자를 정의해야 한다. 생성자 기능을 사용하지 않는 경우도 많기 때문에 이런 편의 기능을 제공한다.
'JAVA > 개념 - 김영한 강의' 카테고리의 다른 글
접근제어자 / 캡슐화 (0) 2024.08.30 생성자 -오버로딩(Overloading)과 this() + 오버라이딩(Overriding) (0) 2024.08.25 기본형과 참조형 (0) 2024.08.13 왜 개체지향을 할까? - 예제 (0) 2024.08.11 왜 객체지향을 할까? (0) 2024.08.11