[[TableOfContents]] == 데블스캠프2004/금요일 == Eclipse : http://zeropage.org/~neocoin/eclipse3.0rc3/eclipse-SDK-3.0RC3-win32.zip JDK 1.5 : http://zeropage.org/~neocoin/eclipse3.0rc3/jdk-1_5_0-beta2-windows-i586.exe === Java === ==== 자바의 역사 및 특징 ==== * Upload:Java.ppt 설마 이거 PT하셨나요? PT의 내용이 제 뒤통수를 때리는것 같군요. 자바 이름의 유래 및 개발 역사 에서는 유래가 없군요. C기반이 아니라, C++(문법), Smalltalk(vm) 의 철학을 반영합니다. Early History 는 마치 제임스 고슬링이 처음 만든것 처럼 되어 있군요. (SeeAlso [http://en.wikipedia.org/wiki/Java_programming_language#Early_history Java Early history] 개발 역사는 사장 직전의 Java를 구한 Servlet-JSP 기술이 빠졌고, 2001년 기준의 'JavaTM 2 Playtform 1.3,'는 현재 J2SE 로 이름을 바꾸었지요. 1.4는 1년도 전에 나오고, 1.5 가 8월에 발표됩니다. Java는 major upgrade 시 많은 부분이 변경됩니다 Java의 활용분야 는 더 슬퍼집니다. 보여주신 처음 예제가 거의다 ActiveX 구현물입니다.국내 Rich Client 분야는 전부 ActiveX에 주고 해외는 [Flash]에게 내주었습니다. 현재(2003) Java의 활용분야의 80% 이상은 applet이 아닌 서버 프레임웍의 J2EE와 모바일 프레임웍의 J2ME 입니다. --NeoCoin 책을 보고 했는데 문제가 많았나 봅니다; 미숙한 발표여서 죄송합니다 (__) --[iruril] 저는 발표를 못봐서, 미숙한지 모릅니다. 그러나 PT가 그대로 진행되었다면, 사실과 다른 내용은 충격적이군요. 다음부터라도 반드시 타인에게 감수를 받거나, 자신에게 납득할수 있는 내용을 담으세요. --NeoCoin ==== 이클립스 사용법 ==== ===== 프로젝트 만들기 ===== * File -> New -> Project Java Project 선택 http://zeropage.org/pub/upload/snap1.jpg http://zeropage.org/pub/upload/snap2.jpg ===== Class 만들기 ===== * File -> New -> Class http://zeropage.org/pub/upload/snap3.jpg ===== 컴파일 및 실행 ===== * Run -> Run As -> Java Application http://zeropage.org/pub/upload/snap4.jpg ===== 간단한 예제프로그램 작성 및 테스트 ===== * 테스트 프로그램(FirstJava.java) {{{~cpp public class FirstJava { public static void main(String argv[]) { System.out.println("Hello world!"); } } }}} ==== 윈도우 프레임창 띄우기 ==== * JFrame의 show() 메소드 -> 프레임창을 보이게 한다. * JFrame의 setBounds(int x, int y, int weight, int height) 메소드 -> int 전달인자가 순서대로 창을 띄우는 'x좌표', 'y좌표', '창넓이', '창높이' 를 가리킨다 {{{~cpp import javax.swing.*; public class FirstJava extends JFrame{ public FirstJava() { } public static void main(String args[]) { FirstJava helloWorld = new FirstJava(); helloWorld.setBounds(100,100,800,600); helloWorld.show(); } } }}} * BufferedReader - 캐릭터, 배열, 행을 버퍼링 하는 것에 의해, 캐릭터형 입력 스트림으로부터 텍스트를 읽어들인다 {{{~cpp package WindowFrame; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import javax.swing.JFrame; public class WindowFrame { static BufferedReader breader; public WindowFrame(String title, int width, int height) { JFrame f = new JFrame(title); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setSize(width, height); f.show(); } public static int inputInt() throws IOException { breader = new BufferedReader(new InputStreamReader(System.in)); return Integer.parseInt(breader.readLine()); } public static String inputString() throws IOException { return breader.readLine(); } public static void main(String[] args) { breader = new BufferedReader(new InputStreamReader(System.in)); try { System.out.print("윈도우 이름 : "); String title = inputString(); System.out.print("넓이 : "); int w = inputInt(); System.out.print("높이 : "); int h = inputInt(); new WindowFrame(title, w, h); } catch(IOException ex) { ex.printStackTrace(); } } } }}} Upload:Swing_JFrame.gif ==== 그림그리기 ==== http://zeropage.org/pub/upload/snap5.jpg * java.awt.Graphics 추가 * public void paint(Graphics g) 메소드 -> 윈도우 창에서 그리는 부분을 담당하는 함수이다. * g.drawString(String string, int s, int y) 메소드 -> int 전달인자가 순서대로 문자열을 그리는 '왼쪽 위 점의 x좌표', '왼쪽 위 점의y좌표' 를 가리킨다 * g.drawLine(int startX, int startY, int endX, int endY) 메소드 -> int 전달인자가 순서대로 선을 리는 '처음점의 x좌표', '처음 점의y좌표', '끝점의 x좌표', '끝점의 y좌표' 를 가리킨다 * g.drawOval(int x, int y, int weight, int height) 메소드 -> int 전달인자가 순서대로 원 그리는 '왼쪽위 x좌표', '왼쪽위 y좌표', '원의 너비', '원의 높이' 를 가리킨다 * g.fillOval(int x, int y, int weight, int height) 메소드 -> int 전달인자가 순서대로 채워진 원을 그리는 '왼쪽위 x좌표', '왼쪽위 y좌표', '원의 너비', '원의 높이' 를 가리킨다 {{{~cpp import java.awt.Graphics; import javax.swing.*; public class FirstJava extends JFrame{ public FirstJava() { } public static void main(String args[]) { FirstJava helloWorld = new FirstJava(); helloWorld.setBounds(100,100,800,600); helloWorld.show(); } public void paint(Graphics g) { g.drawLine(100,100,300,300); g.drawOval(200,200,400,400); g.fillOval(500,500,100,100); } } }}} ==== 마우스 이벤트 ==== * addMouseListener 로 마우스 핸들러를 추가한다. * mouseClicked 메소드 -> 메우스를 클릭했을 경우 작동 {{{~cpp import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import javax.swing.*; public class FirstJava extends JFrame{ public FirstJava() { addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent e) { int x = e.getX(); int y = e.getY(); System.out.println("x 좌표 : " + x); System.out.println("y 좌표 : " + y); } }); } public static void main(String args[]) { FirstJava helloWorld = new FirstJava(); helloWorld.setBounds(100,100,800,600); helloWorld.show(); } } }}} ==== TicTacToe ==== ===== 마우스를 클릭했을 경우 paint 함수를 호출 ===== * repaint() 메소드를 사용 {{{~cpp import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import javax.swing.*; public class FirstJava extends JFrame{ public FirstJava() { addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent e) { int x = e.getX(); int y = e.getY(); repaint(); } }); } public static void main(String args[]) { FirstJava helloWorld = new FirstJava(); helloWorld.setBounds(100,100,800,600); helloWorld.show(); } public void paint(Graphics g) { System.out.print("Click!! "); } } }}} == 여는 이야기 == Programmer's Toolkit == 실습 : Programming == {{{~cpp 6 0 0 222244451 999 Output 1 1 1 1 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 2 0 0 0 0 1 0 0 0 0 0 0 0 0 5 0 0 22224444346 999 Output 2 1 1 1 1 1 0 0 0 2 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 3 0 0 44220064 999 Output 1 1 1 1 1 1 1 1 1 }}} == Code Review - 어떤 생각을 하며 작성했나요? == == 휴식 == == Structured Programming 소개 == == HIPO 예제 == == Paper Programming : HIPO 그리기 == == 자신이 HIPO 그린 것을 근거로 구현 == == 휴식 == == OOP 소개 == == 시연 : CRC Card == == OOP Demo 1 : Message 를 날립시다~ (Python) == Upload:SimpleStar.zip http://zeropage.org/pub/language/python/Python-2.3.exe 압축을 풀고, 해당 디렉토리에 들어간 뒤 c:\python23\python.exe 를 실행해주세요. {{{~cpp from StarCraft import StarCraft sc = StarCraft () dir(sc) gateway = sc.createGateway () dir(gateway) z1 = gateway.createZealot () dir(z1) z1.move (160,160) d1 = gateway.createDragoon () dir(d1) d1.move (180,180) z1.printHp() z1.getPosition() d1.printHp() d1.getPosition() z1.setAttackTarget(d1) z1.printAttackTarget() z1.getAttackTarget().printHp() z1.getAttackTarget().getPosition() z1.attack() d1.printHp() }}} == OOP Demo 2 : Message 를 날립시다~ (Java & Eclipse) == == 휴식 == == 자바 간단 설명 == === Eclipse 간단 설명 === === 자바 문법 간단 설명 === ==== Class 추가 방법 ==== ==== public static void main ==== ==== 구현 : CRC 때 했었던 것 ==== == 휴식 == == interface 개념 추가 설명 == == 구현 : 다른 객체와의 대화 & 기능의 변화 == Upload:SimpleRoach.zip == 토론 & 발표 == == 마무리 == == 기타 == ---- [1002]아 id : cvs_writer pass: zeropager 를 만들어 두었으니, 시간 남는 사람들이 있다면 서로서로 소스 공유 해보는 경험도 좋을것 같다. 이렇게 공유된다 이런식 말이지 {{{~cpp :pserver:cvs_writer@zeropage.org:/home/CVS }}} 토요일까지만 개정 살려 둘께 --NeoCoin ---- [데블스캠프2004]