과감하게 리팩토링을 합니다. 리팩토링이란게 정답이 없습니다만, 뭔가 그래도 사고의 깊이는 느낄 수가 있기 때문에 상당히 조심스럽습니다ㅠ.ㅠ.. (잘 하시는 분이 보시면 답답한 곳도 분명 있을 수 있겠지요...)
이번에 그래도 리팩토링하며 느낀 것은 리팩토링을 하면서 정말 프로그래밍의 재미를 느낄 수가 있었고,
설령 아무도 보지 않을지라도 , 이 강좌 영상을 만들게 된 것을 잘했다고 느꼈습니다...영상을 안 만들었다면 제 스스로 이렇게 다시 한번 생각해볼 기회는 없었고, 기존의 방식대로 코딩을 했을 지도 모를 일이죠.
영상은 다 찍어놨는데..ㅠ. 하아.. ㅠㅋㅋ 마지막 하이라이트 부분을 자꾸 다시 찍게 되네요;;
준비좀 하겠습니다 .
시간 좀 흘렀습니다.
늦었습니다...ㅎㅎㅎ다시 시작해보겠습니다.
이번부터 깃허브 주소를 공유합니다. 깃허브에서 소스코드를 강좌에 맞춰 받아보실 수 있습니다.
하단에 깃허브 공개주소와 사용법이 있습니다.
리플렉션으로도 하는.. 리팩토링이 있는데..사실 리팩토링에서 업로딩을 멈췄었거든요 ㅠㅠ음
어떻게 할지 고려해보겠습니다. 일단 이정도로 업로드합니다 ! ㅎ
했던 일들
여기, 리팩토링에서 주로 했던 일은 다음과 같습니다.
중복의 제거, 향후 유지보수가 편이하도록 성격이 다른 설정정보는 따로 관리.. 를 주로 했었습니다.
동영상을 참조해주시면 될 것같구요^^;
(동영상 링크)
소스코드
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 로 들어가셔서 강좌명에 맞는 것들 받아주셔도 됩니다^^



