본문 바로가기

그 땐 Programming Languages했지/그 땐 JAVA했지

[self-study/생활코딩] | ① 인터페이스의 형식 ② 다형성

728x90

참고자료: Youtube - 생활코딩 JAVA1

 

수업 소개
//인터페이스로 형태를 규제한다.
interface Calculable {
    int sum(int v1, int v2);
}

//인터페이스 형태대로 클래스를 생성한다.
class RealCal implements Calculable {
    public int sum(int v1, int v2) {
        return v1 + v2;
    }
}

//인터페이스 형태대로 클래스를 생성한다.
class DummyCal implements Calculable {
    public int sum(int v1, int v2) {
        return 3;
    }
}

public class InterfaceApp {
    public static void main(String[] args) {
        DummyCal c = new DummyCal();
        System.out.println(c.sum(2,1));
    }
}

📌인터페이스는 약속이다. 인터페이스는 클래스의 형식을 규제한다.

 

인터페이스의 형식
interface Calculable {
    double PI = 3.14;
    int sum(int v1, int v2);
}

interface Printable {
    void print();
}

class RealCal implements Calculable, Printable {
    public int sum(int v1, int v2) {
        return v1 + v2;
    }

    public void print() {
        System.out.println("This is RealCal!!");
    }
}

public class InterfaceApp {
    public static void main(String[] args) {
        RealCal c = new RealCal();
        System.out.println(c.sum(2,1));
        c.print();
        System.out.println(c.PI);
    }
}

📌자바는 하나의 클래스만 상속받을 수 있다. 자바는 여러개의 인스턴스를 상속받을 수 있다.

👉🏻인터페이스는 메소드와 변수가 올 수 있다. 다만 메소드는 직접 구현하지 않아서 해당 인터페이스에서 지정한 형태를 만족하는 메서드는 직접 구현해야 한다.

 

다형성
interface Calculable {
    double PI = 3.14;
    int sum(int v1, int v2);
}

interface Printable {
    void print();
}

class RealCal implements Calculable, Printable {
    public int sum(int v1, int v2) {
        return v1 + v2;
    }

    public void print() {
        System.out.println("This is RealCal!!");
    }
}

public class InterfaceApp {
    public static void main(String[] args) {
        //RealCal이라는 클래스를 데이터타입으로 지정하고 있다.
        //RealCal은 Calculable과 Printable을 상속받고 있으므로 두 인터페이스 모두 데이터 타입으로 지정할 수 있다.
        RealCal c = new RealCal();
        System.out.println(c.sum(2,1));
        c.print(); //인스턴스 c는 Printable 인스턴스를 상속받으므로 print메서드 이용 가능
        System.out.println(c.PI);
        Calculable d = new RealCal();
        d.print(); //인스턴스 d는 Printable 인스턴스를 상속받지 않아로 print메서드 이용 불가능
    }
}

📌Polymorphism, 다형성: 본인이 원하는 기능을 가진 인터페이스만 상속받아 효율적인 class를 만드는 속성

728x90