[커널아카데미] 백엔드 부트캠프 12기 2주차 - 회고 feat. 달래게임
🙊 나의 첫 토이 프로젝트 with 자바
이번 주는 자바의 정석에서 객체지향 - 상속 부분 까지 배웠다. 내가 예습한 범위 보다 더 나가서 강의 이해는 잘 못했다. 그놈의 객체지향... 언뜻 알 것만 같다가도 정말 모르겠다. 내가 어렵게 생각해서 어렵게 받아들여지는 것이겠지🥲
기다리고 기다리던 금요일, 집에 와서 저녁 먹으면서 진격거를 보다가 갑자기 머릿속에 번쩍 하고 생각이 하나 들었다. 나는 혼자 상상을 자주 하곤 하는데, 내 방 곳곳에 달래 간식이 뿅 하고 생기면 어떨까? 하는 상상이 들었다. 그러면 달래가 집 안 곳곳 숨겨진 간식들을 찾으며 성취감과 즐거움을 느끼지 않을까?
여긴 현실 세계라서 내가 정한 위치에 간식들이 뿅 하고 생기는 일은 생길 수 없겠지만... 만약 가상 세계라면 가능하지 않을까 싶었다. 그렇게 생각이 이어지다 보니 내가 배운 자바로 간단한 토이프로젝트(?)를 만들어 볼 수 있지 않을까? 하는 결론에 다다랐다! 헷갈리는 객체지향, 클래스, 메서드 등 직접 내가 만들어 보면서 익숙해지고 싶었다.
그리하야 갑자기 저녁 먹다 시작된 대장정!!! 그 이름은 바로
🎮 달래의 간식 시간 게임
👉🏻 깃허브 링크: 달래의 간식 시간
솔직히 아직 너무 부족해서 만들고 싶은 기능은 있는데 어떻게 시작할지 전혀 모르겠는거다😱 그래서 내 전담 과외쌤 GPT 선생님의 힘도 빌렸다.🤭 0.n단계로 미션을 받아서 내가 수행하고 검토 받는 형식으로!
간략하게 프로젝트를 소개하자면 랜덤한 장소 또는 모든 장소에 간식을 뿌리고, 간식을 너무 많이 뿌리지 못하도록 제한을 두는 기능이 들어있다. 그 간식은 달래가 여기저기 돌아다니며 먹거나 지나치거나 한다. 응아도 한다.💩
처음엔 dropSnack()이라는 메서드 하나로 기능을 몰아넣었다. 배열을 작성하고, 랜덤으로 간식 뿌리는 기능을 만들었다.
public class SnackDrop {
static String[] LocationArr = { "[침대]", "[달래 방석]", "[커튼 밑]" };
static String[] droppedSnacks = new String[5];
static int snackCount = 0;
static void dropSnack() {
if (snackCount >= 5) {
System.out.println("더 이상 간식을 뿌릴 수 없습니다!");
return;
}
String location = getRandomLocation();
droppedSnacks[snackCount++] = location;
System.out.println(location + "에 간식을 뿌렸습니다!");
}
}
그러다 이것 저것 추가를 했는데 다 하고 보니 전혀 객체지향스럽지 않았다... 기능이 늘어갈 수록 헷갈리고 관리가 어려웠다. 그래서 나의 본분인 복습! 이번 주 배웠던 객체지향 개념을 떠올리며 조금씩 구조를 바꿔봤다. (노션에 자바의 정석 정리해둔 게 있는데 몇 번을 본지 모르겠다...)
🤖 리팩토링
1. 기능 단위로 메서드 쪼개기
- 랜덤한 장소 뽑기 getRandomLocation()
- 중복된 장소인지 확인 isDuplicateLocation()
- 간식 뿌리기 dropSnack()
2. 상태를 나타내는 변수들을 클래스 수준에서 관리 (static 활용)
- snackCount, droppedSnacks[], LocationArr[] 같은 변수들은 클래스 전체에서 공유 해야 되니까 static으로 선언했다. 아직 객체 생성은 낯설어서😭
3. 게임 규칙에 따른 조건 분기
- '간식은 최대 5번까지만 뿌릴 수 있음'
- '전체 간식을 한번에 뿌리는 dropAllSnack() 기능은 2번 까지만 가능' 이런 규칙들은 canDrop(), canDropAll() 같은 체크용 메서드로 분리했다.
기능별로 메서드를 분리하니까 훨씬 정리된 게 보였다. 아직 더 나눌 수 있겠지만 몰라... 당장은 이렇게만 생각이 났다. 하나하나 쪼개다 보니까 이게 객체지향...인...가..? 인 것 같다! 하는 생각이 들었다. 클래스는 설계도다.. 클래스는 설계도다...
🧞♂️ 다짐
이번 달래 간식 게임은 진짜 그냥 재미로 시작한 건데 하면서 점점 코드가 발전하는 것도 보이고 배운 개념들을 하나씩 적용해가는 게 재밌었다. 그 중에서도 내가 뭔갈 만들어보고 싶단 생각이 들었다는 것! 그걸 실제로 만들었다는 게 가장 뿌듯하다.
앞으로 배움을 내 것으로 만들고 그걸 이 게임에 녹여서 더 발전해나가고 싶다. 나중에 스프링부트도 배우게 되면 UI도 입혀서 정말 게임 처럼 만들어 보고 싶어졌다.
아! 그리고 꼭 만들어 보고 싶은 거 있다. 싸이월드... 🫵🏼 너 내가 꼭 만들어줄게
🐙 정리
이렇게 나의 2주차가 지났다. 어리버리 탔던 1주차와 다르게 이제 꽤 적응이 됐다. 아침에 일어나는 것도, 일찍 잠드는 것도. 그럼 이번 2주차는 된장찌개 도시락, 청담 돈까스, 같은 경력을 가진 2주차 피어님, 행운의 쪼꼬렛, 쓴 흑임자 떡, 칠판 러버 그룹스터디, 그리고 대망의 객체지향!!! 우리 달래공주 간식 게임으로 정리하겠다🥰
다음주도 화이팅!!!!!!👊👊👊