Java
자바 step5 - Constructor
코딩탕탕
2022. 10. 25. 21:23
Student class 생성
package test.mypac;
/*
* [ 생성자 ]
*
* 1. 클래스명과 동일하다.
* 2. 메소드 모양과 유사하지만 리턴 type 이 없다.
* 3. 객체를 생성할때( new 할때 ) 호출된다.
* 4. 객체를 생성하는 시점에 무언가 준비 작업을 할때 유용하다.
* 5. 생성자를 명시적으로 정의하지 않아도 기본 생성자는 있다고 간주된다.
*/
public class Student {
//생성자
public Student() {
System.out.println("Student 클래스의 생성자 호출됨");
}
}
package test.main;
import test.mypac.Student;
public class MainClass01 {
public static void main(String[] args) {
new Student();
new Student();
new Student();
}
}
<console>
Student 클래스의 생성자 호출됨
Student 클래스의 생성자 호출됨
Student 클래스의 생성자 호출됨
Student class를 상속받지만 변수명으로 객체를 생성하지 않으면 1회용이다.
Member class 생성
package test.mypac;
public class Member {
public int num;
public String name;
public String addr;
//아무런 값도 전달 받지 않는 기본 생성자
//생성자는 형태가 다르다면 여러개 생성 가능
public Member() {
System.out.println("기본 생성자가 호출되었습니다.");
}
//필드에 저장할 값을 전달 받는 생성자
public Member(int num, String name, String addr) {
this.num=num;
this.name=name;
this.addr=addr;
}
}
package test.main;
import test.mypac.Member;
public class MainClass02 {
public static void main(String[] args) {
System.out.println("main 메소드가 시작되었습니다.");
//디버깅 모드로 실행을 해서 m1,m2,m3 를 확인해보세요
Member a=new Member(1, "kim", "Seoul");
Member b=new Member(2, "lee", "Seoul");
Member c=new Member(3, "pack", "Seoul");
//default 생성자를 이용해서 객체를 생성하면 field 에는 기본값이 들어있다.
Member m4=new Member();
}
}
<console>
main 메소드가 시작되었습니다.
기본 생성자가 호출되었습니다.
Member class를 상속받아 객체를 생성하였다. 필드에 num,name,addr 값이 있고, 인자로 전달해주어야되기 때문에 다른 정보로 3개를 생성했다.
MacBook class 생성
package test.mypac;
public class MacBook {
//외부에서 접근 불가하도록 접근 지정자를 private 로 해서 필드 3개 선언하기
private Cpu cpu;
private Memory memory;
private HardDisk hardDisk;
//생성자
public MacBook(Cpu cpu, Memory memory, HardDisk hardDisk) {
this.cpu=cpu;
this.memory=memory;
this.hardDisk=hardDisk;
}
//메소드
public void doGame() {
if(this.cpu==null || memory==null || hardDisk==null) {
System.out.println("부품이 부족해서 맥북이 동작을 할 수 없습니다.");
return; //메소드를 여기서 끝내기
}
System.out.println("신나게 게임을 해요!");
}
}
package test.main;
import test.mypac.Cpu;
import test.mypac.HardDisk;
import test.mypac.MacBook;
import test.mypac.Memory;
public class MainClass03 {
public static void main(String[] args) {
//1. MacBook 객체를 생성해서 참조값을 mac1 이라는 지역변수에 담아보세요.
//2. mac1 지역변수에 들어있는 참조값을 이용해서 doGame() 메소드를 호출해서 게임을 해 보세요.
MacBook mac1=new MacBook(new Cpu(), new Memory(), new HardDisk());
mac1.doGame();
Cpu c1=new Cpu();
Memory m1=new Memory();
HardDisk h1=new HardDisk();
//생성자의 인자로 전달할 객체가 어딘가 준비되어 있다면 해당 객체를 참조해서 전달할 수도있다.
MacBook mac2=new MacBook(c1,m1,h1);
mac2.doGame();
}
}
<console>
신나게 게임을 해요!
신나게 게임을 해요!
MacBook class를 상속받아 객체를 생성하였고 그 인자값으로 Cpu, Memory, HardDisk class가 필요하기에 class를 생성하고 객체를 생성하여 전달하였다. 현 예제에서는 인자값으로 class만 필요하기에 셋의 class에는 아무것도 작성된 것이 없다. doGame메소드는 3가지 class 중 인자값으로 전될 된 것이 없으면 실행되지 않는다. 3가지 다 전될되야 실행된다.