생성자(Constructor)

Joy🌱·2022년 12월 29일
0

☕ Java

목록 보기
17/40
post-thumbnail

💁‍♀️ 생성자(Constructor)란,
객체가 new 연산자를 통해 Heap 메모리 영역에 할당될 때 1회성으로 호출되는 리턴타입이 없는 메소드

  • 인스턴스 생성 시 필드 초기화 목적으로 주로 사용
  • 생성자 작성 규칙
    * 기본 생성자 : Public 클래스명( ) { }
    * 매개변수 생성자 : Public 클래스명(자료형 매개변수) { }

🙋‍ 잠깐 ! 왜 생성자를 사용하나요?

  • 객체(인스턴스) 생성 시점에 수행할 명령이 있는 경우
  • '매개변수 생성자'는 객체(인스턴스) 생성 시 바로 필드 초기화하는 목적
  • 작성한 생성자 이외에는 인스턴스 생성 방법을 제공하지 않는다는 의미 (인스턴스 생성 방법 제한)

◼ User Class

public class User {

	// 필드 선언부
	private String id;
	private String pwd;
	private String name;
	private java.util.Date enrollDate;
	
	// 생성자 선언부
	>>> 기본 생성자(default constructor) */
	public User() {
		System.out.println("User 클래스의 기본 생성자 호출함...");
	}
	
	>>> 매개변수가 있는 생성자 [1] 
	public User(String id, String pwd, String name) {
    >>> 필드에 값을 설정하고싶을 때(바로 초기화를 같이 하고싶을 때) 매개변수를 넣음
		this.id = id;
		this.pwd = pwd;
		this.name = name;
		System.out.println("User 클래스의 id, pwd, name을 초기화 하는 생성자 호출함...");
	}
	>>> 매개변수가 있는 생성자 [2]
	public User(String id, String pwd, String name, java.util.Date enrollDate) {
    >>> 완전히 중복되지않는다는 조건하에 매개변수 생성자는 아주 많이 만들 수 있음
//		this.id = id;
//		this.pwd = pwd;
//		this.name = name;
		>>> this() : 동일 클래스 내에 작성한 다른 생성자 메소드를 호출하는 구문 
		>>> this()는 가장 첫 줄에 선언해야하며, 그렇지 않은 경우 컴파일 에러 발생
		this(id, pwd, name);
        >>> 생성자 내부에서 다른 생성자 호출이 가능 (생성자 [1] 호출됨)
        >>> 생성자 [1]과 동일한 기능을 갖고있기 때문에(중복되기 때문에) this로 생성자 1호출
		this.enrollDate = enrollDate;
		System.out.println("User 클래스의 모든 필드를 초기화 하는 생성자 호출함...");
		
	}
	
	// 메소드 선언부
	// setter, getter 작성해야 하지만 생략 //
	
	// 모든 필드가 가지고 있는 값을 문자열로 만들어 반환하는 메소드
	public String getInformation() {
		return "User [id=" + this.id + ", pwd=" + this.pwd + ", name=" + this.name + ", enrollDate=" +this.enrollDate + "]";
	}
}

📌 Ref.

* 생성자 선언부의 작성 위치는 문법적으로 클래스 내부에 작성하면 되지만, 
  통상적으로 필드 선언부와 메소드 선언부 사이에 작성하는 것이 관례
* 초기화할 필드가 여러 개 있는 경우, 초기화 하고싶은 필드의 갯수별로 생성자를 여러 개 만들 수 있음
* 클래스 내에 생성자가 정의되어 있지 않다면 컴파일러에 의해 기본 생성자가 자동으로 추가

◼ Application Class

public class Application {

	public static void main(String[] args) {
		
		>>> 클래스 내에 생성자가 정의되어 있지 않다면 컴파일러에 의해 기본 생성자가 자동으로 추가
		>>> 하지만 생성자가 하나라도 정의 되어 있다면 컴파일러는 기본 생성자를 자동으로 추가하지 않으므로 주의
		
		>>> 기본 생성자 호출
		User user1 = new User(); // : User()는 '생성자'
		System.out.println(user1.getInformation());
		
		>>> 매개변수 생성자 1 호출
		User user2 = new User("user01", "pass01", "유관순");
		System.out.println(user2.getInformation());
		
		>>> 매개변수 생성자 2 호출
		User user3 = new User("user02", "pass02", "홍길동", new java.util.Date()); // java.util.Date() : 실행된 현재 시각을 나타내는 생성자
		System.out.println(user3.getInformation());
		
		>>> 정의되지않은 형식의 생성자는 호출 불가능
//		User user4 = new User("user03", "pass03")
	}
}

💻 Mini Console

User 클래스의 기본 생성자 호출함...
User [id=null, pwd=null, name=null, enrollDate=null]
User 클래스의 id, pwd, name을 초기화 하는 생성자 호출함...
User [id=user01, pwd=pass01, name=유관순, enrollDate=null]
User 클래스의 id, pwd, name을 초기화 하는 생성자 호출함...
User 클래스의 모든 필드를 초기화 하는 생성자 호출함...
User [id=user02, pwd=pass02, name=홍길동, enrollDate=Thu Dec 29 18:27:26 KST 2022]
profile
Tiny little habits make me

0개의 댓글

관련 채용 정보