-
자바 step5 - ConstructorJava 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가지 다 전될되야 실행된다.
'Java' 카테고리의 다른 글
자바 step7 - Array(1) (0) 2022.10.25 자바 step6 - WrapperClass(데이터 type 변경) (0) 2022.10.25 자바 step4 - Method(2) (0) 2022.10.25 자바 step4 - Method(1) (0) 2022.10.25 자바 step3 - Class(객체생성) 상속(2) (0) 2022.10.24