본문 바로가기
정리 중/Java Interface 사용

Java Interface란 ? #1

by Flow.X 2022. 1. 23.
728x90

말 그대로 내가 만든 클래스가 외부와 연결되는 통로라고 보면 된다.

 

간단히 설명하면 자판기가 있고, 나는 커피를 뽑고자 할때를 비교해서 한번 보자.

Interface

그럼 돈을 넣고, 제품을 선택하고, 제품을 뽑고, 잔돈을 받는다. 

즉 이 순서는 모든 자판기에서 우리가 알고 있는 작동법이다. 

Encapsulation

그 안에서 어떤 상품을 선택해서 나에게 주고, 잔돈은 어떤방식으로 인식해서 계산해서

주는지 정확한 내용을 알필요가 없다.

Polymorphism

그런데 자판기 종류는 많다.  커피자판기, 음료수 자판기, 담배 자판기 .. 등등 

하지만 자판기를 사용하는 손님 입장에선 그 자판기가 무엇이든 사용법은 동일하다. 

즉 동일한 방식의 조작법만 안다면 다양한 제품을 겟할수 있다.

 

물론 다른 옵션이 들어갈 수는 있지만;;

 

코딩을 보자

간단히 예를 들면 나는 원, 삼각형, 사각형을 표현하는 class를 만든다.
각각의 class는 꼭지점 갯수와 그린다는 함수를 만든다고 하자.

아래의 코딩을 보자

getPoint는 꼭지점을 가져오는 함수이고, draw 함수는 입력된 값을 더해서 출력한다. 

public class InterfaceSample {
    public static void main(String[] args) {
        System.out.printf("getPoint=%d\n", new Circle().getPoint());
        System.out.printf("getPoint=%d\n", new Triangle().getPoint());
        System.out.printf("getPoint=%d\n", new Square().getPoint());

        new Circle().draw("못난이 ");
        new Triangle().draw("정");
        new Square().draw("직각");
    }
}

class Circle {
    public int getPoint() {
        return 0;
    }

    public void draw(String type) {
        System.out.printf("%s 원을 그린다.\n",type);
    }
}

class Triangle {

    public int getPoint() {
        return 3;
    }

    public void draw(String type) {
        System.out.printf("%s 삼각형을 그린다.\n",type);
    }
}


class Square {

    public int getPoint() {
        return 4;
    }

    public void draw(String type) {
        System.out.printf("%s 사각형을 그린다.\n",type);
    }
}

 

그런데 나중에 더 많은 도형을 그리거나, 각각 도형을 다른 사람들에게 해당 class를 만들어라!
할 경우,  내가 잊어 먹어서 함수의 명이 변경되거나, 각각 함수를 만들어 올수도 있다.

만약 Interface를 사용해서 미리 공통 함수명을 고정하고 반드시 구현해야 할 함수를 interface로 만들면 좋을것이다. 

interface Shape {
	public int getPoint();
	pbulci void draw(String type);
}

class Circle implement Shape {
	@override //Shape의 함수를 오버라이드 한다.
	public int getPoint() {
        return 0;
    }

	@override
    public void draw(String type) {
        System.out.printf("%s 원을 그린다.",type);
    }
}

....

}
728x90

'정리 중 > Java Interface 사용' 카테고리의 다른 글

Java Interface 사용 #2  (0) 2022.01.23