인터페이스(interface)
1. 추상 클래스의 일종으로 추상 클래스보다 추상화 정도가 높다.
2. 추상메서드만 가능하다. 일반 메서드는 선언 불가 => public abstract
3. 상수만 선언 가능하다. 변수는 불가 => public static final
4.interface에도 클래스와 같이 접근제어자로 public 또는 default를 사용할 수 있다.
인터페이스를 작성하는 것은 클래스를 작석하는 것과 같다. 다만 키워드로 class 대신 interface를 사용한다는 것만 다르다.
인터페이스의 장점
1. 서로 관련이 없는 클래스들을 같은 명령으로 처리할 수 있다. => 표준화 가능
2. 독립적인 프로그래밍이 가능하다.
3. 재사용이 쉬워지고 따라서 개발 기간이 단축된다.
//abstract class Shape{//추상클래스
interface Shape{
//public abstract double getArea();//추상 메서드
double getArea();//추상 메서드// public abstract 생략 가능하다.
}
interface Resizeable{
//public abstract void reSize(double factor);//생략 가능
void reSize(double factor);
}
class Circle implements Shape, Resizeable{//여러개의 인터페이스를 구현할 수 있다.
private double mRadius;
Circle(double radius){
mRadius = radius;
}
@Override
public double getArea() {
return Math.PI * mRadius * mRadius;
}
@Override
public void reSize(double factor) {
mRadius = mRadius * factor;
}
}
class Rectangle implements Shape, Resizeable{//인터페이스 상속
private double mWidth;
private double mHeight;
Rectangle(double width, double height){
mWidth = width;
mHeight = height;
}
@Override //접근 제어가 더 작게 오버라이딩 할 수 없다.(예를들어,public 멤버를 private멤버로 오버라이딩 불가)
public double getArea() {
return mWidth * mHeight;
}
@Override
public void reSize(double factor) {
mWidth = mWidth * factor;
mHeight = mHeight * factor;
}
}
public class Interface {
public static void main(String[] args) {
Circle cir = new Circle(5.2);
System.out.println("원의 넓이는 " + cir.getArea() + "입니다.");
cir.reSize(2);
System.out.println("원의 넓이는(크기 조절 후) " + cir.getArea() + "입니다.");
Rectangle rec = new Rectangle(4, 2.56);
System.out.println("사각형의 넓이는 " + rec.getArea() + "입니다.");
rec.reSize(2);
System.out.println("사각형의 넓이는(크기 조절 후) " + rec.getArea() + "입니다.");
}
}
// Drawable 인터페이스 정의
interface Drawable {
void draw(); // 인터페이스에서 메서드 선언만 함
}
// Circle 클래스는 Drawable 인터페이스를 구현함
class Circle implements Drawable {
private int radius;
public Circle(int radius) {
this.radius = radius;
}
// 인터페이스에서 선언된 메서드 구현
@Override
public void draw() {
System.out.println("원을 그립니다. 반지름: " + radius);
}
}
// Rectangle 클래스도 Drawable 인터페이스를 구현함
class Rectangle implements Drawable {
private int width;
private int height;
public Rectangle(int width, int height) {
this.width = width;
this.height = height;
}
// 인터페이스에서 선언된 메서드 구현
@Override
public void draw() {
System.out.println("사각형을 그립니다. 너비: " + width + ", 높이: " + height);
}
}
public class Main {
public static void main(String[] args) {
// 인터페이스를 구현한 클래스의 인스턴스 생성
Circle circle = new Circle(5);
Rectangle rectangle = new Rectangle(4, 6);
// draw 메서드 호출
circle.draw(); // "원을 그립니다. 반지름: 5"
rectangle.draw(); // "사각형을 그립니다. 너비: 4, 높이: 6"
}
}
interface Repairable{
/* public abstract */void repair();
}
class Phone implements Repairable{
@Override
public void repair() {
System.out.println("휴대폰 수리 완료");
}
public void call() {
System.out.println("휴대폰 통화 중...");
}
}
class Vehicle implements Repairable{
@Override
public void repair() {
System.out.println("차량 수리 완료");
}
public void drive() {
System.out.println("차량 운전 중");
}
}
public class _03_Interface {
public static void main(String[] args) {
Vehicle ve = new Vehicle();
ve.repair();
ve.drive();
Phone ph = new Phone();
ph.repair();
ph.call();
}
}'JavaStudy' 카테고리의 다른 글
| [Java] 래퍼클래스(wrapper) (0) | 2023.12.05 |
|---|---|
| [Java] ArrayList (0) | 2023.12.04 |
| [Java] collections framework (1) | 2023.12.04 |
| [Java] 예외처리(Exception Handling) (1) | 2023.12.01 |
| [Java] Overriding (0) | 2023.11.30 |