Skip to content

kiboook/HungryDog-Refactoring

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

41 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

HungryDog - 리팩토링

리팩토링 전 : https://github.com/Nam-Ki-Bok/HungryDog


HungryDog

move

강아지를 키보드로 이동시켜 뼈를 밥그릇에 옮기고 뼈를 움직일 수 없는 공간에 위치시키면 게임이 끝나는 퍼즐게임이다.


문제인식

1. 구조화 되어있지 않은 프로젝트

스크린샷 2020-12-15 오후 9 45 57

기존의 프로젝트는 클래스에 디자인패턴도 적용되어 있지 않고 시스템구조도 적용되어있지 않았다.


2. MainFrame 에 몰려있는 코드

스크린샷 2020-12-15 오후 9 55 27

스크린샷 2020-12-15 오후 9 55 43

위 코드는 MainFrame 클래스의 일부이다. 한눈에 봐도 전혀 다른 기능들이 하나의 클래스 파일에 몰려있는 것을 알 수 있다.


3. 획일화 되어있지 않은 변수명

스크린샷 2020-12-15 오후 10 03 17

변수명을 통해 어떤 의미를 갖는지 알기 어려운 변수와 다른 클래스 파일과 선언 방식이 다른 변수들이 있다.


문제해결

1. State 패턴, 싱글톤 패턴 적용

스크린샷 2020-12-15 오후 10 15 28 스크린샷 2020-12-15 오후 10 17 38

디자인 패턴이 적용 되어 있지 않았던 기존 프로젝트를 State 패턴으로 바꾸기 위해 기초 틀을 마련하였다.

State 인터페이스를 생성 해 main, rank, playing, gameOver, gameClear, nextStage 상태를 정의하고

프레임을 가진 Game 객체에 대한 상태를 정의해 그 상태에 맞는 패널을 Game 프레임에 추가 해 주는 방식으로 구조화 했다.

예를 들어 게임의 상태가 main 인 경우에는 main 패널을 프레임에 붙여주고 랭킹 버튼을 누르면 게임이 rank 상태로 바뀌어 현재 프레임에 있는 main 패널을 지운 뒤 rank 패널을 붙여주게 된다.

플레이 패널을 제외한 모든 패널에 싱글톤 패턴을 적용 해 상태가 바뀔 때 마다 계속 패널을 생성해 프레임에 붙이지 않고 처음 만들었던 패널을 가져와 붙이도록 하였다.

덕분에 기존의 코드에서는 새로운 기능을 추가하기 굉장히 어려웠지만 지금은 새로운 기능을 추가하고 싶은 경우 그 상태와 패널만 추가해주면 가능하게 되었다.


2. 랭킹 관련 리팩토링

기존 프로젝트는 랭킹을 텍스트 파일에 저장을 하는 방식이여서 우선 데이터베이스에 저장을 한 뒤 가져오게 바꿨다.

기능을 바꾼 뒤 리팩토링을 하였는데 RankPanel 클래스에는 이전 랭킹을 지우는 메소드, 랭킹을 출력하는 메소드, 랭킹 진입 여부를 출력하는 메소드를 옮겼고, Rank 클래스에는 데이터베이스를 연결 해 주는 메소드와 점수를 데이터베이스에 입력하는 메소드를 넣었다.


3. MVC 패턴 적용

스크린샷 2020-12-15 오후 10 46 30

다른 팀원들도 모두 리팩토링을 마친 뒤, 만들어진 클래스 파일을 Model, View, Controller 패키지로 나누었다.

나누면서 생긴 오류를 수정하고 클래스 파일들의 변수 명, 메소드 명을 정리하였다.


느낀점

디자인 패턴이라던지 구조화가 적용 되어있지 않은 코드를 구조화 하고

디자인 패턴을 적용 시키는 작업을 처음 해보았는데 굉장히 재미있었다.

디자인 패턴을 적용하면 유지보수가 쉽다고 말로만 들어서 직접적으로 경험해 볼 일이 없었는데

이번 기회에 직접적으로 느낄 수 있어 아주 좋았다.

About

2020 3-2 문제해결기법 리팩토링 수업

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages