객체지향 프로그래밍 복습 (7) Interface
[JAVA] 객체지향 프로그래밍 복습 (7) Interface
자바
자바(Java)는 C언어에 객체 지향적 기능을 추가하여 만든 C++과는 달리, 처음부터 객체 지향 언어로 개발된 프로그래밍 언어입니다. 자바는 자바 가상 머신(JVM, Java Virtual Machine)을 사용하여, 운영체제와는 독립적으로 동작할 수 있습니다. 따라서 자바는 어느 운영체제에서나 같은 형태로 실행될 수 있습니다. 바로 이러한 점이 수많은 개발자로 하여금 자바를 사용하게 하는 원동력이 되고 있습니다. 현재 자바는 전 세계에서 가장 많이 사용하는 프로그래밍 언어 중 하나입니다.
인터페이스 Interface
자식 클래스가 여러 부모 클래스를 상속받을 수 있다면, 다양한 동작을 수행할 수 있다는 장점을 가지게 될 것입니다. 하지만 클래스를 이용하여 다중 상속을 할 경우 메소드 출처의 모호성 등 여러 가지 문제가 발생할 수 있어 자바에서는 클래스를 통한 다중 상속은 지원하지 않습니다. 하지만 다중 상속의 이점을 버릴 수는 없기에 자바에서는 인터페이스라는 것을 통해 다중 상속을 지원하고 있습니다. 인터페이스(interface)란 다른 클래스를 작성할 때 기본이 되는 틀을 제공하면서, 다른 클래스 사이의 중간 매개 역할까지 담당하는 일종의 추상 클래스를 의미합니다. 자바에서 추상 클래스는 추상 메소드뿐만 아니라 생성자, 필드, 일반 메소드도 포함할 수 있습니다. 하지만 인터페이스(interface)는 오로지 추상 메소드와 상수만을 포함할 수 있습니다.
iSensor 인터페이스
다음과 같은 구조의 인터페이스와 클래스에서 iProximitySensor를 구현합니다.
- iProximitySensor 인터페이스
- boolean 형의 start, stop 함수
- 센서 종류 반환 함수
- 센서 정보 출력 함수
- 레이저 거리 반환 함수
레이저 종류 별로 각각 다른 발사거리를 갖습니다.
- Laser 클래스
- Inductive 클래스(전기 유도)
- InfraredRat 클래스(적외선)
iProximitySensor.java
public interface iProximitySensor {
public boolean start();
public boolean stop();
public String getSensorType();
public void printInfo();
public float getDistance();
}
Laser.java
import java.util.Random;
public class Laser implements iProximitySensor{
public Laser() {
System.out.println("A laser sensor is created");
}
public boolean start() {
return true;
}
public boolean stop() {
return true;
}
public String getSensorType() {
return "Laser Sensor";
}
public void printInfo() {
System.out.println("Laser Proximity Sensor");
}
public float getDistance() {
Random random = new Random();
return random.nextInt(699) + 2;
}
}
Inductive. java
import java.util.Random;
public class Inductive implements iProximitySensor{
public Inductive() {
System.out.println("A inductive sensor is created");
}
public boolean start() {
return true;
}
public boolean stop() {
return true;
}
public String getSensorType() {
return "Inductive Sensor";
}
public void printInfo() {
System.out.println("Inductive Proximity Sensor");
}
public float getDistance() {
Random random = new Random();
return random.nextInt(6);
}
}
InfraredRay.java
import java.util.Random;
public class InfraredRay implements iProximitySensor{
public InfraredRay() {
System.out.println("A ray sensor is created");
}
public boolean start() {
return true;
}
public boolean stop() {
return true;
}
public String getSensorType() {
return "Ray Sensor";
}
public void printInfo() {
System.out.println("Ray Proximity Sensor");
}
public float getDistance() {
Random random = new Random();
return random.nextInt(11);
}
}
RangeFinder.java
public class RangeFinder {
public RangeFinder(iProximitySensor a) {
System.out.println("A range sensor is created, and its sensor type is " + a.getSensorType());
}
public void printInfo(iProximitySensor a) {
System.out.print("This is range finder, using ");
a.printInfo();
}
public float getDistance(iProximitySensor a) {
return a.getDistance();
}
public static void main(String[] args) {
Laser laser = new Laser();
Inductive inductive = new Inductive();
InfraredRay ray = new InfraredRay();
System.out.println("\n");
RangeFinder rg1 = new RangeFinder(laser);
RangeFinder rg2 = new RangeFinder(inductive);
RangeFinder rg3 = new RangeFinder(ray);
System.out.println("\n");
rg1.printInfo(laser);
System.out.println(rg1.getDistance(laser) + "m");
rg2.printInfo(inductive);
System.out.println(rg2.getDistance(inductive) + "m");
rg3.printInfo(ray);
System.out.println(rg3.getDistance(ray) + "m");
}
}