자 기다리고 기다려주신 2편이 따끈따끈하게 준비해 봤습니다..!
만약 재밌었다면.. 1편도 읽어주세요.. 몇 분 안 계셨지만 나름 반응이 뜨거웠다는.. (부끄럽지만 ㅠ.ㅠ)
2023.11.26 - [Tutoring] - [튜터링] 객체지향과 TDD 기법 E.01 (자기소개 및 객체지향 라이브 코딩)
간단하게 요약하자면,
멘토님과 멘티들의 간단한 객체지향 관련된 토론을 했는데
진짜 개발 얘기로 오랜만에 토론식으로 얘기하니까 너무 재밌더라고요ㅠㅠ 이런 개발 토론 스터디? 나중에 만들어서 꾸준히 진행해 봐야겠어요 ㅋㅋㅋㅋ
이번에 진행하게 될 모던 자바 스터디도 개인적인 발표보다는 토론식으로 진행하면 좋겠다고 생각이 들어서 진행 스타일을 그렇게 할 생각입니다!
(이 스터디는 생각보다 분량이 많아서 발표 내용 외 토론 내용을 작성할 수 있을지 고민이 됩니다...)
그렇게 객체지향 관련된 토론이 끝나고 이제 객체지향을 토대로 라이브 코딩을 각자 진행하기로 했습니다..!
토론 내용 궁금하면 1편으로 ㄱㄱ!
멘토님께서 주제를 정해주셨는데 커피 주문 시스템 만들기였습니다
- 카페에 가서
- 키오스크에
- 메뉴를 선택하고
- 주문을 하고
- 완료가 되면
- 커피를 점원한테 받는
다들? 아시겠지만 객체지향의 사실과 오해에서 1장 나오는 예시예요! 책에서 봤던 내용이라 오히려 반가운 예제네용 :)
그렇게 대략 10분~15분 정도 라이브 코딩을 진행했습니다.. (제 실력이 부족한 거겠지만.. 시간이 너무 짧았어요!! ㅠ_ㅠ)
ASUS님, LG님 그리고 저 세명 다 당황해하며 우당탕탕 급하게 라이브 코딩을 시작했습니다..
어느덧 시간이 지나고 이제 한 명 한명 구현한 코드를 발표? 시간이 와버렸어요.. (민낯이 드러나게 된 시간 흑..)
순서는 ASUS님, 저 그리고 LG님 이렇게 진행하게 되었는데, 각자의 스타일이 다를 테니깐 기대가 되는 시간이었어요..!
다른 분들은 어떻게 생각하고 구현할까 궁금해하면서 코드를 구현했었거든요ㅋㅋㅋㅋㅋ
코드가 좀 기억이 난다면.. 작성을 할 텐데.. 기억이 나지를 않아서 코드 스타일을 최대한 생각나는 대로 표현해 보겠습니다....... 제가 조금만 더 지니어스 했더라면 아숩네용... 흑
ASUS님은 이제 코드 스타일이 멘토님이 말씀하시기를? 아직 공부를 진행한 지 오래된 거는 아니라서 순수 객체지향의 코드를 구현하기보다는 해당 주제의 API를 만들려는? 느낌이 강했다. 아닐 수도 있어요...! 기억나는 대로..!
(몰론, 본인도 처음에 이렇게? 하려다가 멘토님의 의도랑 다르다고 느껴서 다시 작성했습니다.. ㅋㅋㅋㅋ.. ㅠㅠ)
그리고 제 코드는 앞서 말한 거처럼 다시 구현하느라.. 실속이 없는 채로 마무리가 된 느낌이었다..ㅠㅠ
발가벗겨진 기분이지만,,, 기록을 위해 코드를 남깁니다.. (다시 날리고 하느라 시간이 없어서 이런 겁니다 정말...!)
**** 안구 보호를 위해 코드는 생략하고 넘어가주세요. ****
public class Customer {
protected Customer() {
}
public void orderMenu() {
...
}
}
public class Order {
private CoffeeType coffeeType;
protected Order() {
}
public Order(CoffeeType coffeeType) {
this.coffeeType = coffeeType;
}
}
public enum CoffeeType {
LATTE, AMERICANO, CAPPUCCINO
}
import org.example.CoffeeType;
public class Kiosk {
private Employee employee;
public Kiosk() {
}
public Kiosk(Employee employee) {
this.employee = employee;
}
public Order orderCoffee(CoffeeType coffeeType) {
return new Order(coffeeType);
}
}
public class Employee {
protected Employee() {
}
public void makeCoffee() {
...
}
}
와 진짜 너무 엉망이네요.. 변명을 하자면... 머리에 정리가 안 된 상태로... 너무 급하게 만들었다고요 ㅜㅜㅜ.... 다시 돌아가고 싶다... 진짜 똥멍청이 같네요 정말....
코드 설명을 적다가 지워버렸습니다.. 이상한 똥 같은 코드에 왜 이러쿵저러쿵 설명을 굳이... 할 필요가 없어 보이네요..
그냥 다들 무시해 주세요...ㅠㅠ
그리고 마지막으로 LG님께서 코드를 구현하신 거를 다 같이 봤는데, LG님도 프로젝트가 생성이 안돼서 당황하셔서 다른 프로젝트에 작성하셨는데도 불구하고.. 다같이 시간이 부족했는데도 완성도가 가장 좋으셨습니다 :)
(아니 세명 다 우당탕탕 했네요 ㅋㅋㅋㅋ;;)
객체지향스럽기도 하며 그래도 결과로 커피 주문완료 됐다는 문구가 나오는까지 완성을 하셨더라고요..!
코드는 깃에 올린 게 아니라 제가 공유를 할 수 없네요 ㅠ.ㅠ
제가 저 포함 세명의 코드를 봐서 생각한 것과 똑같이 멘토님께서도 똑같이 ASUS님은 이제 막 객체지향에 대해 공부를 하시는 느낌, 저는 객체지향을 공부한 느낌, LG님은 다듬어진? 느낌이라는 똑같은 얘기를 들었네요..
다들 시간도 부족하고.. 당황을 한 탓에 부족한 모습을 많이 보인 것 같습니다.. (프로페셔널함이 부족했네요 하하..)
암튼 민망하니 라이브 코딩은.. 여기까지만 얘기를 하고..
이제 멘토님께서 직접 TDD 방식으로 객체지향에 대해 라이브 코딩을 설명을 해주셨습니다..!
(진짜 이때부터 신세계였습니다..)
우선, TDD란 테스트 주도 개발이라는 개발 방법론으로 Test Driven Development의 약자입니다.
반복 테스트를 위한 소프트웨어 방법론으로 작은 단위의 테스트 케이스를 작성하여 통과시키는 코드를 추가하는 단계를 반복적으로 구현하는 방법입니다.
그리고 짧은 개발 주기의 반복에 의존하는 개발 프로세스로 애자일 방법론 중 익스트림 프로그래밍 개념을 중시합니다!
간단하게 제가 아는 선에서 설명을 하자면, 개발을 시작하기 전 프로그래밍 설계를 미리 정의하고 무엇을 테스트할지 미리 테스트 케이스를 작성합니다. 테스트 코드를 작성하며 버그 및 수정사항을 테스트 케이스에 계속 추가하며 설계를 개선합니다. 그리고 테스트가 통과된 마지막 코드만 개발 단계에서 실제 코드로 구현하는 방법입니다.
이렇게 반복적으로 수행하면 코드의 버그가 줄어들며, 소스코드는 점차 간결해집니다. 또한, 테스트 케이스 작성으로 설계가 자연스럽게 개선되어 재설계 시간이 줄어들어요!
그렇지만.. 생산성이 좀 저하된다는 단점이 있긴 합니다..ㅠ_ㅠ
암튼 다시 돌아와서 멘토님께서 구현을 마치고 방법론에 대해서 다시 설명을 해주셨습니다.
이 또한 제가 기억에 남는 대로.. 최대한 설명을 해보겠습니다 ㅠ... 바로바로 작성을 안 하고 며칠 지나서 2편을 작성하느라... 디테일하게는 기억에 남아 있지를 않네요....
우선 테스트 코드를 작성하기에 앞서 유저 스토리를 정의한다고 합니다. 어떤 환경대로 스토리가 동작할지?를 고민한다고 하셨어요.. 이때까지만 해도 또잉? 이랬는데 그 후에 객체와 메시지를 분리를 해서 구현을 한다고 합니다..
객체와 메시지를 분리한다고 하는데, 우선 메시지가 우선순위였어요..
왜냐 우선 객체한테 메시지를 보내는데 어떤 메시지를 보낼지 구현을 하고 그 안에 어떤 객체가 필요할지 후에 생각을 하셨습니다.
메시지란, 객체지향에서 객체들이 서로 유기적으로 상호작용을 하는 하는데, 여기서 객체가 다른 객체에 접근하는 방법을 말합니다.
예를 들어, 커피를 주문한다고 하면 우선 주문을 한다는 스토리가 있습니다.
그럼 이제 유저가 커피를 주문할 테니 어떻게 유저가 커피를 주문할지 메시지를 만드는 겁니다..
메시지를 전달해야 주문이 될 테니깐요!
이런 식으로 메시지를 먼저 작성하고 그 후에 누가 누구한테 메시지를 전달하는지? 생각해서 구현하는 방법이었습니다..? 맞을 거예요.. ㅠ (튜터링 때 한번 더 여쭤보고 수정하겠습니다..!!)
이런 식으로 개발을 진행하며 DB 설계를 후반부에 하신다고 합니다.. 여기서 진짜 신세계ㅠㅠㅠㅠ
맨날 사이드 프로젝트를 진행하며.. 설계를 밥먹듯이 갈아엎었는데... DB설계를 마지막에 한다니... 신세계였습니다..
요구사항에 따라 DB가 계속 바뀔 수 있는 상황도 있기도 하고..
멘토님께서 구현한 코드는.. 제가 기억이 잘 안 나서... 이번에 제가 (다른 스터디원분들한테 민폐짓을.. 방법론이 너무 재밌어서 과제로 내달라고..) 과제를 받아냈으니 한번 과제 작성하고 리뷰를 받은 후에 3탄으로 글을 작성해 보겠습니다ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
죄송해요 다들 바쁘실 텐데 저 때문에 과제를...ㅠ_ㅠ
'Tutoring' 카테고리의 다른 글
[튜터링] 객체지향과 TDD 기법 E.01 (자기소개 및 객체지향 라이브 코딩) (0) | 2023.11.26 |
---|