인터페이스 / 다형성 / 익명클래스
'잘 되겠지라고 생각하면 잘 되는것 같아요'
'우리가 본것은 수많은 가능성중 하나'
'내가 하고자하는 일에서 긍정적인 사고는 중요하다'
'잘될거야 라는 생각은 잡생각을 잃어버리게 만든다'
'진짜 잘될거야 라고 생각하면 열심히 하는 원동력을 얻게 된다'
- 0517 오전수업 시작하기전 선생님 조언
//ex8.inter
public void save() {
try(
FileOutputStream fos = new FileOutputStream("res/data.csv");
PrintStream out = new PrintStream(fos);
//원래 파일 입출력 받을때 close매번 했어야하는데
//try에 기본적으로 close 기능이 있어서 그걸 활용하기!!
)
{
int size = index;
for(int i=0; i<size; i++) {
System.out.print(datas[i]);
if(i<size-1)
System.out.print(",");
}
System.out.println();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
- 인터페이스란? 네트워크들의 접점이다!
- 데이터 매니저를 만들어서 원격에 데이터를 저장할수 있다
- 분리형을 만들때는 반드시 접점이 필요하다(=인터페이스의 개념과 일맥상통)
- 다양한 성질을 갖고 있는것 = 다형성 (어떠한 부품을 끼웠느냐에 따라 다양한 성질로 바뀌는것..)
- 객체를 꽂기 위해선 setter가 필요하다
- 접점이 곧 약속이고 인터페이스이다
- 인터페이스가 필요한 이유: 코드일부분을 다른걸로 바꿔 낄라고
package ex8.inter;
public class FileSaver implements Saver{
public void save() {
System.out.println("");
}
}
//내가 Saver를 구현하고 있다는걸 말해주기 위해 implements를 붙여준다
- 추상클래스와는 결이 다르다. 인터페이스는 분리와 결합을 위한 접점의 약속일 뿐이지 공통분모 즉,집중화가 아님
- 다중 상속: 인터페이스는 다중 상속을 지원합니다. 클래스는 여러 개의 인터페이스를 동시에 구현할 수 있습니다.
반면에 추상 클래스는 단일 상속만을 지원합니다. 클래스는 하나의 추상 클래스만을 상속받을 수 있습니다.
- implements : 도구들 (이 단어는 인터페이스에서만 사용한다)
- 인터페이스를 구현할때는 클래스를 만들 필요가 굳이 없음(되긴됨). 아무곳에서나 작성해주면됨(메인메서드에서implements 해도됨)
package ex8.inter;
public class Program implements Saver{
public static void main(String[] args) {
// FileSaver saver = new FileSaver();
Saver saver = new FileSaver();
DataManager manager = new DataManager();
manager.setSaver(new Program());
//약속이되어있는 saver를 구현해줄수 있는 애를 괄호안에 넣었다
//메인메서드(Program)에서 지금 save를 구현해주고 있어서..저렇게 요상하게 표현한것
//★GPT 설명★
//manager 객체의 setSaver 메서드를 호출하여 Program 객체를 인자로 전달합니다.
//이를 통해 manager 객체는 Program 객체를 저장기로 설정합니다.
manager.input();
manager.print();
manager.save();
manager.load();
manager.sort();
manager.print();
}
@Override
public void save(Object[] datas, int index) {
System.out.println("파일 저장");
}
}
- 인터페이스를 구현하는 클래스!! 오 이런 방법도 있네 신기하다ㅋㅋㅋ 김밥먹고싶어서 클래스 이름 김밥으루...
package ex8.inter;
public class Program{
public static void main(String[] args) {
// FileSaver saver = new FileSaver();
// Saver saver = new FileSaver();
class 김밥 implements Saver{
@Override
public void save(Object[] datas, int index) {
}
}
DataManager manager = new DataManager();
manager.setSaver(new 김밥());
manager.input();
manager.print();
manager.save();
manager.load();
manager.sort();
manager.print();
}
}
- 익명클래스
Saver saver = new Saver(){
//인터페이스를 구현하는 익명클래스 정의하는 방법
//그 익명클래스를 new 해서 saver에 담은것이다
@Override
public void save(Object[] datas, int index) {
}
};
☕ 익명 클래스(Anonymous Class) 사용법 총정리
익명 클래스 (Anonymous Class) 익명 클래스는 내부 클래스(Inner class) 일종으로 단어 그대로 이름이 없는 클래스를 말한다. 익명, 이름이 없다는 것은 별로 기억되지 않아도 된다는 것이며, 나중에 다
inpa.tistory.com
manager.setSaver(new Saver() {
@Override
public void save(Object[] datas, int index) {
}
});
//어노니머스클래스(익명객체) 바로생성하는방법 > new 괄호안에서 치고 ct+space 하면 자동생성
- 람다(arraow funtion으로 함수형 인터페이스 구현하기)
manager.setSaver((Object[] datas, int index)-> {
//"나함수 구현한거야! -> 니가 참조하고 있는 saver!" 왼쪽:인자 오른쪽:몸통
System.out.println("파일 세이버지롱");
}
);
- 오로지 구현하기 위한 인터페이스만 다중 상속이 가능하고 부모는 오로지 한명만 가질수 있다
~오후복습~
package ex99;
public class Program {
public static void main(String[] args) {
AnimalCafe cafe = new CatCafe();
AnimalCafe cafe = new DogCafe();
//부모인 인터페이스클래스는 왼쪽에 적고, 자식들은 오른쪽에
cafe.open();
cafe.close();
//자바에서 인터페이스는 명세서다
}
}
package ex99;
public class CatCafe {
public void open() {
System.out.println("고냥이 카페 열엇다냥");
}
public void close() {
}
}
package ex99;
public class DogCafe implements AnimalCafe{
@Override
public void open() {
System.out.println("댕댕이카페 열엇다멍");
}
}
package ex99;
//인터페이스
public interface AnimalCafe {
public void open();
//catcafe와 dogcafe가 각각 중복되는 open 메서드를 갖고 있기 때문에 공통되는걸 interface 클래스로
//뺀 뒤에 인터페이스를 통해서 접근한다
//이렇게 하면 돼지카페가 되든,양카페가 되든 수정을 일일이 할필요가 없어진다
}