생성자란?
- 객체가 heap에 할당될 때 객체 안에서 만들어지는 필드의 초기화를 담당한다.
- new 연산자를 할 때 실행되는 함수로 초기값을 생성자 함수의 인자로 전달함.
- 생성자 함수가 매개변수로 전달 받은 값으로 필드를 초기화 하고 객체를 생성해 주기위한 목적
생성자 규칙
- 생성자 선언은 메소드 선언과 유사하나 반환형을 작성하지 않는다. (void, int, char, …)
- 클래스 이름이랑 똑같이 지정해야 한다.(대/소문자)
생성자 종류
- 기본 생성자(매개변수가 없는 생성자)
- 작성하지 않은 경우, 클래스 사용시 JVM이 자동으로 생성해준다.
- 매개변수 있는 생성자
- 객체 생성시 전달 받은 값으로 객체를 초기화 하기 위해 사용함
- 매개변수 있는 생성자 작성시 JVM이 기본 생성자 자동 생성 하지 않음
- 상속에 사용시 반드시 기본 생성자를 작성해야 함
- 오버로딩을 이용하여 작성함
//기본생성자 ([접근제한자] 클래스명(){}) public Product() {} //매개변수 있는 생성자 ([접근제한자] 클래스명(매개변수){(this.)필드명 = 매개변수}) public Product(String pName, int price, String brand) { //모든 필드에 대한 setter 역할 this.pName = pName; this.price = price; Product.brand = brand; }
this.
- 모든 인스턴스의 메소드에 숨겨진 채 존재하는 레퍼런스로, 할당된 객체를 가르킨다. 해당 객체의 주소 값을 담고 있다. (= 레퍼런스 변수)
- 생성된 객체의 주소를 this라고 한다. 객체마다 존재하고 자기 자신의 주소를 보관하고 있다. (집을 찾아가기위해)
//매개변수 있는 생성자 -> 객체 생성과 필드를 초기화하는 두 가지 목적으로 사용한다. //같은 이름의 생성자 혹은 메소드를 작성하려고 하는 경우 오버로딩을 사용한다. public User(String userId, String userPwd, String userName) { //this. 은 메소드 내에 숨겨진 채 존재하는 레퍼런스 변수로, //할당된 객체 자신의 주소를 저장한다. //지역변수와 필드 이름이 동일한 경우 지역변수가 우선시 되기 때문에 //필드를 구분하기 위해서 반드시 this.을 명시해 주어야 한다. this.userId = userId; this.userPwd = userPwd; this.userName = userName; }
오버로딩
- 한 클래스 내에서 파라미터선언부가 다른 생성자를 여러 개 정의하는 것.
오버로딩 성립조건
- 메소드 이름이 같아야한다.
- 매개변수 선언부가 달라야한다.
- 매개변수 타입, 개수, 순서
//기본 생성자 -> 필드의 초기화 역할은 수행하지 못하고 객체만 생성할 때 사용 //매개변수 있는 생성자를 1개 이상 작성하게 되면 //자동생성이 되지 않기 때문에 반드시 명시해야 한다. public User() {} //리턴타입을 명시하게 되면 메소드가 된다. / 대소문자 / () //같은 이름의 생성자 혹은 메소드의 경우 에러 발생한다. /*public User() {}*/ //매개변수 있는 생성자 -> 객체 생성과 필드를 초기화하는 두 가지 목적으로 사용한다. //같은 이름의 생성자 혹은 메소드를 작성하려고 하는 경우 오버로딩을 사용한다. public User(String userId, String userPwd, String userName) { this.userId = userId; this.userPwd = userPwd; this.userName = userName; }
this()
- 같은 클래스의 다른 생성자를 호출할 때 사용 (생성자안에서 첫 줄에 명시)
public User(String userId, String userPwd, String userName, Date enrollDate) { /*this.userId = userId; this.userPwd = userPwd; this.userName = userName;*/ //중복되는 동일한 초기화 하는 내용의 생성자가 존재하는 경우 //this()를 사용할 수 있다. this(userId, userPwd, userName); this.enrollDate = enrollDate; }
User.Run
package com.kh.chap04_constructor.user.controller; import java.util.Date; import java.util.Scanner; import com.kh.chap04_constructor.user.model.vo.User; public class Run { public static void main(String[] args) { User u1 = new User(); u1.information(); User u2 = new User("user01", "pass01", "김진호"); u2.information(); User u3 = new User("user02", "pass02", "홍길동", new Date()); u3.information(); Scanner sc = new Scanner(System.in); System.out.print("아이디를 입력하세요 : "); String userId = sc.nextLine(); System.out.print("비밀번호를 입력하세요 : "); String userPwd = sc.nextLine(); System.out.print("이름을 입력하세요 : "); String userName = sc.nextLine(); User u4 = new User(userId, userPwd, userName, new Date()); u4.information(); } }
'JAVA > 이론 정리 및 예제' 카테고리의 다른 글
[JAVA/자바] #8_1 상속 / 예제 (0) | 2021.09.17 |
---|---|
[JAVA/자바] #6_5 메소드(method)/ 예제 (0) | 2021.09.14 |
[JAVA/자바] #6_3 필드(field)/ 예제 (0) | 2021.09.14 |
[JAVA/자바] #6_2 클래스 (0) | 2021.09.14 |
[JAVA/자바] #6_1 객체지향언어 / 예제 (0) | 2021.09.14 |