본문 바로가기
들은 강의

[생활코딩 자바2] - 5. JAVA 인터페이스

by hotdog7778 2023. 6. 6.

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

해당 강의는 https://www.boostcourse.org/cs128 에서 무료로 수강 할 수 있다.


 

1. 수업 소개

들어가기 전에

세상에는 표준이라는 규격이 있습니다. 마치 가정용 전기 제품은 220V 교류 전기를 사용한다는 것처럼 말입니다.

클래스를 생성할 때도, 이러한 약속, 규격에 해당하는 것이 인터페이스라고 할 수 있습니다.

학습 목표

인터페이스의 특징에 대해서 알아봅니다.

핵심 단어

  • 인터페이스 : 규격, 약속

강의 내용

interface Calculable{
	int sum(int v1, int v2);
}
class DummyCal implements Calculable{ //더미칼 클래스가 칼큘러블 인터페이스의 규격을 준수했다는 의미  
	public int sum(int v1, int v2) {
		return v1+v2 ;
	}
}

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

}

2. 인터페이스의 형식

들어가기 전에

클래스의 규격을 정의하는 인터페이스는 어떻게 사용해야 할까요?

이번 시간에는 인터페이스의 형식에 대해서 알아봅니다.

학습 목표

인터페이스의 형식에 대해서 알아봅니다.

핵심 단어

  • 인터페이스

강의 내용

인터페이스는 여러 개를 모두 적용할 수 있습니다. 이 경우 적용한 인터페이스들의 메소드를 모두 구현해야 합니다.

인터페이스에는 변수를 정의할 수도 있습니다. 다만 변수는 반드시 초기화되어야 합니다. 인터페이스를 적용한 클래스는 변수를 다시 대입할 수 없습니다.

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

}

3. 다형성

들어가기 전에

지난 시간에 인터페이스에 대해서 알아 보았습니다.

이번에는 인터페이스에서 조금 더 나아가서 다형성에 대해서 알아보도록 합니다.

학습 목표

다형성이 무엇인지 알아봅니다.

핵심 단어

  • 다형성(polymorphism)

강의 내용

클래스의 인스턴스를 변수로 선언할 때, 해당 클래스의 데이터 타입으로 선언하지 않고

부모 클래스나 인터페이스를 데이터 타입으로 선언할 수도 있습니다.

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

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

ReaCal 인스턴스를 Calculable 타입으로 선언하면, Printable 메소드를 사용할 수 없습니다.

반대로 Printable 타입으로 선언하면, Calculable 메소드를 사용할 수 없습니다.

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) {
		Calculable c = new RealCal();
		System.out.println(c.sum(2, 1));
		c.print(); // Compile Error
		System.out.println(c.PI);
	}

}

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

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

FileWriter 인스턴스는 초기화를 할 때 파일에 접근해서 현재 파일을 점유하고 있다는 표시를 합니다.

다 끝낸 후에는 close 메소드를 이용해서 현재 파일에 대한 점유를 끝낸다는 표시를 합니다.

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

https://docs.oracle.com/javase/8/docs/api/java/lang/AutoCloseable.html

AutoCloseable에는 close 메소드 하나만 선언되어 있는데,

FileWriter와 같이 작업에 있어서 복수의 접근을 막을 필요가 있는 경우에 해당 인터페이스를 적용합니다.