- interface: 어떤 객체가 있고 그 객체가 특정한 인터페이스를 사용한다면 그 객체는 반드시 메소드들을 구현해야하는데 그렇지 않다면 컴파일도 안된다!.
abstract:"하위클래스에서 상속하도록 오버라이딩 하도록 비어있는 내용의 abstract메소드 있지만
구체적인 메소드나 필드가 존재할 수 있는(오버라이딩)
interface : 구체적인 로직 interface안에 포함x 반드시 본체가 없는 메소드 들만
package practice0407;
abstract class A {
int a;
abstract void f();
}
class B extends A implements C {
@Override
public void f() {
System.out.println("배고프다");
}
@Override
public void ss() {
}
}
interface C {
void f();
void ss();
}
public class Abstract {
public static void main(String[] args) {
C c = new B(); //인터페이스도 타입으로 존재가능함ㅇㅇ
A a = new B();
// A a1 = new A(); //추상 클래스를 상속받는 하위 클래스를 통해 객체를 생성하여 사용가능.
a.f();
}
}
▲▲ 인터페이스도 타입으로 존재가 가능하다▲▲
- 인스턴스 생성 여부: 인터페이스를 구현한 클래스의 인스턴스를 생성하여 사용.
- 추상 클래스를 상속받는 하위 클래스를 통해 객체를 생성하여 사용.


2) 실질적인 쓰임~ 알아보자고!
상황 : 개발자 A는 계산기 만드는 작업을 하고 B는 계산기 사용하는 작업을 하기로 했는데 가짜 클래스를 만들어서 서로 코딩 후 3개월 뒤에 만났다.

아닛??! 왜 인자가 3개 하랬더니 2개야.... 오류났잖아 어뜩해 잉?

어.... 우리 그냥 인터페이스 도입합시다 !!!
도입 후
서로 합의해서 인터페이스를 만든다!

이런 형식으로 작성하세욧!!



return 60 20 -> 계산된 값이 아닌 임의의 값이 박혀있음

3) 인터페이스의 접근 제어자는 반드시 public!!!! ( 조작장치라 생각하면 된다)

자바에서 클래스를 상속할 때는 상속받는 클래스(하위클래스)는 하나의 부모클래스만 상속받을 수 있다
but 인터페이스는 여러개 구현가능~

인터페이스도 상속이 된당

결합도, 응집도 설명~
package practice0407;
class SamsungTv implements Tv {
@Override
public void turnOn() {
System.out.println("Samsung 전원 on~");
}
@Override
public void turnOff() {
System.out.println("Samsung 전원 off~");
}
}
class LgTv implements Tv {
@Override
public void turnOn() {
System.out.println("Lg 전원 on~");
}
@Override
public void turnOff() {
System.out.println("Lg 전원 off~");
}
}
interface Tv {
public void turnOn();
public void turnOff();
}
public class Abstract {
public static void main(String[] args) {
SamsungTv st1 = new SamsungTv(); //결합도↑ 응집도 ↓
Tv st = new SamsungTv(); //결합도↓ 응집도↑
st = new LgTv();
st.turnOn();
st.turnOff();
}
}
▼▼결합도가 낮으면 유지보수가 쉬워진다▼▼
package practice0407;
class SamsungTv implements Tv {
@Override
public void turnOn() {
System.out.println("Samsung 전원 on~");
}
@Override
public void turnOff() {
System.out.println("Samsung 전원 off~");
}
}
class LgTv implements Tv {
@Override
public void turnOn() {
System.out.println("Lg 전원 on~");
}
@Override
public void turnOff() {
System.out.println("Lg 전원 off~");
}
}
class BeanFactory {
public Object getBean(String beanName) {
if (beanName.equals("samsung")) {
return new SamsungTv();
} else if (beanName.equals("lg")) {
return new LgTv();
}
return null;
}
}
interface Tv {
public void turnOn();
public void turnOff();
}
public class Abstract {
public static void main(String[] args) {
BeanFactory factory = new BeanFactory();
Tv st = (Tv) factory.getBean("samsung");
// Tv st = (Tv)factory.getBean(args[0]); //bean 어떤 객체를 생성해주는것
st.turnOn();
st.turnOff();
}
}
'JAVA > ★객체지향' 카테고리의 다른 글
예외(1)/try catch + try with resource/ e.getMessage() /e.toString()/e.printStackTrace / (0) | 2023.03.13 |
---|---|
다형성 (0) | 2023.03.13 |
final ( <-> abstract) 사용빈도 높지는 않다 (0) | 2023.03.13 |
abstract (0) | 2023.03.13 |
접근 제어자 public private (0) | 2023.03.13 |