몽환화

230126 인터페이스, 제네릭 본문

JAVA 때려잡기

230126 인터페이스, 제네릭

hyeii 2023. 1. 27. 00:32

인터페이스 Interface

서로 다른 두 시스템에서 상호작용을 위한 규격 약속

ex) USB, HDMI

 

Java에서는?

객체와 객체가 상호작용을 해

 

완벽히 추상화된 설계도 : 인터페이스가 갖는 모든 메소드는 추상 메소드! (약속)

추상클래스는 일반메소드랑 추상메소드 둘다 가질 수 있었잔아

 

모든 메소드는 public abstract이며 생략가능

모든 멤버변수는 public static final이며 생략가능 말은 변수인데 약간 상수로서의 역할

interface 키워드를 이용해서 선언함

클래스에서는 implements 키워드를 이용해서 인터페이스를 구현할 수 있음

 

 

public interface MyInterface {
	public static final int MEMBER1 = 10;
    int MEMBER2 = 10;
    // 위 둘 다 사용가능. public static final 생략가능
    
    public abstract void method1(int param);
    void method2(int param);
    // 위 둘 다 사용가능. public abstract 생략가능

추상클래스 받았을때도 얘가 갖고있는 메소드 오버라이드 했어야했잔아

인터페이스도 마찬가지임

클래스에서 인터페이스를 구현할 때 그 인터페이스가 갖고있는 메소드를 오버라이드해야함

저기 봐바 또 두줄 있는데 

메소드 오버라이드 하거나 아님 이 클래스 자체를 추상으로 하래잔아

 

MyIterface 에서 저 MEMBER_1 같은 int들을 정의할 때 static으로 했었어서 저 타입의 이름으로 바로 접근가능함

 

>> 인터페이스를 만들고 클래스에 구현해서 객체를 만들어 보았습니당<<

인터페이스를 구현한 클래스로는 객체를 만들 수 있징

 

1. interface 키워드를 이용하여 선언한다.

2. 선언되는 변수는 모두 상수로 적용한다.

>>>>>>> static

3. 선언되는 메소드는 모두 추상 메소드이다.

4. extends를 이용해서 상속이 가능하다(다중상속 가능, 구현부 없음).

5. 객체 생성이 불가능하다.

>>>>>>> 인터페이스를 구현한 클래스로는 객체 생성 가능

6. 클래스가 인터페이스를 구현한 경우에는 implements키워드를 이용한다.

>>>>>>> extends 가 아님, implement 여러개 가능(다중구현)

인 => 인 : 다중상속 (extends)

클 => 인 : 다중구현 (implements)

7. 인터페이스를 구현하는 하위클래스는 추상메소드를 반드시 오버라이딩해야한다

오버라이딩 구현 안할거면 추상클래스로 남겨야한다.

8. 인터페이스는 다형성이 적용된다. 

인터페이스 타입으로 인터페이스를 구현한 클래스의 객체를 참조할 수 있움

 

Interface

HdmiInput  HdmiOutput 두개 있어

Computer => HdmiInput

Monitor => HdmiOutput

 

HdmiInput이라는 인터페이스가 있고 Computer라는 클래스가 있어

Computer는 HdmiInput이라는 인터페이스를 구현했어 (implements)

근데 HdmiInput에는 메소드가 있어<== 당연히 추상메소드

그래서 Computer라는 클래스가 Hdmi를 구현 할거면

Computer클래스 자체가 abstract이 되거나

아니면 Hdmiinput의 메소드를 싹다 오버라이드 해야돼ㅐㅐㅐㅐㅐㅐ

 

Computer는 HdmiInput을 참조를 했으니까

HdmiInput을 참조하지만 Computer의 객체인 computer를 만들 수 있어서

Computer의 메소드(HdmiInput의 메소드를 오버라이드 한 메소드)를 실행할 수 이써

 

 

 

왜 인터페이스를 사용해야돼???

설계도가 새로 나올때마다 모든 코드를 고쳐야 하나??????

어떤 클래스의 객체여도 사용할 수 있어

인터페이스를 구현하기만 하며는

쪼아

 

test03

 

다중구현 multiple implements

클래스 하나가 여러개의 인터페이스를 구현

 

오버라이드 잊지말기

 

Eagle 은 AbleToFly AbleToHunt

Duck 은 AbleToFly AbleToSwim AbleToHunt

 

 

 

둘의 차이를 알아야돼!!!!!

 

fly 에서는 fly()만 보이지만

d 에서는 fly() hunt() swim() 다 보여

 

test 04

 

다중 상속 multiple extends

하나의 인터페이스가 여러개의 인터페이스를 상속

 

DuckInterface라는 인터페이스를 새로 만든 후

AbleToFly, AbleToHunt, AbleToSwim이라는 세 인터페이스를 상속받게 했어

이후 기존에 저 세개의 인터페이스를 구현하던 Duck 클래스에서

DuckInterFace를 구현하라고 바꿔봤더니 오류떴어

당욘하징 DuckInterFace 에는 void playInnocent라는 새로운 메소드가 있우니까!!

이것도 오버라이드를 해줘야 Duck이 인터페이스를 제대로 구현할 수 있엉

 

public class Duck implements DuckInterface 
@Override
	public void hunt() {
	}

	@Override
	public void swim() {
	}

	@Override
	public void fly() {
	}

	@Override
	public void playInnocent() {
		System.out.println("오리발을 내밀엉");		
	}
public class UglyDuckling implements DuckInterface 
@Override
	public void hunt() {
	}

	@Override
	public void swim() {
	}

	@Override
	public void fly() {
	}

	@Override
	public void playInnocent() {
		System.out.println("저는 미운 오리가 아니라구용");		
	}
public class DonaldDuck implements DuckInterface 
@Override
	public void hunt() {
	}

	@Override
	public void swim() {
	}

	@Override
	public void fly() {
	}

	@Override
	public void playInnocent() {
		System.out.println("저는 진짜 오리가 아니양");		
	}

 

  클래스 인터페이스
특징 - class 키워드를 사용하여 정의
- 필드와 메소드, 생성자로 이루어짐
- interface 키워드를 사용하여 정의
- 상수와 추상메소드(메소드 선언부)로 이루어짐
- public static final , public abstract 생략가능
관계 인터페이스를 구현함 클래스에 의해 구현됨
멤버 변수 선언 가능 상수만 가능
다중 상속 클래스는 하나의 클래스만 상속 가능, 다중상속 불가 인터페이스는 여러 개의 인터페이스 상속 가능 (구현부가 없으므로 헷갈리지 않음)
다중 구현 클래스는 여러개의 인터페이스를 다중으로 구현 가능  
인스턴스 생성 가능 생성 불가
타입 타입으로 사용 가능 => 다형성!
  추상 클래스 인터페이스
객체 생성 불가 불가
일반 메소드 가능 불가 (추상 메소드만 가능)
일반 필드 가능 불가 (상수만 가능)
메소드 abstract를 붙여야만 추상 메소드 모든 메소드는 추상 메소드
사용 - 추상적인 클래스의 성격을 가질 때(일부 메소드만 미완성인 설계도)
- 서로 유사한 클래스 사이에 코드를 공유하고 싶을 때
- 서로 관련없는 클래스 사이에 공통으로 적용되는 인터페이스를 구현하기를 원할 때
- 객체의 성격이라기보다 어떤 기능을 구현하고 있다는 약속의 성격이 있을 때
공통점 특정 기능의 구현을 강제하고 싶을 때 

제네릭 Generic

 

타입 파라미터를 이용하여 클래스, 인터페이스, 메소드를 다양한 타입을 처리할 수 있도록 작성하는 기법

'JAVA 때려잡기' 카테고리의 다른 글

230127 컬렉션  (0) 2023.01.28
230125 추상클래스  (0) 2023.01.25
#가위바위보 게임(5판3선승, 3판2선승, 단판승)  (0) 2023.01.24
230119 객체배열관리  (0) 2023.01.21