생성자 마무리 및 문제풀이

이동원·2024년 4월 12일
  • 생성자 필요한 이유 :객체를 생성하는 시점에 어떤 작업을 하고싶을때

  • 생성자는 메서드와 비슷하지만 다음과 같은 차이가 있다.

    • 생성자의 이름은 클래스 이름과 같아야 한다. 따라서 첫 글자도 대문자로 시작한다.
    • 생성자는 반환 타입이 없다. 비워두어야 한다.
    • 나머지는 메서드와 같다.
 public class MemberConstruct {
 String name;
 int age;
 int grade;
 MemberConstruct(String name, int age, int grade) {
 System.out.println("생성자 호출 name=" + name + ",age=" + age + ",grade=" +
grade);
 this.name = name;
 this.age = age;
 this.grade = grade;
 }}



MemberConstruct(String name, int age, int grade) {
 System.out.println("생성자 호출 name=" + name + ",age=" + age + ",grade=" +
grade);
 this.name = name;
 this.age = age;
 this.grade = grade;
}
  • 생성자 호출
    • 생성자는 인스턴스를 생성하고 나서 즉시 호출된다.
      생성자를 호출하는 방법은 다음 코드와 같이 new 명령어 다음에
      생성자 이름과 매개변수에 맞추어 인수를 전달하면 된다.
   new 생성자이름(생성자에 맞는 인수 목록)
   new 클래스이름(생성자에 맞는 인수 목록)
  • 생성자는 반드시 호출되어야 한다.
  • 생성자가 없으면 기본 생성자가 제공된다.
  • 생성자가 하나라도 있으면 기본 생성자가 제공되지 않는다. 이 경우 개발자가 정의한 생성자를 직접 호출해야 한다

문제풀이

문제 - Book과 생성자
BookMain 코드가 작동하도록 Book 클래스를 완성하세요.
특히 Book 클래스의 생성자 코드에 중복이 없도록 주의하세요.

package construct.ex;
public class Book {
 String title; //제목
 String author; //저자
 int page; //페이지 수
 //TODO 코드를 완성하세요.
}
package construct.ex;
public class BookMain {
 public static void main(String[] args) {
 // 기본 생성자 사용
 Book book1 = new Book();
 book1.displayInfo();
 // title과 author만을 매개변수로 받는 생성자
 Book book2 = new Book("Hello Java", "Seo");
 book2.displayInfo();
 // 모든 필드를 매개변수로 받는 생성자
 Book book3 = new Book("JPA 프로그래밍", "kim", 700);
 book3.displayInfo();
 }
}

실행 결과
제목: , 저자: , 페이지: 0
제목: Hello Java, 저자: Seo, 페이지: 0
제목: JPA 프로그래밍, 저자: kim, 페이지: 700 ```
정답

package construct.ex;
public class Book {
 String title;
 String author;
 int page;
 // 기본생성자
 Book() {
 this("", "", 0);
 }
 // title과 author만을 매개변수로 받는 생성자
 Book(String title, String author) {
 this(title, author, 0);
 }
 // 모든 필드를 매개변수로 받는 생성자
 Book(String title, String author, int page) {
 this.title = title;
 this.author = author;
 this.page = page;
 }
 void displayInfo() {
 System.out.println("제목: " + title + ", 저자: " + author + ", 페이지: " +
page);
 }
}

0개의 댓글