yoni

[15][OOP] Constructor(생성자) 본문

java of educational by contents

[15][OOP] Constructor(생성자)

yoni-1117 2018. 12. 1. 18:41
[01] 생성자(Constructor, 생성자 메소드)
     - 생성자(Constructor)는 객체 생성시 필드(전역변수)에 초기값을 할당할 수 있습니다.
       메소드도 가능하나 객체 생성시 초기값을 전달하면 추가적으로 메소드 호출을 할 필요가
       없습니다.

     - 객체 생성과정: Food food = new Food(); 
       ① Food food: food 객체(변수) 선언
       ② new Food : Food 객체 생성, 메모리 할당
       ③ Food()     : 생성자, 필드(메소드 외부에 있는 변수) 초기화
       ④ =           : 생성된 객체를 객체 변수에 할당

     - 생성자 메소드명은 클래스 이름과 대소문자도 일치해야 합니다. 
       리턴 타입이 선언되면 안됩니다. void 도 안됨.
       예) Book.java --> public Book(){ ... }
            Year.java --> public Year() { ... }
            Rent.java --> public Rent() { ... }  

     - 생성자의 종류
       . 기본 생성자: 필드에 자동으로 기본값을 할당, 파라미터가 없는 생성자, 생략 가능
         예) public Java(){ ... }

       . 인수(Argument, Parameter) 있는 생성자: 필드에 새로운 값을 객체 생성시에 지정 가능.
         예) public Java(String dev, int year){ ... }

     - 생성자는 생략가능하며 생략하면 필드에 데이터 타입의 기본값이 할당됨.
       예) String: null, int: 0, double: 0.0, boolean: false, char: 공백 한칸


        


1. 기본 생성자, 인수있는 생성자의 사용


[실행 화면]
null
0 원
null
--------------
MySQL
0 원
null
--------------
화성 침공
0 원
null
--------------
자바
20000 원
왕눈이
--------------
JSP
25000 원
이로미
--------------
    
 
▷ /src/oop2/Book.java
-----------------------------------------------------------------------------------
package oop2;
 
public class Book {
  String name; // 필드
  int price;
  String author;
 
  public Book() {  // 기본 생성자, 생략 가능
    name = "도서명";
    price = 0;
    author = "저자";
  }
  
  public Book(String name){
    this.name = name;
  }

  public Book(String name, int price, String author){
    this.name = name;
    this.price = price;
    this.author = author;
  }
  
  public void setData(String name) {  // 필드에 값 저장
    this.name = name;
  }
  
  public void setData(String name, int price, String author) {  // 필드에 값 저장
    this.name = name;
    this.price = price;
    this.author = author;
  }
  
  public void print() {
    System.out.println(name);
    System.out.println(price + " 원");
    System.out.println(author);
    System.out.println("--------------");
  }
}
 
 
  
-----------------------------------------------------------------------------------
 

▷ /src/oop2/BookUse.java
-----------------------------------------------------------------------------------
package oop2;
 
public class BookUse {
 
  public static void main(String[] args) {
    Book book = new Book(); // 기본 생성자 호출
    book.print();
 
    book = new Book("MySQL"); // 인수 있는 생성자 호출
    book.print();
    
    book.setData("화성 침공"); // 새로운 값 할당
    book.print();
    
    book = new Book("자바", 20000, "왕눈이"); // 인수 있는 생성자 호출
    book.print();
 
    // 새로운 값을 할당하기 위해 메소드 호출
    book.setData("JSP", 25000, "이로미");
    book.print();
    
 
  }
 
}
 
 
    
 
-----------------------------------------------------------------------------------
 

▷ /src/oop2/BookUse.java
-----------------------------------------------------------------------------------
package oop2;
 
public class BookUse2 {
 
  public static void main(String[] args) {
    Book book = new Book(); // The constructor Book() is undefined
    book.print();
  }
 
}
 
  
-----------------------------------------------------------------------------------  
  
  
* 인수 있는 생성자를 선언할 경우 기본 생성자 선언을 권장합니다.
 
 
 
 
[02] 이클립스에서 생성자 자동 생성하기


▷ /src/oop2/Constructor.java
-----------------------------------------------------------------------------------
package oop2;

 
public class Constructor{
  String brand;
  String cpu;
  int ram;
  int hdd;
  boolean odd;
  String graphic;
  int usb20;
  int usb30;
  boolean wifi;
  String comcase;
 
}
 

-----------------------------------------------------------------------------------

 

1. 기본 생성자의 생성
   Eclipse > Source > Generate Constructors from Superclass...


  


2. 인수있는 생성자의 생성
    Eclipse > Source > Generate Constructors from using Fields...
 

 
  
 
 

3. 자동으로 생성된 생성자

package oop2;
 
// 컴퓨터를 클래스로 선언하세요.
public class Constructor{
  String brand;
  String cpu;
  int ram;
  int hdd;
  boolean odd;
  String graphic;
  int usb20;
  int usb30;
  boolean wifi;
  String comcase;
  
  public Constructor() {
 
  }
 
  public Constructor(String brand, String cpu, int ram, int hdd, boolean odd) {
    this.brand = brand;
    this.cpu = cpu;
    this.ram = ram;
    this.hdd = hdd;
    this.odd = odd;
  }
 
  public Constructor(String brand, String cpu, int ram, int hdd, boolean odd,
      String graphic, int usb20, int usb30, boolean wifi, String comcase) {
    this.brand = brand;
    this.cpu = cpu;
    this.ram = ram;
    this.hdd = hdd;
    this.odd = odd;
    this.graphic = graphic;
    this.usb20 = usb20;
    this.usb30 = usb30;
    this.wifi = wifi;
    this.comcase = comcase;
  }
 
  
}
 
 

4. Eclipse에서의 Class 생성시의 기본 생성자 자동 생성
    - 'Constructors from superclass' 체크
  




Comments