728x90
📋 기존 코드
package class1.ex;
public class ProductOrderMain {
public static void main(String[] args) {
ProductOrder[] orders = new ProductOrder[3];
ProductOrder order1 = new ProductOrder();
order1.productName = "두부";
order1.price = 2000;
order1.quantity = 2;
orders[0] = order1;
ProductOrder order2 = new ProductOrder();
order2.productName = "김치";
order2.price = 5000;
order2.quantity = 1;
orders[1] = order2;
ProductOrder order3 = new ProductOrder();
order3.productName = "계란";
order3.price = 4000;
order3.quantity = 30;
orders[2] = order3;
int totalAmount = 0;
for (ProductOrder order : orders) {
System.out.println("상품명: "+order.productName + "가격: "+order.price+"수량: " + order.quantity);
totalAmount += order.price * order.quantity;
}
System.out.println("총 결제 금액: " + totalAmount);
}
}
이런식으로 생성자를 만들어가며 객체를 생성하는 코드가 있다고 하자.
불필요하게 반복되는 부분이 많다.
이걸 메서드를 활용하여 리팩토링 해보자.
📋 코드 리팩토링
package ref.ex;
public class ProductOrderMain2 {
public static void main(String[] args) {
ProductOrder[] orders = new ProductOrder[3];
orders[0] = createOrder("두부",2000,2);
orders[1] = createOrder("김치",5000,1);
orders[2] = createOrder("계란",4000,3);
printOrders(orders);
int totalAmount = getTotalAmount(orders);
System.out.println("총 결제 금액: " + totalAmount);
}
static ProductOrder createOrder(String productName, int price,int quantity){
ProductOrder order = new ProductOrder();
order.productName = productName;
order.price = price;
order.quantity = quantity;
return order; // order반환
}
static void printOrders(ProductOrder[] orders){
for (ProductOrder order : orders) {
System.out.println("상품명: "+order.productName + "가격: "+order.price+"수량: " + order.quantity);
}
}
static int getTotalAmount(ProductOrder[] orders){
int totalAmount = 0;
for (ProductOrder order : orders) {
totalAmount += order.price * order.quantity;
}
return totalAmount;
}
}
- createOrder(String productName,int price,int quantity)를 생성
- printOrders(ProductOrder[] orders) 생성
- getTotalAmount(ProductOrder[] orders) 생성
📋 입력값을 받도록 수정된 코드
package ref.ex;
import java.util.Scanner;
public class ProductOrderMain3 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("입력할 주문의 개수를 입력하세요: ");
int n = scanner.nextInt();
scanner.nextLine();
ProductOrder[] orders = new ProductOrder[n];
for(int i=0; i<orders.length;i++){
System.out.println((i+1)+"번째 주문 정보를 입력하세요.");
System.out.println("상품명: ");
String productName = scanner.nextLine();
System.out.println("가격: ");
int price = scanner.nextInt();
System.out.println("수량: ");
int quantity = scanner.nextInt();
scanner.nextLine();
orders[i] = createOrder(productName,price,quantity);
}
printOrders(orders);
int totalAmount = getTotalAmount(orders);
System.out.println("총 결제 금액: " + totalAmount);
}
static ProductOrder createOrder(String productName, int price,int quantity){
ProductOrder order = new ProductOrder();
order.productName = productName;
order.price = price;
order.quantity = quantity;
return order; // order반환
}
static void printOrders(ProductOrder[] orders){
for (ProductOrder order : orders) {
System.out.println("상품명: "+order.productName + "가격: "+order.price+"수량: " + order.quantity);
}
}
static int getTotalAmount(ProductOrder[] orders){
int totalAmount = 0;
for (ProductOrder order : orders) {
totalAmount += order.price * order.quantity;
}
return totalAmount;
}
}
Scanner를 사용하여 입력받는 값을 저장하여 메서드를 활용해서 프로그램에 입출력 할 수 있도록 하는 코드이다.
'Coding > JAVA' 카테고리의 다른 글
| [JAVA]OCP(Open-Close Principle) 원칙 (0) | 2024.09.07 |
|---|---|
| [JAVA]상속과 메서드 오버라이딩(@override) (1) | 2024.09.03 |
| [JAVA]NullPointerException (0) | 2024.08.23 |
| [JAVA] 기본형과 참조형 - 변수 대입 (0) | 2024.08.22 |
| [JAVA]기본형과 참조형 (0) | 2024.08.21 |