1. 인터페이스
1) 자식 클래스는 implements 를 사용해서 상속함.
2) 추상메소드와 상수만을 멤버로 가질 수 있다.
3) 추상클래스보다 추상화 정도가 높다.
4) 인스턴스 생성 불가.
5) 클래스 작성에 도움을 줄 목적으로 작성.
6) 미리 정해진 규칙에 맞게 구현하도록 표준을 제시하는 데 사용
7) 이벤트처리 등에 활용됨.
8) 유연한 설계가 가능해지고 유지보수가 쉬워짐..
9) 다중상속이 가능함
2. 느슨한 결합
1) 인터페이스를 상속한 클래스는 이를 참조하는 다른 클래스와 느슨한 결합관계에 있기 때문에 코드가 바뀌더라도 다른 클래스에 영향을 미치지 않는다.
예)
public class Member{
public Member();
} .
public class MemberUse{
public MemberUse(Member m){
.....
}
}
위의 예에서 public Member()를 private으로 바꾸더라도 MemberUse메소드에서는 아무런 변화가 없이 참조매개변수 m을 통해서 Member클래스에 접근이 가능하다. 이러한 관계를 느슨한 결합관계라고 한다.
2) 강한 결합관계 – 한 클래스의 변경이 다른 클래스에 영향을 미치는 관계
예)
public class Member{
public Member();
} .
public class MemberUse{
public MemberUse(){
Member m=new Member();
}
}
위의 예에서 public Member()를 private으로 바꾸면 Member m=new Member(); 부분에서 에러가 난다. private으로 바뀐 Member메소드를 외부에서 접근할 수 없는 것이다. 이러한 관계를 강한 결합관계라고 한다.
3) 예제
//인터페이스
public interface Flyer{
public void takeoff();
public void fly();
public void land();
}
//인터페이스 상속한 클래스
public class Airplane implements Flyer{
@Override
public void takeoff(){
System.out.println(“Airplane 이륙”);
}
@Override
public void fly(){
System.out.println(“Airplane 비행”);
}
@Override
public void land(){
System.out.println(“Airplane 착륙”);
}
}
//인터페이스 상속한 클래스
public class Bird implements Flyer{
@Override
public void takeoff(){
System.out.println(“Bird 이륙”);
}
@Override
public void fly(){
System.out.println(“Bird 비행”);
}
@Override
public void land(){
System.out.println(“Bird 착륙”);
}
}
//실제 구현 클래스
public class FlyUse{
public static void main(String[] args){
Bird bird=new Bird();
bird.takeOff();
bird.fly();
bird.land();
Airplane airplane=new Airplane ();
airplane.takeOff();
airplane.fly();
airplane.land();
//다형성. 좌변 부모, 우변 자식(반대는 안됨)
//하나의 부모 자료형으로 다양한 자식클래스의 메소드 호출함.
Flyer f=new Bird();
f.takeOff();
f.fly();
f.land();
f=new Airplane();
f.takeOff();
f.fly();
f.land();
}
}
3. 구 그리기 예제
1) 클래스와 인터페이스를 동시에 상속받으면 클래스 상속을 먼저 쓴다.
extends 부모클래스 implements 인터페이스
2) applet에는 main 메소드가 없다.
3) 웹브라우저에서는 보안상의 문제 때문에 applet 실행을 막아놓았다.
4) applet에서는 자동으로 paint메소드를 호출하도록 되어 있다.
paint라는 메소드는 자바에서 그래픽 처리를 담당하는 메소드이다.
Java.awt에 있는 paint를 import해서 사용해야 함.
5) Graphics : 자바에 내장되어 있는 그래픽 처리 클래스
6) 소스코드 설명
Draw라는 인터페이스를 만들고
그것을
DrawCircle과 DrawLine이라는 클래스로 구현하였다.
(paint 메소드를 overriding했음.)
또한 동시에
좌표값을 저장하는 클래스인 Point클래스도 상속받았다.
이것들을
DrawUse 클래스로 실행했음.
import java.awt.Graphics;
public interface Draw {
//Graphics를 쓰려면 java.awt에 있는 Graphics를 import해야 함.
//다른 하나가 더 있는 데 그것을 import하면 안됨.
void paint(Graphics g);
}
//좌표값을 저장하는 클래스
public class Point {
int a,b;
//기본생성자
public Point() {
//매개변수 있는 생성자 호출
this.(0,0);
}
public Point(int a, int b) {
this.a=a;
this.b=b;
}
}
import java.awt.Color;
import java.awt.Graphics;
public class DrawCircle extends Point implements Draw {
private int width, height;
public DrawCircle() {
this(0,0,0,0)
}
public DrawCircle(int a, int b, int w, int h) {
super(a,b);
width=w;
height=h;
}
@Override
public void paint(Graphics g) {
//타원그리기
g.drawOval(a, b, width, height);
//기본색상변경
//g.setColor(Color.cyan);
//타원을 그리되 타원안의 색상 추가
//g.fillOval(a, b, width, height);
}
}
import java.awt.Color;
import java.awt.Graphics;
public class DrawLine extends Point implements Draw {
private int x,y;
public DrawLine(int a, int b, int x, int y) {
super(a,b);
this.x=x;
this.y=y;
}
@Override
public void paint(Graphics g) {
g.setColor(Color.red);
g.drawLine(a,b,x,y);
}
}
//검은 줄 : 지금은 되는데 앞으로는 지원하지 않을 것이라는 경고.
import java.applet.Applet;
import java.awt.Color;
import java.awt.Graphics;
public class DrawUse extends Applet{
Draw shape1;
Draw shape2;
public DrawUse() {
//다형성 구현
shape1=new DrawCircle(30,30,60,80);
shape2=new DrawLine(10,20,150,100);
//배경색상
setBackground(Color.orange)
}
public void paint(Graphics g) {
g.setColor(Color.magenta);
g.drawString("자바그래픽",100,60);
shape1.paint(g);
shape2.paint(g);
}
}
Tip :
1) interface는 new > interface에서 만든다.
2) 잘못해서 class를 만들었다면 코딩창에서 class를 지우고 바로 interface를 타이핑해도 된다.
3) interface에서 메소드를 만들때는 중괄호{}가 없어야 한다.
중괄호가 있으면 메소드에 코딩이 된 것으로 간주하기 때문이다.
4) interface 상속받는 클래스 만드는 법
① new > class > 만들 클래스 이름 적고
② interfaces 옆의 add버튼 클릭
③ 인터페이스 명(Flyer)을 친다.
④ 골라서 ok
⑤ finish
⑥ 구현해야 할 메소드가 죽 만들어진다.
5) F3 코드보기
6) F4 계층구조(상속관계) 보기
7) import 방법
ctl + shift + O
혹은
import하고자 하는 클래스명에 마우스를 갖다 대면 된다.
'공부방 > 자바프로그래밍' 카테고리의 다른 글
자바 유용한 클래스들 – Math, Calendar, Arrays, Random 클래스 (0) | 2020.11.02 |
---|---|
자바 유용한 클래스들 - String 클래스 (0) | 2020.10.08 |
자바 유용한 클래스들 - Object 클래스 (0) | 2020.09.22 |
자바 내부클래스 (0) | 2020.09.07 |
자바 추상화 (0) | 2020.08.23 |
자바 다형성 (0) | 2020.08.12 |
자바 final (0) | 2020.08.07 |
자바 static 변수(정적변수) (0) | 2020.07.30 |
댓글