java 생성자를 활용한 문제풀이
1. Product 클래스
실습 목표
Product클래스와Run클래스를 작성하여, 기본 생성자로 생성한 객체의 정보를 출력하는 프로그램을 만든다. 구현 내용 설명
- Product 클래스
-
필드(변수)
-
pName:String→ 상품명 -
price:int→ 가격 -
brand:String→ 브랜드명 -
생성자
-
기본 생성자 1개
-
메서드
-
information():void→ 필드에 저장된 모든 정보를 출력 (형식 자유)
- Run 클래스
main메서드에서 다음을 수행:
Product객체를 기본 생성자로 생성information()메서드를 호출하여 출력
단순 테스트를 위해서 Inner Class로 테스트 코드 우선 작성
java
import com.product.Product;
import com.product.Run;
public class practice20 {
public static void main(String[] args) {
Run_in service_in = new Run_in();
service_in.run();
}
// 객체용
public static class Product_in {
String pName;
int price;
String brand;
public Product_in(String pName, int price, String brand) {
this.pName = pName;
this.price = price;
this.brand = brand;
}
public void information() {
System.out.printf("상품명(브랜드) : %s(%s), 가격 : %d \n", pName, brand, price);
}
}
// 실행용
public static class Run_in {
public Run_in() {}
public void run() {
Product product = new Product("신발", 100_000, "나이키");
product.information();
}
}
}코드
service를 해주는 class, 객체 관리용 class 별도로 생성하여 main class에서 service class만 호출하여 원하는 내용 출력 main(실제로 사용될 영역)에서 데이터를 input 받고 싶을 때는 method의 변수로 받아서 호출하게 변경하면 됩니다
java
package com.product;
public class Product {
String pName;
int price;
String brand;
public Product(String pName, int price, String brand) {
this.pName = pName;
this.price = price;
this.brand = brand;
}
public void information() {
System.out.printf("상품명(브랜드) : %s(%s), 가격 : %d \n", pName, brand, price);
}
}java
package com.product;
public class Run {
public Run() {}
public void run() {
Product product = new Product("신발", 100_000, "나이키");
product.information();
}
public void runWithInfo(String item, int price, String brand) {
Product product = new Product(item, price, brand);
product.information();
}
}java
import com.product.Product;
import com.product.Run;
public class practice20 {
public static void main(String[] args) {
Run services= new Run();
services.run();
services.runWithInfo("신발", 100_000, "나이키");
}
}2. Student 클래스
실습 목표
Student클래스의 필드를 초기화 블럭을 이용해 초기값 설정 후, 기본 생성자로 객체 생성 및 정보 출력
구현 내용 설명
- Student 클래스
-
필드(변수)
-
grade:int→ 학년 -
classroom:int→ 반 -
name:String→ 이름 -
height:double→ 키 -
gender:char→ 성별 -
메서드
-
getter/setter 메서드 (각 필드별)
-
information():String→ 모든 필드 정보를 문자열로 반환 -
특징
-
초기화 블럭을 사용하여 각 필드에 기본값 설정
- Run 클래스
main메서드에서 다음을 수행:
- 기본 생성자로
Student객체 생성 information()메서드를 호출하여 출력
손 코딩을 작성하는 경우
java
package com.student;
public class Student {
// 1. 필드(변수) 선언
private int grade;
private int classroom;
private String name;
private double height;
private char gender;
// 2. 초기화 블록 (인스턴스 초기화 블록)
// 객체가 생성될 때마다 필드를 기본값으로 초기화합니다.
{
grade = 1;
classroom = 1;
name = "미지정";
height = 160.0;
gender = 'M';
}
// 기본 생성자
public Student() {
}
// 3. getter / setter 메서드
public int getGrade() {
return grade;
}
public void setGrade(int grade) {
this.grade = grade;
}
public int getClassroom() {
return classroom;
}
public void setClassroom(int classroom) {
this.classroom = classroom;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getHeight() {
return height;
}
public void setHeight(double height) {
this.height = height;
}
public char getGender() {
return gender;
}
public void setGender(char gender) {
this.gender = gender;
}
// String format method를 활용해서 원하는 String을 조립후에 변수로 return하여 사용하거나,
// 해당 method내에서 sout 하여 원하는 출력값을 얻을수 있습니다.
public void information() {
String info = String.format("학년: %d, 반: %d, 이름: %s, 키: %.1fcm, 성별: %c",
grade, classroom, name, height, gender);
System.out.println(info);
}
}
코드 관리 편의성을 위한 @Lombok 및 Builder 패턴 활용
java
import lombok.Builder;
import lombok.Getter;
import lombok.ToString;
@Getter // 모든 필드의 getter 메서드를 자동으로 생성
@ToString // information() 대신 클래스 내부 값을 보여주는 toString() 자동으로 생성
@Builder // 빌더 패턴을 사용할 수 있도록 빌더 클래스 자동으로 생성
public class Student {
// 기본값을 지정하고 싶을 때는 @Builder.Default를 사용합니다.
@Builder.Default
private int grade = 1;
@Builder.Default
private int classroom = 1;
@Builder.Default
private String name = "미지정";
private double height;
private char gender;
// 필요에 따라 기존 information() 형식을 유지하고 싶다면 직접 정의도 가능합니다.
public String information() {
return String.format("학년: %d, 반: %d, 이름: %s, 키: %.1fcm, 성별: %c",
grade, classroom, name, height, gender);
}
}java
public class Main {
public static void main(String[] args) {
// 빌더 패턴을 이용한 유연하고 가독성 높은 객체 생성
Student student = Student.builder()
.name("홍길동")
.grade(3)
.classroom(2)
.height(175.5)
.gender('M')
.build();
System.out.println(student.information());
// @ToString 덕분에 객체 자체를 출력해도 내부 값이 예쁘게 나옵니다.
System.out.println(student);
}
}3. Book 클래스
실습 목표
- 여러 생성자를 활용하여
Book객체를 다양한 방식으로 생성하고 정보를 출력
구현 내용 설명
- Book 클래스
-
필드(변수)
-
title:String→ 제목 -
publisher:String→ 출판사 -
author:String→ 저자 -
price:int→ 가격 -
discountRate:double→ 할인율 -
생성자
-
기본 생성자
-
매개변수 3개 생성자 (제목, 출판사, 저자)
-
매개변수 5개 생성자 (제목, 출판사, 저자, 가격, 할인율)
-
메서드
-
inform():void→ 모든 필드 정보 출력
- Run 클래스
main메서드에서 다음을 수행:
- 기본 생성자로 객체 생성 후
inform()호출 - 3개 매개변수 생성자로 객체 생성 후
inform()호출 - 5개 매개변수 생성자로 객체 생성 후
inform()호출
코드
java
import lombok.Builder;
@Builder
public class Book {
private String title;
private String publisher;
private String author;
private int price;
private double discountRate;
// 기존 요구사항이었던 모든 필드 출력 메서드
public void inform() {
System.out.printf("제목: %s, 출판사: %s, 저자: %s, 가격: %d원, 할인율: %.1f%%\n",
title, publisher, author, price, discountRate);
}
}java
public class Run {
public static void main(String[] args) {
// 1. 기본 생성자 효과 (아무 필드도 세팅하지 않고 build)
Book book1 = Book.builder()
.build();
book1.inform();
// 2. 매개변수 3개 효과 (제목, 출판사, 저자만 세팅)
Book book2 = Book.builder()
.title("자바의 정석")
.publisher("도우출판")
.author("남궁성")
.build();
book2.inform();
// 3. 매개변수 5개 효과 (모든 필드 세팅)
Book book3 = Book.builder()
.title("혼자 공부하는 자바")
.publisher("한빛미디어")
.author("신용권")
.price(28000)
.discountRate(10.0)
.build();
book3.inform();
}
}bash
>> 출력결과
제목: null, 출판사: null, 저자: null, 가격: 0원, 할인율: 0.0%
제목: 자바의 정석, 출판사: 도우출판, 저자: 남궁성, 가격: 0원, 할인율: 0.0%
제목: 혼자 공부하는 자바, 출판사: 한빛미디어, 저자: 신용권, 가격: 28000원, 할인율: 10.0%
댓글
GitHub 계정으로 의견이나 질문을 남길 수 있습니다.