본문 바로가기
back-end/JAVA

42) 인터페이스의 장점2

by 모두의 향연 2021. 6. 24.
728x90
반응형

42) 인터페이스의 장점 2

1. 장점

  • 개발 시간을 단축할 수 있다
A가 B를 사용

A가 B를 사용하려면 먼저 B가 완성되어야 한다. 그래서 시간이 걸린다.

A는 B대신 I를 사용

하지만 인터페이스를 사용하는 경우, A는 껍데기만 있으면 된다. B가 완성이 안 돼있어도 A는 B를 사용하면 된다. I는 추상 메서드의 집합이기 때문에 A에 가져와서 나머지를 완성하면 된다.


  • 변경에 유리한 유연한 설계가 가능하다

이전 시간에 했던 거라 '인터페이스의 장점 1을 참고하세요.


  • 표준화가 가능하다
JDBC

Java Application을 개발하는 회사는 DB에 데이터를 요청하고 data를 주고받으며 어플을 개발한다.
만약 DB회사가 여러 개 있는데 한 회사가 가격을 올린다고 한다. 그럼 기존에 쓰는 사용자는 다른 DB회사로 옮기고 싶다. 하지만 DB회사에 따라 형식을 변경해줘야 하기 때문에 막대한 비용이 든다. 그래서 Java는 'JDBC'라는 표준 인터페이스를 만들어 DB시스템이 바뀌어도 애플리케이션을 수정 없이 사용할 수 있게 해 놨다. 굿굿..
(한국 공업 표준이 있는 이유.. 나사와 볼트의 모양이 다 다르면 사용자는 너무 불편하겠죠)


  • 서로 관계없는 클래스들을 관계를 맺어줄 수 있다
상속계층도

여기서 SCV, Tank, Dropship을 수리하는 코드를 작성한다고 하자.
일일이 하려면 코드가 길어지니까 다형성을 이용해서 코드를 작성하자고 할 때.

1
2
3
4
5
6
7
8
9
10
11
void repair(Tank t){
    //tank를 수리한다
}
 
void repair(Dropship d){//repair오버로딩
    //Dropship를 수리한다
}
 
void repair(GroundUnit gu){
    //매개변수로 넘겨진 GroundUnit을 수리한다.
}
cs

다형성을 이용하려고 9행과 같이 GroundUnit을 매개변수로 작성하지만, Marine은 수정할 필요가 없는데 수정하게 되고 Dropship은 포함되지 않는다. 그래서 인터페이스를 사용하여 수정할 것만 수정하려고 한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
interface Repairable{ }//내용은 아무것도 없음
 
class SCV extends GroundUnit implements Repairable{
    //...
}
 
class Tank extends GroundUnit implements Repairable{
    //...
}
 
class Dropship extends AirUnit implements Repairable{
    //...
}
cs

이 세 클래스의 공통점은 Repairable을 구현한다는 공통점이 있다.

세 클래스는 아래 메서드만 있으면 된다.

1
2
3
4
5
6
7
8
9
void repair(Repairable r){//매개변수로는 Repairable을 구현한 놈들만 가능
    if(r instanceof Unit){
        Unit u = (Unit)r;
        while(u.hitPoint!=u.MAX_HP){
            U.hitPoint++;
            }
    }
}
cs


*유튜브 남궁성 선생님의 `자바의 정석`을 참고하여 만들었습니다*
*자세히 보고 싶은 분들은 유튜브 가서 보시면 됩니다*

728x90
반응형