import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Calculator implements ActionListener
{
 JButton bt_1, bt_2, bt_3, bt_4, bt_5, bt_6, bt_7, bt_8, bt_9, bt_0,
   bt_Plus, bt_Minus, bt_Multiplication, bt_Division, bt_Dot, bt_Cal,
   bt_BackSpace, bt_C;
 JTextField tf_Display;
 StringBuffer tf_getText;
 String getText;
 
 double cal_Buffer1, cal_Buffer2, cal_Buffer3;
 final byte PLUS = 1, MINUS = 2, MULTIPLICATION = 3, DIVISION = 4;
 byte cal_Check, numberIn;

 public Calculator()
 {
  tf_getText = new StringBuffer();
  frameSetting();
 }

 public void frameSetting()
 {
  tf_Display = new JTextField("0");
  tf_Display.setHorizontalAlignment(JTextField.RIGHT);
  tf_Display.setFont(new Font("font", Font.BOLD, 16));
  tf_Display.setEditable(false);
  
  bt_1 = new JButton("1");
  bt_1.setFont(new Font("font", Font.BOLD, 16));
  bt_2 = new JButton("2");
  bt_2.setFont(new Font("font", Font.BOLD, 16));
  bt_3 = new JButton("3");
  bt_3.setFont(new Font("font", Font.BOLD, 16));
  bt_4 = new JButton("4");
  bt_4.setFont(new Font("font", Font.BOLD, 16));
  bt_5 = new JButton("5");
  bt_5.setFont(new Font("font", Font.BOLD, 16));
  bt_6 = new JButton("6");
  bt_6.setFont(new Font("font", Font.BOLD, 16));
  bt_7 = new JButton("7");
  bt_7.setFont(new Font("font", Font.BOLD, 16));
  bt_8 = new JButton("8");
  bt_8.setFont(new Font("font", Font.BOLD, 16));
  bt_9 = new JButton("9");
  bt_9.setFont(new Font("font", Font.BOLD, 16));
  bt_0 = new JButton("0");
  bt_0.setFont(new Font("font", Font.BOLD, 16));
  bt_Plus = new JButton("+");
  bt_Plus.setFont(new Font("font", Font.BOLD, 16));
  bt_Minus = new JButton("-");
  bt_Minus.setFont(new Font("font", Font.BOLD, 16));
  bt_Multiplication = new JButton("×");
  bt_Multiplication.setFont(new Font("font", Font.BOLD, 16));
  bt_Division = new JButton("÷");
  bt_Division.setFont(new Font("font", Font.BOLD, 16));
  bt_Dot = new JButton(".");
  bt_Dot.setFont(new Font("font", Font.BOLD, 16));
  bt_Cal = new JButton("=");
  bt_Cal.setFont(new Font("font", Font.BOLD, 16));
  bt_BackSpace = new JButton("←");
  bt_BackSpace.setFont(new Font("font", Font.BOLD, 14));
  bt_C = new JButton(" C ");
  bt_C.setFont(new Font("font", Font.BOLD, 14));
  JPanel panel_North = new JPanel(new GridLayout(1,1,5,5));
  JPanel panel_Center = new JPanel(new BorderLayout());
  JPanel panel_C_North = new JPanel();
  JPanel panel_C_Center = new JPanel(new GridLayout(4,4,5,5));
  JLabel lb_Info = new JLabel("Copyright(c) 2007. Dscythe(Paik Seung Ik)", SwingConstants.CENTER);

  try {
   UIManager.setLookAndFeel(
    UIManager.getCrossPlatformLookAndFeelClassName());
  } catch (Exception e) { }

  JFrame.setDefaultLookAndFeelDecorated(true);
  JFrame frame = new JFrame(" Swing Calendar");

  frame.add(panel_North, "North");
  panel_North.add(tf_Display);

  frame.add(panel_Center, "Center");
  panel_Center.add(panel_C_North, "North");
  panel_C_North.add(bt_BackSpace);
  panel_C_North.add(bt_C);
  panel_Center.add(panel_C_Center, "Center");
  panel_C_Center.add(bt_7);
  panel_C_Center.add(bt_8);
  panel_C_Center.add(bt_9);
  panel_C_Center.add(bt_Division);
  panel_C_Center.add(bt_4);
  panel_C_Center.add(bt_5);
  panel_C_Center.add(bt_6);
  panel_C_Center.add(bt_Multiplication);
  panel_C_Center.add(bt_1);
  panel_C_Center.add(bt_2);
  panel_C_Center.add(bt_3);
  panel_C_Center.add(bt_Minus);
  panel_C_Center.add(bt_0);
  panel_C_Center.add(bt_Dot);
  panel_C_Center.add(bt_Cal);
  panel_C_Center.add(bt_Plus);
  panel_Center.add(lb_Info, "South");

  eventListener();

  frame.setSize(250,250);
  frame.setLocation(300,300);
  frame.setVisible(true);
  frame.setResizable(false);
  frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);
 }

 public void eventListener()
 {
  bt_1.addActionListener(this);
  bt_2.addActionListener(this);
  bt_3.addActionListener(this);
  bt_4.addActionListener(this);
  bt_5.addActionListener(this);
  bt_6.addActionListener(this);
  bt_7.addActionListener(this);
  bt_8.addActionListener(this);
  bt_9.addActionListener(this);
  bt_0.addActionListener(this);
  bt_Plus.addActionListener(this);
  bt_Minus.addActionListener(this);
  bt_Multiplication.addActionListener(this);
  bt_Division.addActionListener(this);
  bt_Dot.addActionListener(this);
  bt_Cal.addActionListener(this);
  bt_BackSpace.addActionListener(this);
  bt_C.addActionListener(this);
  tf_Display.addKeyListener(new keyAdapter()
   {
    public void keyTyped (KeyEvent ke)
    {
     char key_Cr = ke.getKeyChar();
     //System.out.println(key_Cr);
     if ('1' == key_Cr){
      numberIn = 1;
      numberInput();
     } else if ('2' == key_Cr){
      numberIn = 2;
      numberInput();
     } else if ('3' == key_Cr){
      numberIn = 3;
      numberInput();
     } else if ('4' == key_Cr){
      numberIn = 4;
      numberInput();
     } else if ('5' == key_Cr){
      numberIn = 5;
      numberInput();
     } else if ('6' == key_Cr){
      numberIn = 6;
      numberInput();
     } else if ('7' == key_Cr){
      numberIn = 7;
      numberInput();
     } else if ('8' == key_Cr){
      numberIn = 8;
      numberInput();
     } else if ('9' == key_Cr){
      numberIn = 9;
      numberInput();
     } else if ('0' == key_Cr){
      zero();
     } else if ('+' == key_Cr){
      calculate(PLUS);
     } else if ('-' == key_Cr){
      calculate(MINUS);
     } else if ('*' == key_Cr){
      calculate(MULTIPLICATION);
     } else if ('/' == key_Cr){
      calculate(DIVISION);
     } else if ('.' == key_Cr){
      dotCheck();
     } else if ('' == key_Cr){
      backSpace();
     }
    }
   });
 }

 public void actionPerformed(ActionEvent e)
 {
  Object obj = e.getSource();
  if (bt_1 == obj){
   numberIn = 1;
   numberInput();
  } else if (bt_2 == obj){
   numberIn = 2;
   numberInput();
  } else if (bt_3 == obj){
   numberIn = 3;
   numberInput();
  } else if (bt_4 == obj){
   numberIn = 4;
   numberInput();
  } else if (bt_5 == obj){
   numberIn = 5;
   numberInput();
  } else if (bt_6 == obj){
   numberIn = 6;
   numberInput();
  } else if (bt_7 == obj){
   numberIn = 7;
   numberInput();
  } else if (bt_8 == obj){
   numberIn = 8;
   numberInput();
  } else if (bt_9 == obj){
   numberIn = 9;
   numberInput();
  } else if (bt_0 == obj){
   zero();
  } else if (bt_Plus == obj){
   calculate(PLUS);
  } else if (bt_Minus == obj){
   calculate(MINUS);
  } else if (bt_Multiplication == obj){
   calculate(MULTIPLICATION);
  } else if (bt_Division == obj){
   calculate(DIVISION);
  } else if (bt_Dot == obj){
   dotCheck();
  } else if (bt_C == obj){
   tf_Display.setText("0");
   tf_getText.delete(0,tf_getText.length());
   cal_Buffer1 = 0;
   cal_Buffer2 = 0;
   cal_Check = 0;
   numberIn = 0;
  } else if (bt_BackSpace == obj){
   backSpace();
  } else if (bt_Cal == obj)
  {
   result();
  }
 }

 public void numberInput()
 {
  getText = tf_getText.toString();
  if (getText.length() == 1 && getText.indexOf("0") == 0)
  {
   tf_getText.delete(0,tf_getText.length());
  }
  tf_getText.append("" + numberIn);
  tf_Display.setText(tf_getText.toString());
 }

 public void zero()
 {
  getText = tf_getText.toString();
  if (0 <= getText.indexOf("."))
  {
   tf_getText.append("0");
   tf_Display.setText(tf_getText.toString());
  } else {
   if (getText.length() == 1 && getText.indexOf("0") == 0)
   {
    tf_Display.setText("0");
   }else
   {
    tf_getText.append("0");
    tf_Display.setText(tf_getText.toString());
   }
  }
 }

 public void dotCheck()
 {
  getText = tf_getText.toString();
  if (0 <= getText.indexOf("."))
  {
   tf_getText.append("");
   tf_Display.setText(tf_getText.toString());
  } else {
   tf_getText.append(".");
   tf_Display.setText(tf_getText.toString());
  }
 }

 public void backSpace()
 {
  try
  {
   tf_getText.delete(0,tf_getText.length());
   tf_getText.append(tf_Display.getText());
   getText = tf_getText.delete(tf_getText.length()-1, tf_getText.length()).toString();
   if (getText.length() == 0)
   {
    getText = "0";
   }
   tf_getText.delete(0,tf_getText.length());
   tf_getText.append(getText);
   tf_Display.setText(tf_getText.toString());
  }
  catch (StringIndexOutOfBoundsException se){}
 }

 public void calculate(byte cal_Check)
 {
  try
  {
   switch (cal_Check)
   {
    case PLUS:
     cal_Buffer1 = Double.parseDouble(tf_Display.getText());
     cal_Buffer2 = cal_Buffer1 + cal_Buffer2;
     tf_getText.delete(0,tf_getText.length());
     tf_Display.setText("" + cal_Buffer2);
     break;
    case MINUS:
     cal_Buffer1 = Double.parseDouble(tf_Display.getText());
     if (cal_Buffer2 == 0)
     {
      cal_Buffer2 = cal_Buffer1;
     } else
     {
      cal_Buffer2 = cal_Buffer2 - cal_Buffer1;
     }
     tf_getText.delete(0,tf_getText.length());
     tf_Display.setText("" + cal_Buffer2);
     break;
    case MULTIPLICATION:
     cal_Buffer1 = Double.parseDouble(tf_Display.getText());
     if (cal_Buffer2 == 0)
     {
      cal_Buffer2 = cal_Buffer1;
     } else
     {
      cal_Buffer2 = cal_Buffer2 * cal_Buffer1;
     }
     tf_getText.delete(0,tf_getText.length());
     tf_Display.setText("" + cal_Buffer2);
     break;
    case DIVISION:
     cal_Buffer1 = Double.parseDouble(tf_Display.getText());
     if (cal_Buffer2 == 0)
     {
      cal_Buffer2 = cal_Buffer1;
     } else
     {
      cal_Buffer2 = cal_Buffer2 / cal_Buffer1;
     }
     tf_getText.delete(0,tf_getText.length());
     tf_Display.setText("" + cal_Buffer2);
     break;
 
    default :
   }
  } catch(NumberFormatException ne) {}
  this.cal_Check = cal_Check;
 }

 public void result()
 {
  try
  {
   if (cal_Check == PLUS)
   {
    String result = cal_Buffer2 + Double.parseDouble(tf_Display.getText()) + "";
    tf_Display.setText(result);
   } else if (cal_Check == MINUS)
   {
    String result = cal_Buffer2 - Double.parseDouble(tf_Display.getText()) + "";
    tf_Display.setText(result);
   } else if (cal_Check == MULTIPLICATION)
   {
    String result = cal_Buffer2 * Double.parseDouble(tf_Display.getText()) + "";
    tf_Display.setText(result);
   } else if (cal_Check == DIVISION)
   {
    String result = cal_Buffer2 / Double.parseDouble(tf_Display.getText()) + "";
    tf_Display.setText(result);
   }
  }
  catch (NumberFormatException ne){}
  tf_getText.delete(0,tf_getText.length());
  cal_Buffer1 = 0;
  cal_Buffer2 = 0;
 }

 public static void main(String[] args)
 {
  new Calculator();
 }
}

class keyAdapter implements KeyListener
{
 public void keyPressed (KeyEvent e){}
 public void keyReleased (KeyEvent e){}
 public void keyTyped (KeyEvent e){}
}

Posted by Duritz

15. 인터페이스 (interface)
   (1) 설명
  모든 메소드가 추상메소드, 모든 속성이 상수(대문자)로 구성된 틀
  즉, 추상 메소드와 상수로만 구성된 껍대기.
   (2) 생김새 (ex: 004day/Inter.java)


   (3) 특징
     <1> interface 앞에 붙을 수 있는 접근 제한자는 public 과 default 이다.
  (public 이 붙으면 반드시 interface 이름과 파일이 같아야 한다.)
  <2> static 메소드는 존재하지 않고, static 변수는 존재할 수 있다.
  (static 변수는 interface 의 소유다)
  <3> interface 의 맴버변수는 final 생략 가능(자동 final 셋팅),
   메소드 앞에는 abstract 생략가능 (자동 abstract 셋팅)
   멤버변수는 상수이기에 반드시 선언과 동시에 초기화해야 한다.
  <4> 자식클래스로 하여금 다중상속(implements)을 가능하게 한다.
  (ex: class InterClass implements Inter1, Inter2, Inter3....)
  <5> 인터페이스 끼리는 다중상속(extends)이 가능하다.
  (ex: interface Inter3 extends Inter1, Inter2...)

16. 인터페이스와 추상클래스를 사용하는 목적 (다형성)
  - 구현 메소드의 내용을 알 필요가 없이 인터페이스나 추상 클래스의 내용만 알면
    개발자가 구현 클래스를 이용해서 프로그램을 작성할 수 있다.
 즉, 타 소프트웨어와 독립적인 프로그램을 작성할 수 있다. (ex: JDBC)
 (ex: 004day/Term.java)

 cf) 인터페이스는 '통로'다. - GUI
 cf) 인터페이스는 '껍대기'다. - 추상메소드/상수

17. 연산자 (Operator)
   (1) 설명 : 변수들을 연산하게 하는 기호
   (2) 종류
     <1> 산술연산자
   ex) +, -, *, /, %
   cf) java에서 +연산자는 String에 사용시 +연산자 오버라이딩 된다.
 
  <2> 증감연산자
   ex) ++, --
   - 앞에 붙으면 모든 연산자보다 우선순위가 높고 뒤에 붙으면 우선순위가 가장 낮아진다.
 
  <3> 대입연산자.
   ex) =
 
  <4> 산술 할당(대입) 연산자.
   ex) +=, -=, *=, /=, %=

  <5> 비트연산자
   ex) &, |, ^, ~, shift연산자(<<, >>, <<<)

  <6> 비교연산자 (true/false)
   ex) ==, !=, <, >, <=, >=

  <7> 논리연산자
   ex) &&, ||, &, |, !

  <8> 논리 할당(대입) 연산자)
   ex) &=, |=

  <9> 조건 연산자
   ex) 삼항 연산자 (A? B:C)

    int a=(3<4)? 1:2;

    int a = 0;
    if(3<4) a = 1;
    else a = 2;
    //System.out.println("a : " + a);

  <10> instanceof 연산자 (true/false)
   ex) 객체이름 instanceof 클래스이름
   // 연산자 우선순위를 인식해야 한다.
  
   (ex: 004day/OperTest.java)

18. 조건문
   (1) if(boolean형){}문
   (2) if(boolean형){} else if(boolean형){}...문
   (3) if(boolean형){} else if(boolean형){}... else{} 문

   (4) switch(정수형){case : ... default : }문
     - 정수형, break, default 위치에 관계 없다.
  - case 에게 {}이 필요가 없다.
  (ex: 004day/ConTest.java)

19. 반복문
   -> 구성요소 : 초기식, 조건식, 증감식
   (1) while(boolean형)
     - 초기값은 out of Loop, 증감식은 in of Loop
   (2) do{} while(boolean형);
     - 적어도 한번은 실행된다.
   (3) for (초기식; 조건식; 증감식){}
     (ex: 004day/LoopTest.java)

20. 제어의 이동 ( * * * )
  (1) 제어란? : 시간의 개념이 들어간 프로그램의 흐름
 (제어점 : 시간을 정지한다면 그때의 프로그램 실행점)
 
  (2) 제어의 특징
 자기를 호출한 메소드나 소프트웨어(JVM)에 다시 돌아오는 성격

  (3) 제어핸들링 keyword
  <1> return
  호출한 놈/곳(소프트웨어/메소드)에게 제어권을 넘긴다.
  (ex: ControlTest.java)


  <2> break
  [1] switch 문 : 자기를 둘러싼 첫번째 (switch)블럭을 나간다.
  [2] 반복문 : 자기를 둘러싼 첫번째 (반복)블럭을 나간다.
  cf) labled break문
  (ex: ControlTest2.java)
  <3> continue
  (해당 조건에 맞으면)건너뛴다.
  (ex: ControlTest3.java)

21. 예외처리
   (1) 예외(Exception)
  프로그램이 정상적으로 진행하지 못하게 하는 돌발상황
  ex) 전원이 갑자기꺼짐, 파일 읽다가중단, 숫자가아닌 문자를 숫자로 바꿀려 할때
   채팅하다가 상대방이 나가버린 경우, (채팅)서버가 다운.....
  
   (2) 예외처리 계층도
              Object
                 │
           Throwable
  ┌────┴────┐
Error                   Exception
                       ┌──┴──┐
      RuntimeException       CheckedException
 
  cf) Error 는 자바 시스템관련 문제시에 발생되는 예외이기때문에 프로그래머가
   잡을수 없고 Exception 만 프로그래머가 잡을 수 있는데, CheckedException은
   컴파일시 체킹하는 예외이고 RuntimeException 은 실행시 체킹하는 예외로써
   잡지 않아도 컴파일은 정상적으로 실행된다.

   (3) 예외처리의 목적
  프로그램 진행시 발생할 수 있는 돌발상황을 예외로 미리 정해놓고, 해당하는 상황의
  예외가 발생했을 경우 적절한 조치를 취해서 프로그램이 정상적으로 작동하도록 하기
  위함이다.

   (4) 예외처리의 특징
  <1> 예외는 메소드 또는 생성자에서만 발생
  <2> 클래스 설계시 예외를 발생시킬 때에는 throw 라는 예약어 사용
  <3> 예외가 발생되는 메소드 또는 생성자에는 throws 예약어로 호출한 놈/곳으로 넘기거나
   (== 처리가 되어야 함을 명시하거나) try~catch 절로 직접 잡는다.
  <4> 예외는 자신의 Exception 또는 그 상위(부모) Exception 으로 잡을 수 있다.
  
   (5) 예외처리 방법
  <1> try{
    예외를 발생시키는 구문
   }catch (발생된 예외객체){
   예외가 발생했을 때의 로직 처리
   }
  <2> 예외를 호출한 놈/곳으로 넘긴다. throws  절로 점기는 방법

  (ex : ExceptionTest1.java)

   (6) 하나의 메소드/생성자에서 같은 try블록에 두개 이상의 Exception이 발생할 경우 처리
  <1> 상속관계 Exception 이라면
    -> (더욱 구체적인 Exception 처리를 위해서) 하위 Exception 부터 잡아준다.
  <2> 상속관계가 아닌 Exception 이라면
    -> catch() 절의 위치가 상관이 없다.

   (7) finally 절
  <1> 설명 : (try{} 나 catch(){} 가 수행되고 나서) 항상 수행되는 절이다.
  <2> 특징
    - try{}이 먼저 기술되어야 나올 수 있다.
    - try{} 나오면 반드시 catch(){} 또는 finally{}가 나오던지 아니면
      둘다 나와야 한다.
    - return 을 만나도 항상 수행된다.

    예외) 제어가 try{}나 catch(){}절에서 System.exit();를 만나면 finally 절은 수행되지 않는다.

  (ex : ExceptionTest2.java)


Posted by Duritz

11. 식별자 (Identifier)
   (1) 설명
  개발자가 임의로 만드는 패키지, 클래스, 메소드, 변수이름을 의미한다.
   (2) 규칙
 <1> 식별자의 첫문자는 숫자여서는 안된다.
 <2> 무자와 숫자, 특수문자(_,$)의 조합으로 만들 수 있다.
 <3> _와 $는 첫문자로 나와도 된다.
 <4> 길이의 제한은 없다.
   (3) 관례
 <1> 의미있는 단어를 사용한다.
 <2> 클래스/인터페이스 이름의 첫문자는 대문자로 한다.
 <3> 메소드/변수/패키지 이름의 첫문자는 소문자로 한다.
 <4> 단어와 단어의 결합으로 된 식별자는 다음 단어의 첫문자를 대문자로 하거나 _로 연결한다.
 <5> $는 잘 사용하지 않는다.
 
 12. 오버라이딩과 오버로딩
   (1) (메소드) 오버라이딩 (재정의)
 <1> 설명
   상속관계에 있는 클래스에서 부모 메소드내용(기능)을 자식클래스에서 바꾸는것.

 <2> 조건
   - 반환타입이 일치해야 한다.
   - 부모메소드의 접근제한자보다 자식메소드의 접근제한자가 같거나 커야 한다.
   - 인수(파라미터)의 종류, 갯수, 순서가 같아야 한다.

   (2) 오버로딩
 <1> 설명
   호출시 그 해당 메소드나 생성자에 메핑되어 호출 되도록 인수의 종류와 순서가 다른
   같은 이름의 메소드나 생성자를 정의하는 것.
 
 <2> 종류
   - 생성자 오버로딩
   - 메소드 오버로딩

 <3> 조건
   - 인수의 종류와 순서가 달라야 한다.
   - 반환타입과 상관이 없다.
      - 형변환이 가능한 인자라도 오버로딩으로 인정
   ex) OverLoadTest.java

13. this 와 super
   (1) this
 <1> 설명 : 자기자신의 객체를 지칭하는 대명사
 <2> 일반적인 사용
   - 메소드 안에서 지역변수와 이름이 같은 멤버변수를 접근할 때
      - 자기 자신의 주소값을 다른 클래스에게 넘길 때
     ex) day03/ThisTest.java

   (2) super
 <1> 설명 : 부모클래스의 객체 또는 클래스를 지칭하는 대명사
 <2> 일반적인 사용
   - 부모클래스의 생성자를 호출
   - 오버라이딩되기 전의 보모메소드를 호출
   * 하위클래스의 생성자에서 super(xxx)를 호출할 경우 반드시 첫줄에 나와야 한다.
      ex) SuperTest.java

14. 패키지 (package)
   (1) 설명 : 비슷한 종류의 클래스와 인터페이스들의 묶음
   (2) 생김새
     - 자바파일의 최상단에 package라는 keyword를 사용
   ex) package soo.aa.bb;
   (3) 컴파일 방법
  #> javac -d . PackTest.java
  #> javac -d ../classes PackTest.java
  #> javac -d C:\Temp PackTest.java
   (4) 실행 방법
  #> java soo.aa.bb.PackTest
   (ex: PackTest.java )


   (5) 압축법
     #> jar -cvf test.jar soo
   (6) 클래스패스 (classpath - 클래스들의 경로)
     컴파일되어 만들어진 패키지를 classpath를 걸어주면 시스템의 어느위치에서든지
  자신이 만든 클래스들을 사용할 수 있다.
  일반적으로 패키지를 classpath거는 방법보다 패키지를 압축해서 그 압축파일(.jar)를
  classpath 걸어주는 방법을 많이 사용한다.

  자.. 그럼 classpath를 해주는 방법들을 알아보자.
  <1> 컨솔창에서 -classpath 옵션을 사용하는 방법
          #>javac -classpath C:\Temp PackModulUser.java
    #>java -classpath .;C:\Temp PackModulUser

          #>javac -classpath E:\temp\test.jar PackModulUser.java
    #>java -classpath .;E:\temp\test.jar PackModulUser

        (ex: PackModul.java, PackModulUser.java )

  <2> 컨솔창에서 set classpath를 이용하는 방법
    #>set classpath=%classpath%C:\Temp
    #>javac PackModulUser.java
    #>java PackModulUser

   
    <3> 바탕화면 -> 내 컴퓨터 -> 고급탭 -> 환경변수 추가법
         ( 유효 범위 : OS시스템 내 )
     - classpath  ==> .;C:\Temp
           - classpath  ==> .;E:\temp\test.jar
  <4> 자동클래스 디렉토리를 이용하는 법
         ( 유효 범위 : JVM이 인스톨된 OS시스템 내 )
   C:\Program Files\Java\jdk1.5.0_11\jre\lib\ext하위에 .jar를 넣어준다.
  (주의 : 패키지 대렉토리는 인식되지 않는다.)

Posted by Duritz


package cal;

import java.io.*;
import java.util.Calendar;
import java.util.StringTokenizer;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class SwingCalendar implements ActionListener
{
 Calendar cal;
 int int_Year, int_Month;
 String year, month;
 StringBuffer sb_Print;

 JLabel lb_title, lb_YearSpace, lb_MonthSpace;
 JTextField textField_Year, textField_Month;
 JTextPane textPane;
 JPanel panel_North, panel_NorthFloor;
 JButton bt_Input;

 public SwingCalendar()
 {
  cal = Calendar.getInstance();
  setCalFrame();
 }

 public void setCalendar()
 {  
  sb_Print = new StringBuffer();
        sb_Print.append("     일    월    화    수    목    금    토\n");

  cal.set(int_Year, int_Month-1, 1);
  int cal_Field = cal.get(7);
  for(int j = 1; j < cal_Field; j++)
  {
   sb_Print.append("        ");
  }

  int cal_Gam = cal.getActualMaximum(5);

  int comp = 1;
  for(int k = cal_Field; comp <= cal_Gam; k++)
  {
   if (comp >= cal_Gam)
   {
    if (comp < 10)
    {
     sb_Print.append("     ");
    }else sb_Print.append("    ");
    
    sb_Print.append(comp);
    textPane.setText(sb_Print.toString());
   }else
   {
    if (comp < 10)
    {
     sb_Print.append("      ");
    }else sb_Print.append("    ");
    
    sb_Print.append(comp);
    textPane.setText(sb_Print.toString());
   }
   
   if(k % 7 == 0) sb_Print.append("\n");
   comp++;
  }
 }

 public void setCalFrame()
 {
  lb_title = new JLabel("연도와 달을 입력하세요 -> ex) xxxx xx", SwingConstants.CENTER);
  lb_YearSpace = new JLabel("년 ");
  lb_MonthSpace = new JLabel("월 ");
  textField_Year = new JTextField(5);
  textField_Month = new JTextField(3);
  textPane = new JTextPane();
  panel_North = new JPanel(new GridLayout(2,1));
  panel_NorthFloor = new JPanel();
  bt_Input = new JButton("입력");

  try {
   UIManager.setLookAndFeel(
    UIManager.getCrossPlatformLookAndFeelClassName());
  } catch (Exception e) { }

  JFrame.setDefaultLookAndFeelDecorated(true);
  JFrame frame = new JFrame(" Swing Calendar");

  frame.add(panel_North, "North");
  panel_North.add(lb_title);
  panel_North.add(panel_NorthFloor);
  panel_NorthFloor.add(textField_Year);
  panel_NorthFloor.add(lb_YearSpace);
  panel_NorthFloor.add(textField_Month);
  panel_NorthFloor.add(lb_MonthSpace);
  panel_NorthFloor.add(bt_Input);

  frame.add(textPane, "Center");
  textPane.setEditable(false);
  textPane.setFont(new Font("font", Font.BOLD, 16));
  textPane.setForeground(Color.blue);

  bt_Input.addActionListener(this);

  frame.setSize(260,280);
  frame.setLocation(300,300);
  frame.setVisible(true);
  frame.setResizable(false);
  frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);
 }

 public void actionPerformed(ActionEvent e)
 {
  Object obj = e.getSource();
  if (obj == bt_Input)
  {  
   year = textField_Year.getText();
   month = textField_Month.getText();
   try
   {
    int_Year = Integer.parseInt(year);
    int_Month = Integer.parseInt(month);
    
    if(year.length() != 4 || month.length() != 2)
    {
     textPane.setText("년도 및 월 입력이 잘못되었습니다.");
     return;
    }else if ((int_Month == 0) || (12 < int_Month))
    {
     textPane.setText("년도 및 월 입력이 잘못되었습니다.");
     return;
    }else setCalendar();
   }
   catch (NumberFormatException ne)
   {
    textPane.setText("입력된 년도와 월이 숫자형태가 아닙니다.");
    return;
   }
  }
 }

 public static void main(String[] args)
 {
  new SwingCalendar();
 }
}

Posted by Duritz

7. 용어 정리
   (1) 클래스 (class)
       -> 객체를 만들어 내는 틀
         ex) 붕어빵틀
   (2) 객체 (Object)
       -> 클래스를 통해 만들어 낸 구현물
      ex) 붕어빵
   (3) 메소드(Method)
       -> 객체(class도 포함)가 할 수 있는 일
      ex) 먹힌다.
   (4) 생성자(Constructor)
       -> 객체가 만들어 질 때 호출되는 메소드
      ex) 붕어빵의 반죽을 틀에 붓는 기능
   (5) 속성 (Field)
       -> 객체의 특성(속성)
      ex) 앙꼬, 색

 메소드와 생성자의 차이점

8. OOP의 특징
   (1) 상속성(Inheritance)
         -> 자식객체가 부모객체의 모든 것을 상속받는 것
                                                  ( 사용할 수 있는 것 )
    <1> 모든 클래스는 java.lang.Object클래스의 자식이다.          
    <2> 객체가 타입캐스팅이 되려면 반드시 상속관계여야 한다.ㅣ
         - 묵(암)시적 형변환 (Implicit Type Casting)
       --> 자동형변환(하위 --> 상위)
      - 명시적 형변환 (Explicit Type Casting)
       --> 강제형변환(상위 --> 하위)
    <3> 메소드 오버라이딩도 반드시 상속관계여야 한다.
          --> 접근제한자는 부모 메소드의 접근제한자 보다
           크거나 같아야 한다.
  
   (2) 다형성(Polymorphism)
        --> 메소드의 기능이 다양해지는 것
  ex) PolyTest.java

   (3) 은닉성(Information Hiding)
        --> 외부 프로그램(class)에게 정보(속성값)를 감춘는 것
  ex) 계좌.java 



   (4) 캡슐화(Encapsulation)
        ex) 메소드의 기능을 모듈화시키는ㄱ 것
  ex) 적분.java


9. 자바의 변수
   (1) 유효범위를 기준으로
       <1> 멤버변수
          - 클래스내에서만 유효
    - 소속 기준 (클래스변수/객체변수)
    - 초기화를 하지 않아도 됨 (by JVM)

    <2> 지역변수
          - 해당 메소드내에서만 유효
    - 종류
       - 메소드내에서 선언 및 초기화
    - 파라미터 변수
       - 반드시 초기화가 선행되어야지 사용이 가능
      ex) Chogy.java

  (2) 변수타입(type)을 기준으로
       <1> 기본형 (8개)
          - call by value;
    - 형태 : 소문자
    - 종류
        byte(1)  -> short(2) ->  int(4) ->  long(8) -> float(4) -> double(8)
                         char(2)

      boolean
              - 자동형변환방향 (작은 범위 type --> 큰범위 type)
     - 형변환의 필요성 (연산)
     - 초기값
        정수(0), 실수(0.0), 불린(false)
     - 존재이유 : 실행의 효율성 때문이다.
     - 예외 연산 형변환
        정수형(byte, short, char, int) 산술연산에서는
      그 연산결과가 무조건 int 로 나온다.


   cf) float f = 123456789.123456789f;
           double dou = 123456789.123456789;


    <2> 참조형
          - call by reference
    - 형태 : 대문자
    - 종류 : 8가지 기본형을 제외한 나머지 모두
    - 초기값 : null
    - 자동형변환 (자식(남자) --> 부모(사람))

           Object
          |
                    Human
           |
         Man

    - 일반적인 형태의 자동형변환
                  Human h = new Man();
                  Man m = (Man)h;
        
 
  (3) static 이 붙는 여부에 따라
       <1> 클래스 소유 변수
    <2> 객체 소유 변수
 
  (4) final 이 붙는 여부에 따라
       <1> 상수
    <2> 변수
      ex) FinalVTest.java

10. 제한자 (Modifier)
   - 제한자란 ?  클래스, 인터페이스, 변수, 상수, 메소드, 생성자
         앞에 붙어서 기능을 제한하는 keyword

  (1) 접근 제한자
       - public : 접근 제한이 없음
    - protected : 상속, 동일 패키지(디렉토리-폴더)
    - default : 동일 패키지
    - private : 클래내에서만 가능
       public > protected > default > private

  (2) 소유 제한자
      - static :  붙으면 클래스에 소유되고,
                 붙지 않으면 객체에 소유된다.

   - 특징
      - static 메소드내에서는 다른 static메소드만 호출 가능
   - 클래스 이름으로 접근
   - 생성자에는 static 이 붙지 않는다.

  (3)  수정 제한자
      - final : 붙으면 수정을 못하게 한다.
       - class 앞에 붙으면 상속을 못하게 하고
        method 앞에 붙으면 오버라이딩을 못하게 하고
        변수앞에 붙으면 변수값을 변하게 할 수 없다.
     즉, 상수가 된다.
    - 지역변수 앞에는 붙을 수 있다.
    - 생성자 앞에서 final 붙을 수 없다.
    - 부모클래스의 상수와 동일한 일반변수를 자식클래스
       에서 선언하면 그 것을 부모상수에 영향을 받지 않는다.
   
   ex) FinalTest.java


   
   (4)  추상 제한자
   - abstract : 붙으면 추상화가 된다.
     - class 앞에 붙으면 추상 클래스가 되고 method 앞에 붙으면 추상 메소드가 된다.
  - 하나 이상의 추상메소드를 가지고 있으면 그 클래스는 자동으로 추상 클래스가 된다.
  - 변수앞에나 생성자 앞에는 붙을 수 없다.
  - 추상클래스의 객체는 반드시 하위클래스를 만들어서 하위객체를 생성하여
    형변환해서 사용해야 한다.
  - 하위클래스는 상위클래스의 추상메소드를 반드시 모두 구현(재정의)해야한다.
   ex) AbstractTest.java
  
   (5)  기타 제한자
       synchronized(쓰레드), transient(보안상),
    native (System 자원 사용), volatile

Posted by Duritz

1. 자바의 역사

2. 자바의 특징
   (1) 플랫폼의 독립성
   (2) 완벽한 객체 지향 언어
   (3) 멀티쓰레드 쉽게 구현
   (4) 자동 메모리 관리
   (5) 확장성
   (6) 보안성
   (7) 재사용성

3. 개발환경 셋팅
   (1) JDK (from java.sun.com) 인스톨
   (2) JRE 인스톨
   (3) 시스템 변수 추가
        <1> path -> C:\Program Files\Java\jdk1.5.0_11\bin
  <2> classpath -> .;
   (4) 환경셋팅 확인
        <1> javac
  <2> java -version
   (5) API 를 다운 로드 받아서 즐겨찾기 한다.

4. 클래스의 구조
   (1) package 선언
   (2) import 구문
   (3) class 선언
        {
   (4) 속성(멤버변수) 선언 및 초기화
      (5) 생성자
      (6) 메소드 
        }

 ex) 붕어빵틀.java

5. 자바 주석
   (1) 한줄 주석 //라인
   (2) 여러줄 주석
        /*
           라인 1
     라인 2
         ..
        */
    (3) 문서화 주석
     /**
       javadoc -d . XXX.java testDoc
  */
 
6. 자바 프로그램의 실행 절차
    - 자바실행.ppt
 /*
     - static 메소드에서는 다른 static 메소드/변수만을 호출 가능
  - static 변수는 지역변수가 될 수 없다.
  */

Posted by Duritz

int odd = 0;
int even = 0;
int j = 1;

while(j < 11) {
    if(j%2 == 0){

        even+=j; // 짝수의 합을 구해라
    }
    else {
        odd+=j; // 홀수의 합을 구해라
    }
        j++; 
}
System.out.println("짝수의 합 = " + even);
System.out.println("홀수의 합 = " + odd);

Posted by Duritz
이전버튼 1 2 이전버튼

공지사항

Yesterday
Today
Total
05-18 12:57

달력

 « |  » 2024.5
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31