인터페이스란
- 표준명세서의 역활
- 상수와 추상메소드만 존재(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가 가능하다
Interface(인터페이스)
WindowListener
윈도우창의 닫기, 큰화면, 작은화면, 내리기 등을 담당한다.
사용예시
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) {}
MouseListener & MouseMotionListener
자바 API의 java.awt.event.MouseListener
java.awt.event.MouseMotionListener에 위치하는 인터페이스이다.
윈도우창 생성시 마우스가 담당하는 기본적인 기능을 담당한다.
사용예시
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();
}
ActionListener
NumberFormat
원하는 패턴으로 출력하는데 사용한다.
다음은 5백만원을 입력하여 환율 1195원이라는 가정하에 "$#,###,00 형태로 출력하는 예제이다
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")으로 입력하면 소수점까지 고정으로 표현하여 준다.
소수점이 있으면 표기해주고 없으면 안해주게 하고 싶으면 ("#,###,##")으로 하면된다.
출력값
InstanceOf
: casting(형변환)이 되는지 안되는지를 판별
: 객체에 원하는 클래스타입이 메모리 할당되었는지 안되었는지를 확인
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");
}
}
Object
- Java의 최상위 클래스
- Java의 모든 클래스는 Object로 부터 상속받는다
- extends Object라고 직접 쓰지 않아도 된다
- Object에서는 == , equals() 가 모두 참조값(reference) 만으로 비교한다.
단, String만이 equals()가 내용을 비교한다
String의 경우 다음과 같을 때,
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 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(), super & super() 비교
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
java
- Interface(인터페이스) 2011.09.28
- WindowListener 2011.09.28
- MouseListener & MouseMotionListener 2011.09.28
- ActionListener 2011.09.28
- NumberFormat 2011.09.28
- InstanceOf 2011.09.27
- Object 2011.09.26
- this & this(), super & super() 비교 2011.09.26 1
- [자바] 난수를 이용한 야구게임(숫자맞추기) 2011.09.26
- [자바] 난수를 이용한 가위바위보 게임 2011.09.26