학습목표 : 인터페이스가 낮은 수준에서 어떻게 구현되는지 알게된다.
시나리오 : 버스, 자가용, 자전거가 각각의 클락션 소리를 낸다고 가정한다.
1. MainSample.java
package interfacesample.ver1;
public class MainSample {
public static void main(String[] args) {
// TODO Auto-generated method stub
Bus bus = new Bus();
System.out.printf("Bus Sound : %s \n",bus.sound());
Car car = new Car();
System.out.printf("Car Sound : %s \n",car.sound());
Bike bike = new Bike();
System.out.printf("Bike Sound : %s \n",bike.sound());
}
}
// Bus Sound
class Bus{
public String sound() {
return "빠 ~~~앙";
}
}
// Car Sound
class Car{
public String sound() {
return "빵 빵";
}
}
// Bike Sound
class Bike{
public String sound() {
return "따릉 따릉";
}
}
# 위 프로그램의 경우 각각의 클래스를 객체화하여 사운드를 듣게한다.
2. MainSampleImprovement.java
package interfacesample.ver1;
import java.util.Scanner;
public class MainSampleImprovement {
public static void main(String[] args) {
// TODO Auto-generated method stub
IfSound s = new Bus();
Scanner scan = new Scanner(System.in);
while(true){
System.out.println("Input vehicle Sound : ");
String strSound = scan.next();
System.out.printf("Input value : %s \n", strSound);
if (strSound.equals("Bus")) { s = new Bus();
}else if (strSound.equals("Car")) { s = new Car();
}else if (strSound.equals("Bike")){ s = new Bike();
}
// 입력 받은 값이 어떤 값이든, 아래 구문의 s 참조변수는 그대로 사용 가능하다.
System.out.printf("Sound : %s \n",doSound(s));
}
}
public static String doSound(IfSound s) {
return s.sound();
}
}
// Interface
interface IfSound{
public String sound();
}
// Bus Sound
class Bus implements IfSound{
@Override
public String sound() {
return "빠 ~~~앙";
}
}
// Car Sound
class Car implements IfSound{
@Override
public String sound() {
return "빵 빵";
}
}
// Bike Sound
class Bike implements IfSound{
@Override
public String sound() {
return "따릉 따릉";
}
}
# 인터페이스를 사용하여, 어떤 입력값이 오더라도, 함수의 파라메터값을 동일하게 유지할 수 있는 확장성을 가진다.
# 해당 인터페이스이 구현체를 Di 로 구현하고 Interface 에서 @Autowire 로 구현하면 본문에서 구현체의 생성없이도 스프링에서 사용 가능한 구조가 된다.
'Java' 카테고리의 다른 글
final 키워드에 대한 고찰 (0) | 2021.05.11 |
---|---|
[Interface & Extends] 이 둘의 단순하지만 OOP적인 Collaboration (0) | 2021.05.06 |
Abstract vs Interface (0) | 2021.04.24 |
[JAVA] Servlet , Beans 차이가 뭔가? (4) | 2021.04.21 |
[JAVA] Collection & Map (0) | 2021.04.19 |