과감하게 리팩토링을 합니다. 리팩토링이란게 정답이 없습니다만, 뭔가 그래도 사고의 깊이는 느낄 수가 있기 때문에 상당히 조심스럽습니다ㅠ.ㅠ.. (잘 하시는 분이 보시면 답답한 곳도 분명 있을 수 있겠지요...)
이번에 그래도 리팩토링하며 느낀 것은 리팩토링을 하면서 정말 프로그래밍의 재미를 느낄 수가 있었고,
설령 아무도 보지 않을지라도 , 이 강좌 영상을 만들게 된 것을 잘했다고 느꼈습니다...영상을 안 만들었다면 제 스스로 이렇게 다시 한번 생각해볼 기회는 없었고, 기존의 방식대로 코딩을 했을 지도 모를 일이죠.
영상은 다 찍어놨는데..ㅠ. 하아.. ㅠㅋㅋ 마지막 하이라이트 부분을 자꾸 다시 찍게 되네요;;
준비좀 하겠습니다 .
시간 좀 흘렀습니다.
늦었습니다...ㅎㅎㅎ다시 시작해보겠습니다.
이번부터 깃허브 주소를 공유합니다. 깃허브에서 소스코드를 강좌에 맞춰 받아보실 수 있습니다.
하단에 깃허브 공개주소와 사용법이 있습니다.
리플렉션으로도 하는.. 리팩토링이 있는데..사실 리팩토링에서 업로딩을 멈췄었거든요 ㅠㅠ음
어떻게 할지 고려해보겠습니다. 일단 이정도로 업로드합니다 ! ㅎ
했던 일들
여기, 리팩토링에서 주로 했던 일은 다음과 같습니다.
중복의 제거, 향후 유지보수가 편이하도록 성격이 다른 설정정보는 따로 관리.. 를 주로 했었습니다.
동영상을 참조해주시면 될 것같구요^^;
(동영상 링크)
소스코드
ManageView 소스
package view; import java.awt.Component; import javax.swing.JComponent; import javax.swing.JFrame; import javax.swing.JLayeredPane; import javax.swing.JPanel; import view.panel.ClockMessage; import view.panel.ImgClock; import view.panel.MyStarPanel; import view.panel.PanImgload; import asset.Setting; @SuppressWarnings("serial") public class ManageView extends JFrame { private JLayeredPane layeredPane = new JLayeredPane(); //JPanels private JPanel backGround = new PanImgload("img/mainHud_back.png"); private ImgClock imgClock = new ImgClock(); private ClockMessage clockMessage = new ClockMessage(); private MyStarPanel myStarPanel = new MyStarPanel(); public ManageView() { //Configure this Frame setLayout(null); setVisible(true); setTitle("ManageView"); setSize(Setting.bDimen); setDefaultCloseOperation(EXIT_ON_CLOSE); setLocation(Setting.locationX, Setting.locationY); //LayerdPanel and Component Setting , Finally add To this Frame setPanel(layeredPane).setBounds(Setting.bRectangle); setPanel(backGround).setBounds(Setting.bpanRectangle); setPanel(imgClock).setBounds(Setting.imgClockRectangle); setPanel(clockMessage).setBounds(Setting.clockRectangle); setPanel(myStarPanel).setBounds(Setting.bpanRectangle); add(setJLayered(backGround, myStarPanel, imgClock, clockMessage)); //Action Events threadStart(imgClock, clockMessage, myStarPanel); } public static void main(String[] args) { new ManageView(); } // Setting inner Methods private JComponent setPanel(JComponent panel) { panel.setLayout(null); panel.setOpaque(false); return panel; } private JLayeredPane setJLayered(Component...components) { int i = 0; for (Component component : components) layeredPane.add(component, new Integer(i++)); return layeredPane; } private void threadStart(Runnable...target) { for (Runnable runnable : target) new Thread(runnable).start(); } // TODO 계속 들어감 }
기타 뷰쪽 파일들 소스..
package view.panel; import java.awt.BorderLayout; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import javax.swing.JComponent; import javax.swing.JLabel; import javax.swing.JPanel; import asset.Setting; @SuppressWarnings("serial") public class ClockMessage extends JPanel implements Runnable { int i = Calendar.getInstance().get(Calendar.AM_PM); String[] ampm = { "AM", "PM" }; SimpleDateFormat sdf = new SimpleDateFormat("hh:mm:ss"); String time = sdf.format(new Date()); JLabel timeLabel, ampmLabel; public ClockMessage() { setLayout(null); timeLabel = new JLabel(time); setLable(timeLabel).setBounds(Setting.timeLabel); ampmLabel = new JLabel(ampm[i]); setLable(ampmLabel).setBounds(Setting.ampmLabel); add(timeLabel, BorderLayout.NORTH); add(ampmLabel, BorderLayout.CENTER); } @Override public void run() { do { try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } timeLabel.setText(sdf.format(new Date())); } while (true); } //Setting Methods private JComponent setLable(JComponent component){ component.setForeground(Setting.bColor); component.setFont(Setting.bFont); return component; } }
package view.panel; import java.awt.Graphics; import java.awt.Image; import java.awt.Toolkit; import javax.swing.JPanel; @SuppressWarnings("serial") public class ImgClock extends JPanel implements Runnable { Image img[] = new Image[4]; int i = 2; public ImgClock() { img[1] = Toolkit.getDefaultToolkit().createImage("img/cl1.png"); img[2] = Toolkit.getDefaultToolkit().createImage("img/cl2.png"); img[3] = Toolkit.getDefaultToolkit().createImage("img/cl3.png"); img[0] = img[1]; } @Override public void paint(Graphics g) { super.paint(g); g.drawImage(img[0], 0, 0, this); } @Override public void run() { while (true) { try { Thread.sleep(10000); i = (i==3) ? 1 : ++i; img[0] = img[i]; repaint(); } catch (InterruptedException e) { e.printStackTrace(); } } } }
package view.panel; import java.awt.Graphics; import java.awt.Image; import java.awt.Toolkit; import javax.swing.JPanel; @SuppressWarnings("serial") public class MyStarPanel extends JPanel implements Runnable { Image img; int i = 1; int sleep = 25; int sx = 77, sy=0; public MyStarPanel() { img = Toolkit.getDefaultToolkit().createImage("img/starDdong.png"); } @Override public void paint(Graphics g) { super.paint(g); if(img!=null) g.drawImage(img, sx, sy, this); } @Override public void run() { try { do { Thread.sleep(sleep); switch (i) { case 1: sy+=2; if(sy>791) i=2; break; case 2: sx+=2; if(sx>1507) i=3; break; case 3: sy-=2; if(sy<53) i=4; break; case 4: sx-=2; if(sx<77) i=1; break; } repaint(); } while (true); } catch (Exception e) { System.out.println("무슨 에런지참. "); } } }
package view.panel; import java.awt.Graphics; import java.awt.Image; import java.awt.Toolkit; import javax.swing.JPanel; @SuppressWarnings("serial") public class PanImgload extends JPanel { Image image; public PanImgload(String path){ image = Toolkit.getDefaultToolkit().createImage(path); } @Override public void paint(Graphics g) { super.paint(g); g.drawImage(image, 0, 0, this); } }
깃허브 링크
앞으로는 깃허브 링크를 제공합니다. 깃허브에서 매 강좌마다 릴리즈 포인트를 제공하오니, 깃허브에서 다운받으시면 될 것같습니다.^^
여기 링크 https://github.com/arahansa/pcbang 를 눌르시고,
여기에 release 로 들어가셔서 강좌명에 맞는 것들 받아주셔도 됩니다^^