Java

[Java] 생성자, Constructor

무모한 폴라베어 2021. 1. 24. 00:42

 

 

 

 

 

자바의 개념을 전체적으로 한번 훑는다면 메소드와 클래스에 대해서 배울 것이다. 처음 메소드와 클래스에 대해서 접했을 때는 뭔가... 뭔가.... 뜬구름 잡는 느낌이었다. 무슨 말인지는 알겠고 이렇게 쓰는구나~ 하고 알았는데 자세히 안다고 자신할 수는 없었다. 그러다가 본격적으로 클래스와 메소드에 대해서 부딪히게 되었는데, 그것은 MVC 패턴에 따라서 웹 개발을 할 때 필요한 DTO (Data Tranfer Object) 클래스를 만들 때이다.

 

 

package com.mvc.model.dto;

import java.util.Date;

public class MVCDto {

	private int seq;
	private String writer;
	private String title;
	private String content;
	private Date regdate;
	
	
	public MVCDto() {
		
	}
	
	public MVCDto(String writer, String title, String content) {
		this.writer = writer;
		this.title= title;
		this.content = content;
	
	}
	
	
	public MVCDto(int seq, String title, String content) {
		this.seq = seq;
		this.title = title;
		this.content = content;
		
	}
	
	public MVCDto(int seq, String writer, String title, String content, Date regdate) {
		super();
		this.seq = seq;
		this.writer = writer;
		this.title = title;
		this.content = content;
		this.regdate = regdate;
	}
	
    
    // 코드가 길어서 Getter 와 Setter 는 생략
	
}

 

 

가장 일반적인 게시판 CRUD를 구현할 때 만드는 클래스인데, DB에 저장되어있는 데이터들에 접근하게 도와주는 클래스이다. 코드를 보면 제일 처음 보이는 것은 이 클래스의 필드이다.

 

 

 

private int seq;

private String writer;

private String title;

private String content;

private Date regdate;

 

 

 

만약, 다른 클래스에서 이 클래스를 불러온다면 그것은 이 필드의 값을 쓰기 위해서 이다. 그런데 외부에서 이 클래스를 불러올 때 내가 원하는 값을 불러오려면 어떤 타입의 파라미터를 넣어야 하는지 모를 수도있지 않을까? 그것을 방지해주는 것이 바로 생성자의 역할이다.

 

 

생성자의 역할을 책에서 나오는 것처럼 정의하자면, 클래스로부터 객체를 생성할 때 초기화를 담당하는 역할이라고 할 수 있겠다.

위에서 말한 것처럼 객체를 생성할 때 필요한 파라미터들을 넣어야 하는 메소드를 작성함으로써 초기화를 해준다고 이해하면 될 것 같다.

 

 

생성자를 생성할 때 따라야 하는 규칙은 크게 2가지이다.

 

 

1. 생성자의 이름은 클래스의 이름과 같아야 한다.

2. 생성자는 리턴 값이 없다.

 

 

그런데 코드를 보면 파라미터의 개수가 다른 생성자 3개를 볼 수 있다. 구현하는 클래스에 따라서 클래스의 모든 필드를 사용할 수도 있겠지만 모두 필요하지는 않을 경우가 있을 수 있다. 그럴 때는 생성자 오버라이딩(Overriding)을 사용하면 된다.

 

오버라이딩은 메소드의 재정의이다. 상위 클래스의 필드를 하위클래스에서 사용할때 재정의해서 사용하는 것이다. 

단, 메소드 이름이 같아야 하고, 매개변수와 타입이 같아야 하며 리턴 타입이 같아야 한다는 점을 명심해야 한다.