Notice
Recent Posts
Recent Comments
관리 메뉴

Developer Gonie

[2주차] 40. 객체 생성시 호출되는 '생성자' 본문

K-DigitalTraining 강의/1. Java

[2주차] 40. 객체 생성시 호출되는 '생성자'

이대곤 2022. 5. 25. 18:13

* 생성자(Constructor)란?

new 를 통해, 객체의 메모리가 생성된 직후에 자동으로 호출되는 메서드

리턴타입이 없는 메서드인데, 메서드 이름이 클래스의 이름과 같다.

 

생성자를 따로 정의하지 않으면 컴파일러가 자동으로 매개변수없는, 아무일도 하지 않는 디폴트 생성자를 추가한다.

class Member {
	private String id;
	private String passwd;
	
	Member(){ // 컴파일중에 자동으로(디폴트로) 추가될 생성자
	}
}

생성자는 매개변수의 개수 및 타입을 다르게 하여 오버로딩 가능하며, 

인자를 어떻게 주어 객체를 만드냐에 따라 호출되는 생성자가 달라진다.

 

역할은 객체를 생성함과 동시에 그 객체가 가진 멤버변수를 초기화 하는 용도로 사용된다.

 

인자를 받는 생성자를 만들게되면 컴파일 과정에서 디폴트로 생성되는 생성자가 자동으로 추가되지 않는다.

 

클래스 상속을 배우는 과정에서 알게 되겠지만, 어떤 상속을 받은 자식클래스로 인자를 주지 않고 "new 클래스()"를 사용하여 객체를 생성하는 코드를 작성하는데 컴파일이 안되는 상황을 마주할 수 있을 것이다. 이럴땐 인자를 받는 생성자가 존재하지만 인자를 받지 않는 생성자를 추가해주지 않았는지 확인하고 없다면 추가해 줘야 한다.

 

코드

class Member {
	private String id;
	private String passwd;
	
	Member(){
		System.out.println("Member() 호출됨");
	}
	
	Member(String i, String p){
		System.out.println("Member(String i, String p) 호출됨");
		id = i;
		passwd = p;
	}
	
	void setId(String id) {
		this.id = id; 
	}

	void setPasswd(String passwd) {
		this.passwd = passwd;
	}
	
	String getId() {
		return id; 
	}
	
	String getPasswd() {
		return passwd; 
	}
	
	void show() {
		System.out.println(id);
		System.out.println(passwd);
	}
}

public class Ex05_14_생성자 {
	public static void main(String[] args) {

		Member m1 = new Member();
		m1.setId("kim");
		m1.setPasswd("1234");
		m1.show();
		
		System.out.println("-------------------");
		
		Member m2 = new Member("choi","7777");
		m2.show();
	}
}

실행결과

Member() 호출됨
kim
1234
-------------------
Member(String i, String p) 호출됨
choi
7777
Comments