[ Java ] 8장. 생성자의 개념과 목적

ma.caron_g·2021년 10월 5일
0

Java

목록 보기
8/9
post-thumbnail

[ 생성자 ]

- 객체가 생성 될 때 초기화 목적으로 실행되는 목적어

- 객체가 생성되는 순간 자동 호출


[ 특징 ]

- 생성자 이름은 클래스 이름과 동일

- 생성자는 여러 개 작성 가능(생성자 중복)

public class Circle {
	public Circle() {...} // 매개 변수 없는 생성자
	public Circle(int r, String n) {...} // 2개의 매개 변수를 가진 생성자
}

- 생성자는 객체 생성시 한 번만 생성

Circle pizza = new Circle(10, "자바피자"); // 생성자 Circle(int r, String n)호출
Circle donut = new Circle(); // 생성자 Circle() 호출

생성자의 목적은 객체 생성 시 초기화

생성자는 리턴 타입을 지정할 수 없음

public void Circle() {...} // 오류. void도 사용 안 됨

[ 생성자의 선언 및 호출 ]

public class Book { String title; String author;

public Book(String t) { // 생성자
	title = t; author = "작자미상";
}

public Book(String t, String a) { // 생성자 (매개변수1, 매개변수2)
	title = t; author = a;
}

public static void main(String [] args) {
    Book littlePrince = new Book("어린왕자", "생텍쥐페리");
    Book loveStory = new Book("춘향전");
    System.out.println(littlePrince.title + " " + littlePrince.author);
    System.out.println(loveStory.title + " " + loveStory.author);
    }
}

출력 결과

어린왕자, 생텍쥐페리
춘향전, 작자미상


[ 기본 생성자 ]

기본 생성자(default constructor)
매개 변수 없고, 아무 작업 없이 단순 리턴하는 생성자

class Circle {
public Circle() { } // 기본 생성자 }

디폴트 생성자라고도 불림

[ 기본 생성자가 자동으로 생성되는 경우 ]

클래스에 생성자가 하나도 선언되어 있지 않을 때, 컴파일러에 의해 기본 생성자 자동 생성

public class Circle {
    int radius = 0;
    void set(int r) {
    	radius = r;
    }
    double getArea() {
    	return 3.14 * radius * radius;
    }
    //public Circle() {...} 식의 기본 생성자가 없음.
}

public static void main(String args[]) {
    Circle pizza = new Circle();
    System.out.println(pizza.set(5));
}

[ 기본 생성자가 자동으로 생성되지 않는 경우 ]

클래스에 생성자가 선언되어 있는 경우 컴파일러는 기본 생성자를 자동 생성해 주지 않는다

public class Circle {
    int radius = 0;
    void set(int r) {
    	radius = r;
    }
    double getArea() {
    	return 3.14 * radius * radius;
    }
    public Circle(int r) {
    	radius = r;
    }
}

public static void main(String args[]) {

    Circle pizza = new Circle(5);
    System.out.println(pizza.getArea());    
    
    Circle donut = new Circle();
    //무조건 생성되는 생성자와의 표현이 다르므로 객체를 생성 할 수 없음.
    System.out.println(donut.getArea());
}
profile
다른 사람이 만든 것을 소비하는 활동보다, 내가 생산적인 활동을 하는 시간이 더 많도록 생활화 하자.

0개의 댓글