카테고리 없음

[JAVA] 객체지향 들어가기 전, 절차지향 프로그래밍에 대하여

코커두드 2024. 4. 30. 03:48

 

 

☕ 들어가기에 앞서

- 저는 커피를 매우 사랑하는 사람입니다. 예. 카페인 러버이자 중독자입니다. 그래서 앞으로의 거의 모든 예시는 커피를 중심으로 이루어지지 않을까 싶습니다.

- 이번 예제는 커피 샷추가, 혹은 연하게(샷제거) 옵션을 다루며 절차지향 프로그래밍에 대하여 학습합니다.

 

1️⃣ 예제 : 커피 샷추가, 혹은 연하게 옵션을 진행함에 따라 샷의 갯수와 가격의 변화를 체크하는 약소한 키오스크 옵션입니다. 우선은 메서드 없이 클래스와 인스턴스로만 간단하게 진행해보았습니다.

아래는 제가 만든 코드 예시입니다.

 

public class CoffeeData {
    int shotAmount = 2;
    int price = 4500;
    int extraShotPrice = 500;
    int leaveOutPrice = -500;
}

 

public class CoffeeOrderMain1 {
    public static void main(String[] args) {
        int americanoPrice = 4500;

        int basicShotQuantity = 2;
        int extraShot = 0;
        int leaveOutShot = 0;
        int shotAmount = basicShotQuantity + extraShot - leaveOutShot;

        int extraShotPrice = 500;
        int leaveOutPrice = -500;


        //커피 주문
        System.out.println("☕ 커피를 주문합니다.");
        System.out.println();

        //샷추가1
        extraShot++;
        shotAmount = basicShotQuantity + extraShot - leaveOutShot;
        System.out.println("☕ 현재 샷: "  + shotAmount);
        int priceAmount = americanoPrice + extraShotPrice;
        System.out.println("💳 아메리카노 주문 가격: " + priceAmount);
        System.out.println();

        //연하게
        extraShot--;
        shotAmount = basicShotQuantity + extraShot - leaveOutShot;
        System.out.println("☕ 현재 샷: "  + shotAmount);
        priceAmount += leaveOutPrice;
        System.out.println("💳 아메리카노 주문 가격: " + priceAmount);
        System.out.println();

        //샷추가2
        extraShot++;
        shotAmount = basicShotQuantity + extraShot - leaveOutShot;
        System.out.println("☕ 현재 샷: "  + shotAmount);
        priceAmount += extraShotPrice;
        System.out.println("💳 아메리카노 주문 가격: " + priceAmount);
        System.out.println();

        //샷추가3
        extraShot++;
        shotAmount = basicShotQuantity + extraShot - leaveOutShot;
        System.out.println("☕ 현재 샷: "  + shotAmount);
        priceAmount += extraShotPrice;
        System.out.println("💳 아메리카노 주문 가격: " + priceAmount);
        System.out.println();


        //총 결제금액
        System.out.println("총 결제금액: " + priceAmount +"원 입니다.");
    }
}

 

- 위의 코드는 절차지향을 따랐지만 문제점이 많습니다.

- 우선 중복 코드가 많아서 코드가 지저분합니다. 메서드를 활용하여 좀 더 깔끔하게 만들어보도록 하겠습니다.

 

2️⃣ 메서드 활용하여 리팩토링

public class CoffeeOrderMain2 {
    public static void main(String[] args) {
        CoffeeData data = new CoffeeData();

        //커피 주문
        System.out.println("☕ 커피를 주문합니다.");
        System.out.println();

        //샷추가1
        System.out.println("===샷추가를 합니다===");
        extraShot(data);
        extraShotPrice(data);

        //연하게
        System.out.println("===연하게를 선택합니다===");
        leaveOutShot(data);
        leaveOutPrice(data);


        //샷추가2
        System.out.println("===샷추가를 합니다===");
        extraShot(data);
        extraShotPrice(data);

        //샷추가3
        System.out.println("===샷추가를 합니다===");
        extraShot(data);
        extraShotPrice(data);


        //총 결제금액
        System.out.println("총 결제금액: " + data.price +"원 입니다.");
    }

    //샷추가
    static void extraShot(CoffeeData data) {
        data.shotAmount++;
        System.out.println("현재 샷: "  + data.shotAmount);
    }

    //연하게
    static void leaveOutShot(CoffeeData data) {
        data.shotAmount--;
        System.out.println("현재 샷: "  + data.shotAmount);
    }
    
    //샷추가 가격
    static void extraShotPrice(CoffeeData data) {
        data.price += data.extraShotPrice;
        System.out.println("💸 샷추가 가격: " + data.extraShotPrice);

        System.out.println("💳 아메리카노 주문 가격: " + data.price);
        System.out.println();
    }

    //연하게 가격
    static void leaveOutPrice(CoffeeData data) {
        data.price += data.leaveOutPrice;
        System.out.println("💸 연하게 가격: " + data.leaveOutPrice);

        System.out.println("💳 아메리카노 주문 가격: " + data.price);
        System.out.println();
    }
}

 

- 메서드를 활용하여 메인 메서드 내의 코드가 훨씬 간결해졌습니다.

- 이 코드를 바탕으로 간단하게나마 앞으로 객체지향 프로그래밍으로 리팩토링을 진행해보겠습니다.

- 메서드 사용해 점점 더 익숙해지고 있는 것 같습니다.