유수봉 교수의 자바 프로그램 9주차 생성자

  • 오늘은 자바의 생성자에 대해서 알아보도록 하겠습니다.

생성자?

  • 생성자는 객체가 생성될 때 객체의 초기화를 위해 실행되는 메소드다. 이러한 생성자는 자바, C++, C#, Python 등의 모든 객체 지향 언어에 존재한다.

생성자의 선언 및 활용 방법

  • 생성자는 객체가 생성되는 순간에 자동으로 호출되는 메소드로서, 객체에 필요한 초기화를 실행하는 코드를 담아야 한다.
// 생성자 작성 및 활용 예제
public class Circle {

    int radius;
    String name;

    // 생성자 이름은 클래스 이름과 동일하다.
    public Circle() { // 매개변수 없는 생성자

        radius = 1; name = ""; // 필드 초기화

    }

    // 생성자는 리턴 타입 없음
    public Circle(int r, String n) { // 매개변수를 가진 생성자

        // 생성자는 radius와 name 필드 초기화
        radius = r; name = n; // 매개변수로 필드 초기화

    }

    public double getArea() {

        return 3.14 * radius * radius;

    }

    public static void main(String[] args) {

        Circle pizza = new Circle(10, "자바피자"); // 객체 생성. 반지름을 10으로, 이름을 "자바피자"로 초기화

        double area = pizza.getArea();

        System.out.println(pizza.name + "의 면적은 " + area);

        Circle donut = new Circle(); // 객체 생성. 반지름을 1, 이름을 ""로 초기화

        donut.name = "도넛피자"; //이름 변경

        area = donut.getArea();

        System.out.println(donut.name + "의 면적은 " + area);

    }

}

실행 결과

  • 생성자의 이름은 반드시 클래스의 이름과 동일하게 작성해야 한다.
public class Circle { // 클래스 이름 Circle

	public Circle(int r, String n) {....} // 생성자 Circle
    
}

생성자는 여러 개 작성(오버로딩)할 수 있다.

  • 매개변수의 개수와 타입만 다르다면, 클래스 내에 생성자를 여러 개 둘 수 있다. Circle 클래스 역시 매개변수의 개수가 다른 2개의 생성자가 작성되어 있다.
public class Circle {

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

}

생성자는 new를 통해 객체를 생성할 때 한 번만 호출된다.

  • 객체 생성은 반드시 new를 통해서만 이루어지며, 생성자는 이 때 자동으로 한번만 호출된다. 즉, 호출하고 싶을 때 아무 때나 호출할 수 있는 메소드가 아니다.
Circle pizza = new Circle(10, "자바피자"); // 생성자 Circle(int r, String n) 호출
Circle dount = new Circle(); // 생성자 Circle() 호출

생성자에 리턴 타입을 지정할 수 없다.

  • 생성자는 어떤 값도 리턴하지 않기 때문에 아래와 같이 리턴 타입을 선언해서는 안된다.
public Circle() {...} // 리턴 타입을 선언하지 않음
  • 또한, 주의할 점은 리턴 값이 없다고 해서 void를 리턴 타입으로 설정하면 안된다.
public void Circle() {...} // 오류. void를 리턴 타입으로 사용할 수 없다.
  • 하지만, 생성자에서 return문을 사용할 수 없다는 뜻은 아니며, return문은 실행을 끝내고 호출한 곳으로 돌아가라는 명령이므로, 생성자의 실행을 끝내고자 하면 생성자 코드 내 어디서든 return; 문을 사용하면 된다.

생성자의 목적은 객체가 생성될 때, 필요한 초기 작업을 위함이다.

Circle pizza = new Circle(10, "자바피자"); // 생성자 Circle(int r, String n) 호출
  • 위의 객체 생성 문은 Circle 생성자를 호출하여 초기화한다.

  • 즉, 생성자는 객체가 생성될 때, 필드 초기화, 필요한 메모리 확보, 파일 열기, 네트워크 연결 등 객체가 활동하기 전에 필요한 초기 준비를 하는데 이용된다.

// 생성자 선언 및 활용 연습
public class Book {

    String title;
    String author;

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

    }

    public Book(String t, String a) { // 생성자

        title = t;
        author = a;

    }

    public static void main(String[] args) {

        Book littleprince = new Book("어린왕자", "생택쥐페리"); //생성자 Book(string t, String a) 호출

        Book loveStory = new Book("춘향전"); // 생성자 Book(String t) 호출

        System.out.println(littleprince.title + " " + littleprince.author);
        System.out.println(loveStory.title + " " + loveStory.author);



    }

}
  • 실행 결과

좋은 웹페이지 즐겨찾기