인터페이스란
 - 표준명세서의 역활
 - 상수와 추상메소드만 존재(abstract는 생략가능)
 - interface를 implements 한 클래스는 반드시 추상메소드를 Override(재구현)해주어야 한다.
 - Override(재구현) 할때 반드시 public를 붙여야 한다.
 - 다중상속이 가능
 - 상속과 같이 쓰일때는 extends, implements 순서로 쓴다.


extends(상속)와 interface(인터페이스) 사용 차이점

1. class B extends A{}                         //참 : 클래스끼리는 extends가 가능하다
2. class B implements InterA{}              //참 : 인터페이스는 클래스에 implements가 가능하다
3. class B implements A{}                    //거짓 : 클래스끼리는  implements 할 수 없다
4. class B extends InterA{}                   //거짓 : 인터페이스는 클래스에 extends 할 수 없다
5. interface InterB  extends A{}              //거짓 : 클래스는 인터페이스에 extends 할 수 없다
6. interface InterB  implements InterA{}   //거짓 : 인터페이스끼리는 implements 할 수 없다
7. interface InterB  implements A{}         //거짓 : 클래스는 인터페이스에 implements 할 수 없다
8. interface InterB  extends InterA{}        //참 : 인터페이스끼리는 extends가 가능하다

자바 API의 java.awt.event.WindowListener에 위치하는 인터페이스이다.
윈도우창의 닫기, 큰화면, 작은화면, 내리기 등을 담당한다.

사용예시
 //WindowListener override
 public void windowActivated(WindowEvent e) {}
 public void windowClosed(WindowEvent e) {}
 public void windowClosing(WindowEvent e) {
  System.out.println("윈도우 종료...");   //윈도우창 X버튼 클릭할 때
  System.exit(0);
 }
 public void windowDeactivated(WindowEvent e) {}
 public void windowDeiconified(WindowEvent e) {}
 public void windowIconified(WindowEvent e) {}
 public void windowOpened(WindowEvent e) {}

자바 API의 java.awt.event.MouseListener
                java.awt.event.MouseMotionListener에 위치하는 인터페이스이다.
윈도우창 생성시 마우스가 담당하는 기본적인 기능을 담당한다.

사용예시

//MouseListener Override
 public void mouseClicked(MouseEvent e) {
  System.out.println("마우스 클릭");   //윈도우창안을 클릭할 때
 }
 public void mouseEntered(MouseEvent e) {
  System.out.println("마우스 인");      //윈도우창 안으로 마우스 포인트가 들어올 때
 }
 public void mouseExited(MouseEvent e) {
  System.out.println("마우스 아웃");   //윈도우창 밖으로 마우스 포인트가 나갈 때
 }
 public void mousePressed(MouseEvent e) {}
 public void mouseReleased(MouseEvent e) {}
 
 //MouseMotionListener Override
 public void mouseDragged(MouseEvent e) {
  System.out.println("마우스 드레그");  //윈도우창 안을 마우스로 드레그 할 때
 }
 public void mouseMoved(MouseEvent e) {}
 public static void main(String[] args){
  new WindowTest().init();
 }
자바 API의  java.awt.event.ActionListener 에 위치하는 인터페이스이다.
액션 리스너는 윈도우창안에 있는 버튼의 엑션을 지정하는데 사용된다.

사용 예시
public void actionPerformed(ActionEvent e){
    if(e.getSource()==exitB) System.exit(0);   //exitB는 임의로 만든 버튼이름이다
}

원하는 패턴으로 출력하는데 사용한다.

다음은 5백만원을 입력하여 환율 1195원이라는 가정하에 "$#,###,00 형태로 출력하는 예제이다

import java.text.NumberFormat;
import java.text.DecimalFormat;

class Money{
 
 public String toDoller(int a){
  
  NumberFormat nf = new DecimalFormat("$#,###.00");
  return nf.format(a/1195.0);
 }

 public static void main(String[] args){
  System.out.println("5,000,000원 = "+new Money().toDoller(5000000));
 }
}

NumberFormat에 DecimalFormat을 사용한다.
("#,###,00")으로 입력하면 소수점까지 고정으로 표현하여 준다.
소수점이 있으면 표기해주고 없으면 안해주게 하고 싶으면 ("#,###,##")으로 하면된다.

출력값


 

: casting(형변환)이 되는지 안되는지를 판별
: 객체에 원하는 클래스타입이 메모리 할당되었는지 안되었는지를 확인

class AA{}
class BB extends AA{}

class InstanceOf{
 public static void main(String[] args) {
  AA aa = new AA();
  BB bb = new BB();
  AA aa2 = new BB();

  AA aa3 = aa;
  if(aa instanceof AA)  //aa객체속에는 AA클래스가이 생성되어 있다.
   System.out.println("1. TRUE");   //참값이 나온다.
  else
   System.out.println("1. FALSE");

  AA aa4 = bb;
  if(bb instanceof AA) //bb객체속에는 AA클래스가 생성되어 있다.
   System.out.println("2. TRUE");   //참값이 나온다.
  else
   System.out.println("2. FALSE");

  // BB bb2 = (BB)aa;  //형변환해도 안된다.
  if(aa instanceof BB)
   System.out.println("3. TRUE");  
  else
   System.out.println("3. FALSE");   //거짓값이 나온다.

  BB bb3 = (BB)aa2;  //형변환하면 된다.
  if(aa2 instanceof BB)
   System.out.println("4. TRUE");   //참값이 나온다.
  else
   System.out.println("4. FALSE");

 }
}



 

- Java의 최상위 클래스
- Java의 모든 클래스는 Object로 부터 상속받는다
- extends Object라고 직접 쓰지 않아도 된다
- Object에서는 == , equals() 가 모두 참조값(reference) 만으로 비교한다.
    단, String만이 equals()가 내용을 비교한다


String의 경우 다음과 같을 때,

String a = new String("hello");
String b = a;
String c = new String("hello");

a에는 hello값을 임의의 100이란 공간에 저장   //100은 제가 임의로 정한 번지수...
b에는 a가 저장된 공간 값이 들어간다.
c에는 hello값을 임의의 200란 공간에 저장한다.  //200은 제가 임의로 정한 번지수...

따라서 a.equal(c)는 참이다. a==b는 저장된 번지가 같으므로 참
하지만 a==c는 거짓이 된다.



다음으로 Object가 다음과 같을때,

Object a = new Object ();
Object b = a;
Object c = new Object ();

a에는 100이란 공간이 할당된다   //100은 제가 임의로 정한 번지수... 
b에는 a의 저장된 공간의 값이 들어간다.
c에는 200이란 공간이 할당된다  //200은 제가 임의로 정한 번지수...

따라서 a==b는 저장공간의 값이 같으므로 참, a==c는 저장공간이 다르므로 거짓
a.equals(c)는 String의 경우 안의 값이 비교되지만 object의 경우 ==와 같은 연산이므로 거짓이 된다.

this & this()
 - this 는 자신의 클래스의 참조값을 갖고 있다
 - this() 는 Overload된 다른 생성자를 호출 할 수 있다.
 - this()는 생성자의 첫줄에 써야 한다.

super & super()
 - super 는 부모클래스의 참조값을 갖고 있다.
 - super() 는 부모클래스의 생성자를 호출 할 수 있다.
 - super() 는 생성자의 첫줄에 써야 한다.

import java.io.IOException;
import java.io.BufferedReader;
import java.io.InputStreamReader;

class Game2{
 public static void main(String[] args) throws IOException {
  int[] bas = new int[3];
  int[] gap = new int[3];

  BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  System.out.print("게임을 실행 하시겠습니까? (y/n) : ");
     String ans =br.readLine();


  if(ans.equals("y") || ans.equals("Y")){

    System.out.println("숫자를 생성했습니다.");

    for(int i=0; i<bas.length; i++){
     bas[i] = (int)(Math.random()*9)+1;
 
     for(int j=0; j<i; j++){
      if(bas[i] == bas[j]){
       i--; break;
      } // if end
     } // for end  

    } // for end

//System.out.println(bas[0]+""+bas[1]+""+bas[2]);

    while(true){
      int str = 0;
      int bal = 0;

      while(true){
       System.out.print("당신이 생각하는 숫자 = ");
       int dap = Integer.parseInt(br.readLine());
           
        for(int i=0; i< gap.length; i++){
         gap[i] = dap%10;
         dap = (int)(dap/10);
        } //for end

       if (dap != 0 || gap[2]==0 || gap[0]==gap[1] || gap[1]==gap[2] || gap[2]==gap[0])
       System.out.println("값을 잘못 입력하셨습니다. 다시 입력해 주세요\n");
       else break;
      } //while end

      if (bas[0] == gap[2]) str++;
      if (bas[1] == gap[1]) str++;
      if (bas[2] == gap[0]) str++;
      if (bas[0] == gap[0] || bas[0] == gap[1]) bal++;
      if (bas[1] == gap[0] || bas[1] == gap[2]) bal++;
      if (bas[2] == gap[1] || bas[2] == gap[2]) bal++;

      if(str>0 && bal>0) System.out.println("결과 : "+str+"스트라이크 "+bal+"볼\n");
      else if(str>0 || bal>0){
       if(str>0) System.out.println("결과 : "+str+"스트라이크\n");
       else System.out.println("결과 : "+bal+"볼\n");
      } else System.out.println("결과 : 아웃\n");
     
      if (bas[0]==gap[2] && bas[1]==gap[1]  && bas[2]==gap[0] ) break;
    } //while end
  

   System.out.println("정답 짝짝짝...^^");

  } //if end

  else if(ans.equals("n") || ans.equals("N")) System.out.println("게임이 종료되었습니다.");
  else System.out.println("잘못 입력하셨습니다.");
  

 }
}

import java.io.InputStreamReader;
import java.io.BufferedReader;
import java.io.IOException;

class Game{
 public static void main(String[] args) throws IOException {

  BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  
  System.out.println("가위바위보 게임시작 // 처음배팅금액 : 1000원 지급");

  int point = 1000;

  while(true){

   System.out.println("1. 주먹\n" + "2. 가위\n" + "3. 보자기\n" + "0.프로그램 종료");
   System.out.print("메뉴선택 : ");
   int user = Integer.parseInt(br.readLine());
   if(user == 0){System.out.println("게임이 종료되었습니다."); break;}

   System.out.print("배팅금액 : ");
   int money = Integer.parseInt(br.readLine());
   
   System.out.print("결과를 보시려면 Enter를 치세요 ^^  \n");
   String enter = br.readLine();

   int com = (int)(Math.random()*3)+1;
    if(user == 1){
     if(com == 2){
      System.out.println("computer : 가위, you : 주먹");
      point = point + money;
      System.out.println("You Win!!! 잔액 : "+point+"원");
     }
     else if(com == 3){
      System.out.println("computer : 보자기, you : 주먹");
      point = point - money;
      System.out.println("You Lose!!! 잔액 : "+point+"원");
     }
     else{
      System.out.println("computer : 주먹, you : 주먹");
      System.out.println("비겼다!! 잔액 : "+point+"원");
     }
    } //if end

    if(user == 2){
     if(com == 3){
      System.out.println("computer : 보자기, you : 가위");
      point = point + money;
      System.out.println("You Win!!! 잔액 : "+point+"원");
     }
     else if(com == 1){
      System.out.println("computer : 주먹, you : 가위");
      point = point - money;
      System.out.println("You Lose!!! 잔액 : "+point+"원");
     }
     else{
      System.out.println("computer : 가위, you : 가위");
      System.out.println("비겼다!! 잔액 : "+point+"원");
     }
    } //if end

    if(user == 3){
     if(com == 1){
      System.out.println("computer : 주먹, you : 보자기");
      point = point + money;
      System.out.println("You Win!!! 잔액 : "+point+"원");
     }
     else if(com == 2){
      System.out.println("computer : 가위, you : 보자기");
      point = point - money;
      System.out.println("You Lose!!! 잔액 : "+point+"원");
     }
     else{
      System.out.println("computer : 보자기, you : 보자기");
      System.out.println("비겼다!! 잔액 : "+point+"원");
     }
    } //if end


   System.out.println("\n\n");
   if(point <= 0) {System.out.print("포인트 부족. 게임이 종료되었습니다."); break; }
    

  } //while end
  
 }
} //class end

+ Recent posts