카테고리 없음
[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();
}
}
- 메서드를 활용하여 메인 메서드 내의 코드가 훨씬 간결해졌습니다.
- 이 코드를 바탕으로 간단하게나마 앞으로 객체지향 프로그래밍으로 리팩토링을 진행해보겠습니다.
- 메서드 사용해 점점 더 익숙해지고 있는 것 같습니다.