출처 : https://www.youtube.com/watch?v=d_9tbUQ5G7E

 

안녕하세요! 쏘코입니다.

 

오늘은 조금 생소한 자바의 인터페이스에 대한 내용을 공부해보려고 합니다.

 

목차


    0. 인터페이스란?

    인터페이스클래스의 변수와 메소드의 형태를 엄격하게 강제하는 요소입니다.

    이렇게 규제를 하는 이유는 바로 자유를 얻기 위함입니다.

    우리가 입을 옷이 없을 때 교복이나 정장을 입듯이, 미리 정해진 규제가 있다면 더이상 고민하지 않고 그 규칙만 지키면 됩니다.

     

    자바의 인터페이스를 확인하기 위해서 ProjectInterface라는 프로젝트를 하나 만들고, InterfaceApp 클래스를 생성합니다.

     

    계산기 클래스를 만들어야 하는데, 시간이 없어서 외주를 줬다고 생각해봅시다.

    그리고 외주를 줄 때

    "더하기 기능이 있는 클래스를 만들어 주세요" 라고 말했다고 생각해봅시다.

     

    임시로 더미 계산기(DummyCal)를 만들어서 사용하다가, 외주에 맡긴 계산기가 도착해서 확인해보니 사용법과 메소드가 조금 달랐습니다.

    이런 경우 굉장히 난감해지겠죠??

     

    자료가 많다면 언제 다 바꿔...

     

    이런 경우 인터페이스를 통해 규칙을 엄격하게 준수할 수 있도록 만들 수 있습니다.

    먼저 메소드의 리턴형과 메소드의 이름을 적고, 매개변수를 적습니다.

    여기서 { } 는 만들지 않아도 됩니다.

    이 부분은 외주업체에서 만들 거니까요.

    그리고 인터페이스명을 적고, 그 앞에 interface를 적어줍니다.

    클래스랑 형태가 비슷하죠?

     

    이상태까지 만들고 실제로 구현하는 class에서는 클래스명 뒤에

    implements 인터페이스명

    을 더해줍니다.

    그러면 인터페이스를 지키지 않는 형식의 코드는 컴파일되지 않습니다.

    인터페이스를 지키기 위해서는 우리가 구현하지 않고 선언만 해준 sum을 완벽하게 구현되도록 만들어야만 합니다.

     

    interface Calculable{
    	int sum(int v1, int v2);
    }
    
    class RealCal implements Calculable{
    	public int sum(int v1, int v2) {
    		return v1+v2;
    	}	
    }
    
    class DummyCal implements Calculable{ // 인터페이스가 규제하고 있는 형태를 엄수해야만 정상적으로 동작
    	public int sum(int v1, int v2) {
    		return 3;
    	}
    }
    
    public class InterfaceApp {
    
    	public static void main(String[] args) {
    		// 더하기 기능이 있는 클래스를 만들어주세요.
    		RealCal c = new RealCal();
    		System.out.println(c.sum(2, 1));
    
    	}
    
    }

     


    1. 인터페이스의 형식

    그렇다면 하나의 클래스에는 하나의 인터페이스만 올 수 있을까요?

    아닙니다.

    하나의 클래스에서 여러 인터페이스를 동시에 구현할 수 있습니다.

     

    Printable이라는 인터페이스를 하나 만들고 안에 print라는 메소드도 하나 만들어줍니다.

    그리고 실제로 구현하는 곳에서는 implements 뒤에 인터페이스명을 적어줍니다.

    만약 여러 인터페이스를 동시에 구현해야 한다면 콤마(,)로 인터페이스를 구분합니다.

     

     

    그렇다면 인터페이스 내에 변수가 들어가면 어떻게 될까요?

    만약 인터페이스가 implement를 통해 구현되었다면, 구현된 클래스에서도 인터페이스에서 초기화한 변수를 사용할 수 있습니다.

    interface Calculable{
    	double PI = 3.14; // 인터페이스에는 변수의 실제 값이 들어간다!
    	int sum(int v1, int v2);
    }
    
    interface Printable{ // 인터페이스의 이름은 대문자로 시작, 형용사 형태의 이름
    	void print();
    }
    
    class RealCal implements Calculable, Printable{ // 하나의 클래스에 여러 interface 구현 가능!
    	public int sum(int v1, int v2) {
    		return v1+v2;
    	}
    
    	public void print() {
    		System.out.println("This is RealCal!!");
    	}
    }
    
    class DummyCal implements Calculable{ // 인터페이스가 규제하고 있는 형태를 엄수해야만 정상적으로 동작
    	public int sum(int v1, int v2) {
    		return 3;
    	}
    }
    
    public class InterfaceApp {
    
    	public static void main(String[] args) {
    		// 더하기 기능이 있는 클래스를 만들어주세요.
    		RealCal c = new RealCal();
    		System.out.println(c.sum(2, 1)); // 3
    		System.out.println(c.PI); // 3.14
    	}
    
    }

     


    객체 지향과 상속을 공부했다면, 이 정도 내용은 쉽게 이해하실 수 있을 것이라고 생각합니다.

    다음 시간에는 다형성과 실제 설명서로 쓰이는 인터페이스에 대해 조금 더 알아보겠습니다.

     

    오늘도 읽어주셔서 감사합니다 :)

    반응형
    • 네이버 블로그 공유하기
    • 네이버 밴드에 공유하기
    • 페이스북 공유하기
    • 카카오스토리 공유하기