본문 바로가기
Language/JAVA

[JAVA] 인터페이스 1~5 interface , 다형성

by 아이엠제니 2022. 2. 11.

부스트코스 생활코딩 [쉽게 배우는 자바2] 공부 기록

 

 

1. 수업소개

Interface

이 수업을 듣기 위해서는 class와 instance의 개념을 알아야 한다 !!

package javaChapter2_12;

interface Calculable {
    int sum(int v1, int v2);
}

class RealCal implements Calculable {

    @Override
    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) {
        RealCal c = new RealCal();
        System.out.println(c.sum(2, 1));
    }
}

인터페이스에 대한 첫인상은 '약속'이다.

클래스의 형태를 규정한다.

 

 

 

2. 인터페이스의 형식

interface 이름은 대문자로 시작을 하고, 형용사로 쓰는 경우가 많다. 

하나의 class는 여러 개의 interface를 구현할 수 있다 !!

인터페이스에는 메소드와 변수가 정의될 수 있는데 변수에는 값이 들어오고,

메소드에는 실제 구현이 들어온다.

package javaChapter2_12;

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

interface Printable {
    void print();
}

class RealCal implements Calculable, Printable { // 여러 개의 interface 구현 OK

    @Override
    public int sum(int v1, int v2) {
        return v1 + v2;
    }

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

class DummyCal implements Calculable {
    public int sum(int v1, int v2) {
        return 3;
    }
}

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);
    }
}

 

쉽지 않네 인터페이스 ?? 😥

 

 

 

3. 다형성 (Polymorphism)

package javaChapter2_12;

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

interface Printable {
    void print();
}

class RealCal implements Calculable, Printable { // 여러 개의 interface 구현 OK

    public int sum(int v1, int v2) {
        return v1 + v2;
    }

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

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

public class InterfaceApp {
    public static void main(String[] args) {
        Printable c = new AdvancedPrint();
        c.print();
    }
}

객체 타입이 부모 클래스, 인터페이스, 자식 클래스 등 여러 형태인데도

인스턴스로 만든 객체(자식 클래스의 인스턴스)와 같이 행동하는 것을 다형성이라고 함.

 

 

 

4. 사용설명서 속의 인터페이스

 

FileWriter (Java Platform SE 7 )

Convenience class for writing character files. The constructors of this class assume that the default character encoding and the default byte-buffer size are acceptable. To specify these values yourself, construct an OutputStreamWriter on a FileOutputStrea

docs.oracle.com

package javaChapter2_12;

import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;

public class FileWriterApp {
    public static void main(String[] args) throws IOException {
        Writer fileWriter = new FileWriter("filewriter.txt");

        fileWriter.write("data 1");
        fileWriter.write("data 2");
        fileWriter.write("data 3");

        fileWriter.close();

    }
}

close 메소드로 현재 파일에 대한 점유를 끝낸다는 표시를 함.

close 메소드는 AutoCloseable 인터페이스에 선언되어 있는 메소드임.

 

 

 

5. 수업을 마치며

인터페이스의 용도(?) 쓰임(?) 이런 게 어려운 것 같다.

상속과 비슷한 느낌을 주는 것 같으면서 뭔가 다르다.

상속이 extends를 사용한다면, 인터페이스는 implements.

처음에는 이것조차도 헷갈렸는데, 지금은 구분이 가다니 그것은 다행이다.

알아가자.

 

300x250