1. Step 2. 객체 지향 설계를 적용해 순서 제어를 클래스로 관리하기
CommerceSystem 클래스 생성하기
- 설명: 커머스 플랫폼의 상품을 관리하고 사용자 입력을 처리하는 클래스입니다.
Product를 관리하는 리스트가 필드로 존재합니다.
main 함수에서 관리하던 입력과 반복문 로직은 이제 start 함수를 만들어 관리합니다.
List<Product> products 는 CommerceSystem 클래스 생성자를 통해 값을 할당합니다.
CommerceSystem 객체를 생성하고 사용하는 main 함수에서 객체를 생성할 때 값을 넘겨줍니다.
- Step 1에서 사용한 클래스들 중 Main 클래스에서 관리하는 기능들을 CommerceSystem 클래스를 이용하여 따로 관리하여 객체 지향 설계를 시도 해보았다.
2. CommerceSystem 클래스
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class CommerceSystem implements Runnable {
@Override
public void run() {
List<Product> products = new ArrayList<>();
Scanner scanner = new Scanner(System.in);
Product product1 = new Product("Galaxy S25", 1200000, "최신 안드로이드 스마트폰", 10);
Product product2 = new Product("iPhone 16", 1350000, "Apple의 최신 스마트폰", 20);
Product product3 = new Product("MacBook Pro", 2400000, "M3 칩셋이 탑재된 노트북", 5);
Product product4 = new Product("AirPods Pro", 350000, "노이즈 캔슬링 무선 이어폰", 40);
products.add(product1);
products.add(product2);
products.add(product3);
products.add(product4);
System.out.println("[ 실시간 커머스 플랫폼 - 전자제품 ]");
int index = 1;
for (Product product : products) {
System.out.println(index + ". " + product.getName() + " | " + product.getPrice() + " | " + product.getDescription());
index++;
}
System.out.println("0. 종료 | 프로그램 종료");
String exit = scanner.nextLine();
if (exit.equals("0")) {
System.out.println("커머스 플랫폼을 종료합니다.");
}
}
}
- Step1 에서 Main 클래스에 작성한 내용을 CommerceSystem 클래스로 옮겨 run() 메서드로 만들어서 활용하도록 만들었다.
3. Main 클래스
public class Main {
public static void main(String[] args) {
CommerceSystem commerceSystem = new CommerceSystem();
Thread thread1 = new Thread(commerceSystem);
thread1.start();
}
}
- Main 클래스에서는 스레드를 실행하는 것 만으로 기능을 구현 할 수 있도록 간결하게 되어있다.
4. 마무리
- 기능들을 따로 관리하는 클래스를 만드는 것이 나중에 코드를 수정하거나 보완할때 더 간편하고 오류가 적을 것 같다는 느낌을 직접적으로 느낄 수 있었다. 왜 여러개의 클래스를 따로 만드는지에 대해서 실습으로 알 수 있었다.