충분히 쌓여가는
인터페이스의 장점 본문
인터페이스의 장점
두 대상(객체) 간의 연결, 대화, 소통을 돕는 중간 역할을 한다
선언(설계)와 구현을 분리시킬 수 있게 한다
개발 시간을 단축할 수 있다
표준화가 가능하다(JDBC)
서로 관계없는 클래스들의 관계를 맺어줄 수 있다
인터페이스 덕분에 B가 변경되어도 A는 안바꿀 수 있게 된다(느슨한 결합)
A클래스의 변경 불필요, 인터페이스만 변경해주면됨 -> 변경에 유리
B의 method()를 추상메서드로 갖는 인터페이스 작성
(점선은 B를 C로 변경)
강한 결합
class A {
public void method(B b) {
b.method();
}
}
class B {
public void method() {
System.out.println("B클래스의 메서드");
}
}
public class InterfaceTest {
public static void main(String[] args) {
A a = new A();
a.method(new B()); // A가 B를 사용(A가 B에 의존하고 있다)
}
}
B클래스의 메서드
만약 C라는 클래스가 생길경우 A 클래스와 main메서드를 바꿔야한다
(중요)A 클래스: public void method(B b) -> public void method(C b)
main 메서드: a.method(new B()); -> a.method(new C());
class A {
public void method(C b) { // 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 InterfaceTest {
public static void main(String[] args) {
A a = new A();
a.method(new C()); // a.method(new B());
}
}
C클래스의 메서드
인스턴스 사용 후
class A {
// public void method(C c) {
public void method(I 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 InterfaceTest {
public static void main(String[] args) {
A a = new A();
a.method(new C()); // a.method(new B());
}
}
C클래스의 메서드
서로 관계없는 클래스들의 관계를 맺어줄 수 있다
오버로딩(같은이름 메서드)
문제점: GroundUnit에 SCV, Tank는 가능하지만, Marine는 들어가면 안되지만 들어갈 수도 있다,
또한 Dropship도 GroundUnit의 자손이 아니기 때문에 불가능하다
void repair (Tank t) {
}
void repair (Dropship d) {
}
void repair (GroundUnit gu) {
}
인터페이스 다형성 사용
Repairable이라는 인터페이스를 만들어 SCV, Tank, Dripship에 부여한다
interface Reapirable {}
class SCV extends GroundUnit implements Repairable {
// ...
}
class Tank extends GroundUnit implements Repairable {
// ...
}
class Dripship extends AirUnit implements Repairable {
// ...
}
인터페이스 구현한 것들만 가능
void repair(Repairable r) { // 매개변수: Repairable
if (r instanceof Unit) {
Unit u = (Unit) r;
while(u.hitPoint != u.MAX_UP) {
u.hitPoint++;
}
}
}
'Java > 객체지향' 카테고리의 다른 글
객체지향언어 정리 (0) | 2023.10.22 |
---|---|
default 메서드와 static 메서드 (0) | 2023.06.16 |
인터페이스를 이용한 다형성 (0) | 2023.06.15 |
인터페이스의 선언, 상속, 구현 (0) | 2023.06.15 |
추상클래스의 작성 (0) | 2023.06.14 |