728x90
반응형
인터페이스를 자손 클래스로 만들기
아래와 같이 abstract 클래스는 extends로 연결하고 implements로 인터페이스 자손으로 연결
class Fight extends Unit implements marine{ //인터페이스를 implements로 묶어 손자 클래스로 변환
int x;
int y;
}
abstract class Unit{
}
interface marine{
void move(int x, int y);
void attact();
인터페이스 장점
두 대상(객체)간의 연결, 대화, 소통을 돕는 중간역활
아래와 같이 선언(설계 - 껍데기)와 구현(실행 - 알맹이)을 분리시킬 수 있게 도와줌
- 즉 붙어있는 경우 변경이 불리하지만, 아래처럼 따로 분리되있는 경우 알맹이만 바꿀 수 있으므로 변경에 유리
- =유연한 코드(인터페이스 덕분에 submethod를 바꾸더라도 method는 유지 가능
class method implements submethod{ //클래스 + 알맹이
public void play() {
}
}
interface submethod{ //껍데기
public void play();
}
아래는 인터페이스 없이 직접적으로 연결된 클래스이다.
직접적으로 연결되 있기 때문에 처리는 빠르지만 수정 시 코드를 뜯어고쳐야 한다는 단점이 있음
package Lecture;
class A{
public void method(B b) { //여기를 바꿔야 가능, 의존하는 경우
b.method();
}
}
class B{
public void method() {
System.out.println("B클래스의 메서드");
}
}
class C{
public void method() {
System.out.println("C클래스의 메서드");
}
}
public class InterfacePolymorphism {
public static void main(String[] args) {
A a = new A();
a.method(new B()); //B클래스 호출
}
}
아래는 인터페이스(껍데기)를 통해 느슨하게 연결된 형태로 수정 시 클래스 A만 변경하면 된다는 장점이 있다.
package Lecture;
class A{
public void method(I i) { //여기를 바꿔야 가능, 의존하는 경우
i.method();
}
}
// B클래스의 선언과 구현을 분리
interface I{
public void method();
}
class B implements I{//인터페이스를 둘다 지원하므로 아래 메인클래스만 변경해주면 편하게 사용 가능
public void method() {
System.out.println("B클래스의 메서드");
}
}
class C implements I{ //인터페이스를 둘다 지원하므로 아래 메인클래스만 변경해주면 편하게 사용 가능
public void method() {
System.out.println("C클래스의 메서드");
}
}
public class InterfacePolymorphism {
public static void main(String[] args) {
A a = new A();
a.method(new C()); //B클래스 호출
// 인터페이스 호출 시 이 기능만 바꿔주면 맨 상단 A는 바꿀필요 없음
}
}
관계없는 클래스들끼리 연결시켜줄 수 있다
- 지상유닛과 공중유닛의 수리 interface를 제작하여 각각 다른 모체 클래스에 속해있는 유닛들의 코드를 간결화 시킬 수 있음
- 아래의 코드처럼 만약 repairable 클래스가 Unit이라는 모체클래스에 속해있지 않다면 출력을 하지 않는 코드로 만들수도 있음
class scv extends Unit implements repairable{
int health = 100;
public void repair(repairable r) {
if(r instanceof Unit){
while(health!=100) {
health++;
}
}
}
}
class dropship extends Unit implements repairable{
int health = 200;
public void repair(repairable r) {
if(r instanceof Unit){
while(health!=200) {
health++;
}
}
}
}
728x90
반응형
'Java > 자바의정석 기초편' 카테고리의 다른 글
자바의 정석 7장 (19일차) - 7장 연습문제 (객체지향 2) (0) | 2022.02.08 |
---|---|
자바의 정석 7장 (18일차) - 인터페이스 static & default (0) | 2022.02.06 |
자바의 정석 7장 (16일차) - 인터페이스 (0) | 2022.02.02 |
자바의 정석 7장 (16일차) - 추상클래스 abstract class (0) | 2022.02.02 |
자바의 정석 7장 (16일차) -instanceof, 다형성 (0) | 2022.02.02 |