KH/JAVA

# 18 생성자(Constructor) , new

오늘의 진 2022. 7. 15. 10:33

생성자(Constructor)

 

: 생성자는 객체가 만들어질 때 자동으로 호출되는 메서드이고 일반적인 메서드와 몇 가지 차이점이 있다.

 

1. 생성자는 메소드의 반환 자료형을 표시하지 않는다.

2. 생성자는 객체가 생성될 때 자동으로 호출된다.

3. 생성자의 이름은 클래스 이름과 같다.(클레스 이름과 다르면 메소드)

 

이러한 생성자의 사용 용도는 객체의 초기화 과정을 처리하기 위함이다.

생성자는 객체가 생성될때 한 번만 수행되는 특수한 메서드이다.

생성자 호출은 new 키워드가 수행되면서 호출한다.

만약 클래스를 정의할 때 생성자를 만들지 않으면 객체 생성 시 자바에서 자동으로 생성자를 만들어 준다.

 

( 자동으로 만들어지는 생성자 모습 )

클래스명(       )  

{           }

메서드의 매개변수와 본문이 전혀 없는 형태. 이러한 생성자를 디폴트 생성자라고 한다. 

결국 사용자가 생성자를 만들지 않아도 자동으로 생성되는 디폴트 생성자가 있기 때문에

모든 클래스는 최소 한 개 이상의 생성자가 있다.

 

생성자 특징

- 메서드의 이름이 클래스의 이름과 동일하다.

-메서드의 반환 값이 없다.

-객체를 생성할 때 자동으로 호출된다.

-객체를 초기화하는 용도로 사용한다.

 

생성자의 기본형식
[public / protected/ private] 클레스이름(매개변수){

초기화 문장들 ;
}

 

 

new 키워드

: new 키워드는 객체 생성과 관련된 일을 처리한다.

 

1.객체 생성을 위해 매모리를 할당한다.

2.할당된 메모리의 시작위치를 객체 참조 변수에 전달한다.

3.생성자를 호출한다.

 

new 키워드는 객체 생성과 관련된 모든 일을 처리한다.

(예)

MyTv obj = new MyTv(  );

 

(예시) - 생성자

class Info {
	private String name;
	private int age;
	private char sex;

	public Info(String n, int a, char s) { //생성자
		//매개변수가 있는 생성자를 하나라도 만들면 디폴트 생성자는자동 생성되지 않는다.
        // 필요시 직접 적어주어야 한다. 
		name = n; // 변수들 초기화 
		age = a;
		sex = s;
	}

	public void display() {   //정보출력 메소드
		System.out.println("이름 : " + name);
		System.out.println("나이 : " + age);
		System.out.println("성별 : " + sex);
	}
}

public class InfoExe {
	public static void main(String[] args) {

		Info obj1 = new Info("홍길동", 27, 'm'); //obj1 초기화
		Info obj2 = new Info("수선화", 36, 'f'); //obj2 초기화

		obj1.display();
		obj2.display();

	}

}

매개변수가 있는 생성자를 하나라도 만들면 디폴트 생성자는자동 생성되지 않는다.

위의 예시에서는 디폴트 생성자가 없음으로 Info obj = new Info (  ) ;   가 불가능

필요시 직접 기본 생성자 Info ( )  {      }  를 적어 주어야 한다. 

 

(예시) - 생성자와 Overloading

class Info2 {
	// 맴버변수
	private String name;
	private int age;
	private char sex;

	// 생성자 Overloading
	// 두메소드가 같은 이름을 갖고 있으나 인자의 수나 자료형이 다른경우를 말한다.

	public Info2(String n, int a, char s) {
		name = n;
		age = a;
		sex = s;
	}

	public Info2(String n, int a) {
		name = n;
		age = a;
		sex = 'm';
	}

	public Info2(String n, char s) {
		name = n;
		age = 77;
		sex = s;
	}

	public Info2(String n) {
		name = n;
		age = 25;
		sex = 'f';
	}

	public Info2() {
		name = "해바라기";
		age = 36;
		sex = 'm';
	}

	public void display() { // 맴버 메소드
		System.out.println("이름 : " + name);
		System.out.println("나이 : " + age);
		System.out.println("성별 : " + sex);

	}

}

public class InfoExe_2 {
	public static void main(String[] args) {

		Info2 info1 = new Info2("백일홍", 17, 'f');
		Info2 info2 = new Info2("들국화", 33);
		Info2 info3 = new Info2("맨드라미", 'm');
		Info2 info4 = new Info2("26", 'f');
		Info2 info5 = new Info2("Annonymous");
		Info2 info6 = new Info2();

		info1.display();
		System.out.println();

		info2.display();
		System.out.println();

		info3.display();
		System.out.println();

		info4.display();
		System.out.println();

		info5.display();
		System.out.println();

		info6.display();
		System.out.println();

	}

}