쉽게 배우는 자바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와 같이 작업에 있어서 복수의 접근을 막을 필요가 있는 경우에 해당 인터페이스를 적용합니다.
'들은 강의' 카테고리의 다른 글
[혼자 공부하는 C언어] - 1~3 (컴파일러, 데이터 출력, 상수, 데이터 표현, 변수, 데이터 입력) (0) | 2023.06.06 |
---|---|
[생활코딩 자바2] - 6. JAVA 예외(checked exception, Finally, Resource, Try with Resource) (1) | 2023.06.06 |
[생활코딩 자바2] - 4.JAVA 상속(상속, Overriding, Overloading, this, super) (0) | 2023.06.06 |
[생활코딩 자바2] - 3. JAVA 객체지향 프로그래밍(클래스, 인스턴스, static, this) (0) | 2023.06.06 |
[생활코딩 자바2] - 2. JAVA 메소드(리팩토링, 파라미터, return) (1) | 2023.06.06 |