| ||||||
| ||||||
2011 제 3회 정보처리기사 실기 가답안
Interface(인터페이스)
인터페이스란
- 표준명세서의 역활
- 상수와 추상메소드만 존재(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가 가능하다
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");
}
}
추상클래스(abstract)
- 메소드에 body가 없는 메소드를 추상메소드라고 한다.
- 추상메소드가 있는 클래스는 반드시 추상클래스이어야 한다.
- 추상메소드가 없는 추상클래스를 의미상의 추상클래스라고 한다.
=> 자신의 메모리 생성을 할 수 있다.
생성을 하면서 메소드를 구현하지 않아도 구현부를 가져야 한다.
의미상의 추상클래스의 메소드는 모두 빈body로 되어 있다.
- 추상메소드가 있는 추상클래스는 자신의 메모리 생성을 할 수 없다
=> 생성하려면 Sub Class를 이용하거나 메소드를 이용해야한다.
- 추상메소드는 반드시 Sub Class에서 Override 꼭 해 주어야 한다.
Override를 안하면 Sub Class 마저도 abstract 가 되어야 한다.
추상메소드의 이점
추상메소드를 쓰는 가장 큰 이유는 반복 사용되는 메소드를 추상화하여 오버라이드 시켜 사용할 수 있는 이점이 있다.
추상메소드는 반드시 오버라이드를 시켜줘야 하기 때문에 혹시나 실수로 메소드명을 잘못입력하더라도 쉽게 찾을 수
있고 무엇보다 추상메소드는 body({}이부분)이 없기 때문에 쓸데 없는 메모리를 잡지 않는다.
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의 경우 ==와 같은 연산이므로 거짓이 된다.
final (상수화)
- final 변수는 반드시 초기값을 주어야 한다.
- final 변수는 대문자로만 기술해야 한다.
- final 메소드는 Override를 할 수 없다.
- final 클래스는 자식클래스를 가질 수 없다.(상속이 안된다)
모아보기
- 2011 제 3회 정보처리기사 실기 가답안 2011.10.16
- 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
- 추상클래스(abstract) 2011.09.26
- Object 2011.09.26
- final (상수화) 2011.09.26