ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [JAVA] INTERFACE
    JAVA 2021. 4. 27. 13:37

    이 포스팅은 [생활코딩]님의 INTERFACE 강의안 및 하신 말씀을 글로 적은 것입니다.

    추가적인 설명이나 정확한 개념은 강의를 통해 알아가면 더 좋을 것 같습니다.

     

    www.youtube.com/watch?v=Pvjss79v_qw

     

     


     

     

    어떤 객체가 있고 그 객체가 특정한 인터페이스를 사용한다면, 그 객체는 반드시 인터페이스의 메소드들을 구현해야 한다. 만약 인터페이스에서 강제하고 있는 메소드를 구현하지 않으면 이 애플리케이션은 컴파일조차 되지 않는다.

     

    interface I {
    	public void z();
     }
     
     
    class A implements I {
    	
        public void z(){}
    
    }

    클래스 A뒤의 implements I 는 이 클래스가 인터페이스 I를 구현하고 있다는 의미이다.

    즉, 1행의 interface I 의 멤버인 public void z() 메소드를 클래스 A가 반드시 포함하고 있어야 한다는 뜻이다. 

     

    이렇게 말하니 감이 안옵니다!  이고잉님이 말하신 예제를 들어가며 얘기를 해보도록 하죠!

     

     

     

    실제 예시를 들어서 설명을 해보겠습니다.

    Class CalculatorDummy {
    	public void setOprands(int first, int second, int third){}
        public int sum() {
        	return 60;
            }
         
        public int avg(){
        	return 20;
        }
     }
     
     public class CalculatorConsumer {
     	public static void main(String[] args){
        	CalculatorDummy c = new CalculatorDummy();
            c.setOprands(10,20,30);
            System.out.println(c.sum()+c.avg());
          
          }
     }

    계산기 예제에 인터페이스를 대입하겠습니다. 

    계산기 기능이 필요한 프로젝트 진행중인데, 시간이 촉박합니다. 

    그래서 클래스는 개발자A가, 개발자 B는 그 클래스를 사용하는 로직을 만든다고 해봅시다.

    이런 경우 개발자 B는 개발자 A가 계산기를 잘 만들어서 나중에 제출할 것이라고 생각할것이다.

    그리고 아래와 같이 가짜 로직을 만들어서 코드를 작성했다.

     

    즉 CalculatorDummy 클래스는 가짜 클래스이고,

    setOprands라는 메소드 또한 입력값만 있을뿐, 결과값이 나오지 않았습니다.

    또한 sum(), avg()의 값 또한 60, 20으로 고정이 되어 있습니다.

     

    따라서 계산기 기능의 클래스는 아직 완성이 되지 않았지만 이를 이용한 CalculatorConsumer클래스는 미리 완성을 할 수 있어 결과적으로 시간을 절약할수 있게 됩니다.😃😃😃

     

    그리고 시간이 흘러, Calculator클래스를 구현하여 클래스의 소스를 넘겨받았습니다. 아래와 같이 말이죠!

     

    class Calculator {
    	int left, right;
        public void setOprands(int left, int right) {
        	this.left = left; 
            this.right = right;
         }
         
         public void sum() {
         	System.out.println(this.left + this.right);
         }
         public void avg() {
         	System.out.println((this.left + this.right) / 2);
         }
     }

     

     

    위와 같이 작성했을때의 문제점이 보이시나요??

     

    문제점은 바로 왼쪽의 setOprands의 메소드는 값을 3개를 받는데,  오른쪽의 setOprands의 값은 2개인 것입니다. 

     

    지금처럼 간단한 프로젝트는 값을 고치기가 매우 쉽지만, 프로젝트의 규모가 커진다면, 유지보수가 힘들 것입니다!!

     

    여기서 등장하는 interface!!

     

     

    계산기를 개발하는 개발자와, 계산기를 이용하는 클래스를 만드는 개발자가 모여 합의를 해서 interface를 만듭니다.

     

    public interface Calculatable {
    	public void setOprands(int first, int second, int third);
        public int sum();
        public int avg();
    }
    
    

     

     

    Calculator 클래스는 setOprands 메소드를 갖고, first, second, third라는 정수형태의 인자를 갖는다.

    sum(), avg() 함수는 int형태를 반환한다. 

    라는 뜻을 품고 있습니다.

     

     

     

    완성 코드! 

    'JAVA' 카테고리의 다른 글

    [JAVA] STATIC 변수  (0) 2021.05.03
    [JAVA] 객체 지향 프로그래밍에서의 협력  (0) 2021.05.01
    [JAVA] 제네릭과 컬렉션(2)  (0) 2021.04.16
    [JAVA] 제네릭과 컬렉션(1)  (0) 2021.04.15
    [JAVA] 예외 처리하기  (0) 2021.03.31

    댓글

Designed by Tistory.