LikeLion_1005

현보·2022년 10월 5일

인터페이스 구현 예제

class Calculator생성

public class Calculaotr {
    //NumberMaker에서 만들어준 숫자를 가지고
    //사칙 연산한 결과를 출력한다.
    
    private Numbermaker numbermaker;
    //alt+enter눌러서 인터페이스 생성
    
    private int baseNum = 10;
    
    //di생성
    public Calculaotr(Numbermaker numbermaker) {
        this.numbermaker = numbermaker;
    }

    public Calculaotr(Numbermaker numbermaker, int baseNum) {
        this.numbermaker = numbermaker;
        this.baseNum = baseNum;
    }

    public void plus(int num){
        int result = num+this.numbermaker.make(this.baseNum);
        System.out.println(result);
    }
}

interface 생성

public interface Numbermaker {
    //숫자를 1개 리턴
    int make(int num);

}

인터페이스를 구현하는 구현

public class ByPassNumberMaker implements Numbermaker{

    @Override
    public int make(int num) {
        return num;
    }
}
public class RandomNumberMaker implements Numbermaker{
    //구현체 구현
    @Override
    public int make(int num) {
        return (int)(Math.random() * num);
    }
}

main에서 실행

public class Main {
    public static void main(String[] args) {
        Numbermaker numbermaker = new RandomNumberMaker();
        Calculaotr randomNumberCalculator = new Calculaotr(numbermaker);
        randomNumberCalculator.plus(20);

        //Numbermaker numbermaker = new ByPassNumberMaker(); 를 안하고 바로 넣을 수 있다.
        Calculaotr byPassNumberCalculator = new Calculaotr(new ByPassNumberMaker(),200);
        byPassNumberCalculator.plus(50);


    }
}

1.interface를 생성하고
2.interface를 구현한 class를 만든다
3.interface를 맴버 변수로 class에 선언한다
4.class를 인스턴스화 시킬 때 interface 구현체를 new 해줘서 DI 해준다

DI란?

DI란 외부에서 두 객체 간의 관계를 결정해주는 디자인 패턴으로, 인터페이스를 사이에 둬서 클래스 레벨에서는 의존관계가 고정되지 않도록 하고 런타임 시에 관계를 동적으로 주입하여 유연성을 확보하고 결합도를 낮출 수 있게 해준다.

di한다 -> constructor를 이용해 interface구현체를 넘겨서 초기화 시킨다.

0개의 댓글