ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 자바 step5 - Constructor
    Java 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

    댓글

Designed by Tistory.