[STS] 버블버블 - 리팩토링 하기

HootJem's avatar
Jan 06, 2025
[STS] 버블버블 - 리팩토링 하기
지금 코드는 BubbleFrame 이 주체가 되어서 방울이 만들어 지고 있다. 하지만 행위의 주체는 Player 가 되는게 옳다. (플레이어가 방울을 만들어 공격하기 때문에)
버블 프레임의 코드를 주석 처리 해준다.
case KeyEvent.VK_SPACE: //Bubble bubble = new Bubble(mContext); //add(bubble); break; }
 
Moveable 인터페이스에 attack 메서드를 추가해준다. 이때 디폴트로 만든 이유는 bubble 은 어택하지않고, 플레이어가 어택을 하기 때문
public interface Moveable { public abstract void left(); public abstract void right(); public abstract void up(); default public void down() {}; default public void attack() {}; }
 
Player 클래스로 가서 플레이어가 attack메서드를 통해 bubble 을 생성하도록 변경한다.
이때도 BubbleFrame를 가져와야 하기 때문에 생성자 주입을 하도록 코드를 수정한다.
private BubbleFrame mContext; public Player(BubbleFrame mContext) { this.mContext = mContext; initObject(); initSetting(); initBackgroundPlayerService(); }
@Override public void attack() { Bubble bubble = new Bubble(mContext); if(playerDirection == playerDirection.LEFT) { bubble.left(); }else { bubble.right(); } }
 
그리고 처음에 주석 처리했던 BubbleFrame 의 Space를 수정한다.
이 코드를 통해 물방울이 BubbleFrame 이 주체가 되어 생성하지 않고, 플레이어가 생성할 수 있도록 할 수 있다.
 
case KeyEvent.VK_SPACE: player.attack(); break; }
❗ 이렇게 실행하니 프로그램이 제대로 실행되지 않음 ❗
현상 : 스페이스를 누를 때 마다 굉장히 버벅이며 프로그램 종료가 되지 않는다.
Bubble 클래스의 initThread 에서 left, right 메서드를 호출하는데 attack 에서 호출하니 스레드가 충돌하는 모양이다…
스레드가 생성되는 위치가 변경되어야 한다.
private void initThread() { new Thread(()-> { System.out.println("스레드 실행 시작"); if(player.getPlayerDirection()==PlayerDirection.LEFT) { left(); }else { right(); } System.out.println("스레드 실행 완료"); }) .start(); }
문제가 된 코드
위의 코드는 지우고 attack 메서드가 실행될 때 스레드가 만들어지도록 변경하였다.
@Override public void attack() { new Thread(()->{ Bubble bubble = new Bubble(mContext); if(playerDirection == playerDirection.LEFT) { bubble.left(); }else { bubble.right(); } }).start(); }
수정된 코드
 
❗캐릭터는 문제없이 움직이지만 방울이 나오지 않는다.❗
콘솔 로그를 확인하니 호출하는 부분은 문제없이 작동되었다
mContext.add(bubble);
화면에 표시되는 코드가 없어서… 안나왔던것
방울 시작 방울 시작 방울 왼쪽 방울 종료 방울 오른쪽 방울 종료
코드는 정상적으로 작동하더라도 화면에 표시가 되는 것은 BubbleFrame이 수행하기 때문에
add 를 명시해 주지 않으면 화면에 나타나지 않는다(체크하기)
 
 
Share article

[HootJem] 개발 기록 블로그