국비수업/수업정리

인터페이스 / 다형성 / 익명클래스

밀김 2023. 5. 17. 10:04
728x90

 

 

 

 

 

 

 

 

 

 

 

 

'잘 되겠지라고 생각하면 잘 되는것 같아요'

 

'우리가 본것은 수많은 가능성중 하나'

 

'내가 하고자하는 일에서 긍정적인 사고는 중요하다'

 

'잘될거야 라는 생각은 잡생각을 잃어버리게 만든다'

 

'진짜 잘될거야 라고 생각하면 열심히 하는 원동력을 얻게 된다'

 

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

 

 

 

 

 

 

- 인터페이스란? 네트워크들의 접점이다! 

 

 

- 데이터 매니저를 만들어서 원격에 데이터를 저장할수 있다

 

 

- 분리형을 만들때는 반드시 접점이 필요하다(=인터페이스의 개념과 일맥상통)

 

 

- 다양한 성질을 갖고 있는것 = 다형성 (어떠한 부품을 끼웠느냐에 따라 다양한 성질로 바뀌는것..)

 

 

 

 

tv 출력 방법

- 객체를 꽂기 위해선 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) {
				
			}
		};

 

 

 

 

 

 

https://inpa.tistory.com/entry/JAVA-%E2%98%95-%EC%9D%B5%EB%AA%85-%ED%81%B4%EB%9E%98%EC%8A%A4Anonymous-Class-%EC%82%AC%EC%9A%A9%EB%B2%95-%EB%A7%88%EC%8A%A4%ED%84%B0%ED%95%98%EA%B8%B0

 

☕ 익명 클래스(Anonymous Class) 사용법 총정리

익명 클래스 (Anonymous Class) 익명 클래스는 내부 클래스(Inner class) 일종으로 단어 그대로 이름이 없는 클래스를 말한다. 익명, 이름이 없다는 것은 별로 기억되지 않아도 된다는 것이며, 나중에 다

inpa.tistory.com

 

 

 

 

(saver)이렇게 변수 대입하지 않고 보통 이런식으로 바로 써준다

 

 

 

 

 

		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 클래스로
    //뺀 뒤에 인터페이스를 통해서 접근한다
    //이렇게 하면 돼지카페가 되든,양카페가 되든 수정을 일일이 할필요가 없어진다
}

 

 

 

 

 

 

 

 

728x90