
문제에 주어진 BookMain 코드
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();
}
}
<문제풀이>
package construct.ex;
public class Book {
String title; //제목
String author; //저자
int page; //페이지 수
//코드 완성
Book() {
this("", "", 0);
}
//개발자가 생성자를 정의했기 떄문에 자바가 '기본생성자' 자동으로 만들지 않아서 개발자가 직접 만들어야 한다.
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
제목: Hello Java, 저자: Seo, 페이지: 0
제목: JPA 프로그래밍, 저자: kim, 페이지: 700
생성자는 객체 생성 직후 객체를 초기화 하기 위한 특별한 메서드로 생각할 수 있다.
코드의 구조는 다음과 같습니다:
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();
}
}
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);
}
}
질문 예시: Book 클래스의 Book(String title, String author) 생성자가 어떤 기능을 하는지 설명해 주세요.
답변: Book(String title, String author) 생성자는 책의 제목(title)과 저자(author)만을 매개변수로 받아 객체를 초기화합니다. 페이지 수(page)는 0으로 설정됩니다. 내부적으로 this(title, author, 0)을 호출하여 세 번째 생성자를 사용합니다.
질문 예시: BookMain 클래스의 main 메서드에서 book1, book2, book3 객체를 만들고 호출할 때 입력과 출력이 어떻게 되나요?
답변:
Book book1 = new Book();제목: , 저자: , 페이지: 0Book book2 = new Book("Hello Java", "Seo");제목: Hello Java, 저자: Seo, 페이지: 0Book book3 = new Book("JPA 프로그래밍", "kim", 700);제목: JPA 프로그래밍, 저자: kim, 페이지: 700질문 예시: 이 코드에서 에러가 발생할 수 있는 부분과 그 처리 방법을 설명해 주세요.
답변: 현재 코드에서는 명시적인 에러 처리 로직이 없습니다. 그러나 다음과 같은 부분에서 에러가 발생할 수 있습니다:
Book 클래스의 생성자에서 this() 호출 시 잘못된 인자 전달.에러 처리를 위해 try-catch 블록을 사용하여 예외를 처리할 수 있습니다.
질문 예시: 이 코드를 최적화하거나 리팩토링할 수 있는 방법이 있을까요?
답변:
displayInfo() 메서드를 더 가독성 좋게 출력할 수 있습니다.this()를 사용하여 코드 중복을 최소화했습니다. 이는 이미 최적화된 형태입니다.void displayInfo() {
System.out.println(String.format("제목: %s, 저자: %s, 페이지: %d", title, author, page));
}
질문 예시: this 키워드의 역할을 설명해 주세요.
답변: this 키워드는 현재 객체의 참조를 나타냅니다. 이를 통해 객체의 필드와 메서드를 참조할 수 있습니다. 생성자 내부에서 this()를 사용하면 현재 클래스의 다른 생성자를 호출할 수 있습니다. 이는 생성자 간 코드 중복을 줄이고 일관된 객체 초기화를 돕습니다.