4주차 미션 : 편의점












4주차 미션을 한 마디로 정하면 '아쉽다' 라고 할 수 있을 것 같다. 
4주차 미션은 1~3주보다 난이도가 월등히 높았다. 미션 초기에는 사실 엄청 설렜다. 이 미션을 내가 완벽하게 구현하면 얼만큼 또 성장해있을까? 라는 기대감 또한 존재했고, 미션 자체도 굉장히 매력적으로 보였기 때문이다. 
다만 코드를 효율적으로 짜기 위해 너무 많은 고민을 하지 않았나? 라는 생각이 든다.
public class Product {
    private final String name;
    private int price;
    private int quantity
    private Promotion promotion;
    
}
위의 방식으로 초기 설계를 진행했다. 하지만 매우 맘에 들지 않았다. 이유는 중복되는 코드가 있기 때문이다. 
해당 코드로 설계를 하면 상품 객체가 2개가 존재하기 때문이다. (프로모션 상품, 일반 상품)
이 코드가 너무 별로여서, 상속을 이용해보기로 했다.
public abstract Product {
	private final String name;
	private int price;
}
public NormalProduct extends Product {
	private int quantity;
}
public PromotionProduct extends Product {
	private int quantity;
}
위와 같은 구조를 가지고, 공통 메서드는 product로 관리, 이후 상속받는 객체가 오버라이딩을 하도록 구조를 바꿔봤다.
효율적인 코드라고 생각했다. 하지만 기능을 하나씩 채워나갈수록 코드가 복잡해졌다. 
물론, 상속과 인터페이스를 아직 잘 활용하지 못한 내 실력 이슈긴 하다.  이때라도 빠르게 방법을 바꿔야했는데, 
예쁜 구조를 유지하고 싶어 억지로 구현을 이어나갔다.
위의 구조를 지켜가며 완성을 했다면 만족했겠지만, 결국 구조를 바꿔 처음부터 코드를 작성했다.
실력이 부족해 내가 원하는 설계를 이어나가지 못 했다는게 너무 아쉬웠다.
미션은 일주일간 진행된다.
그 중 나는 이틀은 다른 사람들과 이전 주차 미션에 대한 회고를 진행한다. 그리고 위의 구조를 유지하려고
코드를 이틀동안 작성했었다. 즉, rollback한 시점에서 나에게 남은 시간은 3일이였다. 
3일... 3일 안에 단위테스트도 작성하고, 주어진 요구사항을 다 완성할 수 있을까? 
뭐 열심히 하면 끝낼 수 있다고 생각했다. 이때부터 하루에 3시간만 자면서, 하루종일 코딩만 했던 것 같다.
Product에 대한 구조를 바꾸고, 처음부터 기능을 구현했다.
public class Product {
	private final String name;
	private int price;
	private Stock stock;
	private Promotion promotion;
}
Stock 객체를 하나 만들어서 Product에 대한 재고를 관리했다.이 구조도 괜찮다고 생각한다.
다만, 상속과 인터페이스를 이용하며 중복 코드를 줄이려고 노력한 시간이 너무 아깝긴 했다. 
이때부터, 기능 하나 짜고, 단위 테스트 작성하고를 반복했다. 이때만 해도, 기능 하나 작성하고, 바로 단위테스트
검증하면서, 내 기준에서 깔끔하게 코드를 작성하고 있었다고 생각한다.

다만, 이후 로직에서 문제가 발생했다. 
프로모션 상품을 적용하는 과정에서 코드를 쉽사리 작성할 수 없었다. 계속 생각해보면서 코드를 작성해봤지만, 내가 원하는 코드가 나오지 않았다.
시간이 촉박했던 탓일까. 더이상 시간을 낭비할 수 없어 이번 프리코스의 목표였던,
생성형 AI 사용없이 스스로 구현하기를 어기고, ChatGPT에게 내 문제점을 알려줬다. 
내가 끙끙대던 문제를 바로 풀어버렸다. 그 쾌감을 잊지 못하고, 계속해서 요구사항에 대해 생각하지 않고,
GPT를 이용해 코드를 작성했다. 
그러던 중, 문제점이 발생했다. 프로모션 재고가 부족할 경우에만
현재{상품명} {수량} 개는 프로모션 할인이 
적용되지 않습니다. 그래도 구매하시겠습니까? (Y/N)
해당 메세지가 나와야하지만, 프로모션 수량이 충분한 경우에도 계속해서 해당 메세지가 나왔다. 
리팩토링을 해야하는데, 내가 작성한 코드가 아니라 아무리 읽어도 이해를 할 수 없었다. ChatGPT 또한 이 문제를 해결해주지 않았다. 이 문제를 해결하기 위해 하루정도 시간을 보냈다. 하지만 해결할 수 없었다. 
결국, 생성형 AI를 사용하기 전 코드로 rollback을 하고, 더러운 코드를 하나씩 리팩토링 하면서 오류를 찾아나가기로 했다.
그 당시에는 정말 시간이 별로 남지 않았었다. 마감까지 이틀도 안 남은 상황이었다. 
(그치만 요구사항 절반도 구현을 못 한 상태...) 
오전 6시쯤에 자면서 계속 코딩을 했다. 하루에 3시간 정도 잤던 것 같다. 
사람이 긴박하면 집중이 잘 된다고, 내 모든 집중력을 쏟아내면서 결국 완성을 하긴 했다. 다만, 테스트 코드를 작성할 시간은 1도 없었다. 


다행히 예제 테스트는 전부 통과했다. 
다만 테스트 코드 부재로 인한 오류가 분명히 존재할 거다. 
완전하게 완성을 못 했다. 
제출 당시 시간이 없어 출력문 포맷팅 또한 맞추지 못 했다. 또한, 멤버십 할인 부분도 내가 원하는 대로 구현하지 못 했다.
멤버십 할인의 요구사항은 다음과 같다.
- 멤버십 회원은 프로모션 미적용 금액의 30%를 할인받는다
- 프로모션 적용 후 남은 금액에 대해 멤버십 할인을 적용한다.
- 멤버십 할인의 최대 한도는 8,000원이다.
이 중, 마지막 요구사항을 만족하지 못 했다.
상품은 여러번 살 수 있다. 즉 프로그램이 여러 번 작동될 수 있는것이다.
하지만 내 코드는 구매 1회를 진행할 때의 한도가 8,000원으로 제한되어 있었고, 다음에 구매를 또 진행하면 다시 한 번 8,000원 한도로 멤버십 할인을 진행할 수 있었다. 
흐름상 말이 안 되었다. 
우리가 편의점에 가서 할인을 받는다고 할 때, 하루에 한 번 max 한도가 있는데...
구매를 여러번 나눠서 하면 한도가 없는건데, 굉장히 이상했다. 
이를 멤버십 할인 코드를 작성할 때 부터 알고 있었지만, 시간이 부족해 해당 로직을 수정하지 못 했다.
즉 예제 테스트는 통과했지만, 위와 같은 이유로 미완성된 코드라고 생각한다. 
아쉽다. 
즐기면서 미션을 하지도 못 했던 것 같다. 
3주차는 코드를 짜면서 너무 즐거웠는데, 4주차가 즐거웠냐?고 하면 별로 즐겁지 않았던 것 같다.
솔직히 말하면 실패라고 생각한다. 하지만 4주차 미션을 통해 얻은 부분도 많다.
가장 크게 느낀 부분은
- 코드를 예쁘고, 깔끔하게 짜는건 중요하다. 하지만 너무 깊게 생각하지 말고, 일단 코딩을 하고, 
 추후에 리팩토링을 하자
- 생성형 AI를 사용하는 본인만의 기준을 정하자. 절대 의존해서 안 된다. 그저 보조수단으로 사용해야한다. 
 사용한다면, 본인만의 사용 기준을 정하자 ex) 메서드 네이밍에 사용한다던지
4주 동안의 프리코스 동안 참 많은 걸 배운 것 같다. 
일급 컬렉션, DI, 정적 팩토리 메서드, 원시값 포장 등등... 
전부 처음 들어보는 내용들이었지만, 지금은 잘 알고 있다. 한 달 동안 이렇게 많이 성장한 것이 사실 믿기지가 않는다. 
물론, 하루에 3시간씩 자면서 코딩하는 날이 많기도 했다. 이것이 우아한 테크코스에서 강조하는 '몰입의 힘' 아닐까?
프리코스는 끝났지만, 1차 합불 여부에 상관없이 코딩 테스트를 준비하려고 한다. 
코딩테스트 준비라기 보다는, 조금 더 나은 개발자로 성장하기가 더 좋은 표현인 것 같다. 
프리코스 기간동안의 미션들을 다시 한 번 풀어보면서, 지금까지 내가 배운 개념들을 적용해보려고 한다.
지난 날들과는 달리, 지금은 일주일이라는 시간 제한이 없다. 천천히, 내가 프리코스에서 배운 개념들을 완벽히 
내 걸로 만드려고 한다! 물론 그 과정에서, 우테코 최종 합격이라는 결과가 따라오면 좋겠지만,
실패해도 너무 크게 좌절하지는 말자.
https://github.com/CodingMasterLSW/java-convenience-store-7-CodingMasterLSW
GitHub - CodingMasterLSW/java-convenience-store-7-CodingMasterLSW
Contribute to CodingMasterLSW/java-convenience-store-7-CodingMasterLSW development by creating an account on GitHub.
github.com
branch - CodingMasterLSW
'우아한테크코스' 카테고리의 다른 글
| 우테코 Level1 1주차 회고 (5) | 2025.02.16 | 
|---|---|
| 우테코[BE 7기] 최종 합격 후기 (22) | 2024.12.28 | 
| 우테코 프리코스[BE 7기] 3주차 회고 (4) | 2024.12.27 | 
| 우테코 프리코스[BE 7기] 2주차 회고 (4) | 2024.12.27 | 
| 우테코 프리코스[BE 7기] 1주차 회고 (6) | 2024.12.27 | 
 
                    
                  