우리가 사는 세계에는 다양한 전기 생산 방식과 전자제품이 있습니다. 발전 방식마다 가정으로 전송하는 전기의 세기와 방식을 자율에 맞긴다면 어떤 일이 발생할까요? 엄청난 혼돈이 올겁니다. 가전제품을 연결할 때마다 확인해야 할 것들이 엄청 많을 겁니다. 진정한 자유는 질서 속에서 보장된다고 생각합니다. 그래서 산업계에서는 콘센트와 플러그를 만들어서 이렇게 생긴 콘센트와 플러그는 220v 전기를 사용한다는 아주 단순하지만 강력한 약속을 체결했습니다. 이러한 약속을 Interface 라고 부릅니다. 인터페이스는 규제이지만 그것의 목적은 자유입니다. 전기를 생성하는 쪽과 전기를 소비하는 쪽 모두 220v 라는 규칙을 준수하기만 한다면 어떤 방법으로 전기를 만들던 자유입니다. 이러한 것이 프로그래밍에서도 가능하지 않을까 상상하던 사람들의 놀라운 혁신이 바로 인터페이스입니다.
이 클래스에서 어떤 이유에 의해서 더하기 기능이 필요했다고 생각해 봅시다. 그런데, 제가 작업할 양이 많아서 외주를 줘야 하는 상황이 온 것이죠. 그리고 제가 원하는 내용을 이메일을 작성해서 보내는데, 이런 내용으로 보냈습니다.
" // 더하기 기능이 있는 클래스를 만들어주세요. "
저는 저대로 잘 설명했다고 생각하고 작업을 시작했고, 외주를 받은 사람들도 나름대로 잘 이해했다고 생각하고 작업을 시작하는 것이죠. 저는 우선, 가짜 클래스를 만들어서 나중에 진짜 클래스를 외주 업체에서 나중에 전달해 줄 것이다고 생각하고 일단 작업을 진행할 수 있겠죠.
이런 식으로 말이죠. 일단 그럼, 저 코드가 동작한다고 가정을 하고 실제로 프로그램을 작성하는 겁니다.
우리는 DummyCal 클래스가 납품될 것이라고 기대하고 코드를 짰는데, 실제로는 RealCal 클래스가 납품이 된 겁니다. 그러면, 우리가 짜 놓은 곳에서 실제로 납품된 클래스를 사용할 수 없는 최악의 상황이 벌어지게 됩니다. 이런 정말적인 상황 속에서 우리를 구원해주는 것이 바로 "인터페이스 Interface"입니다.
우리는 Interface를 활용해서 말로 설명하는 것이 아니라 외주업체에게 Java를 이용해서 규격을 엄격하게 준수할 수 있도록 유도할 수 있습니다. 지금 제가 필요한 것이 뭔지부터 먼저 적어볼게요.
우선 저희는 int v1과 int v2를 매개변수로 활용하는 sum 메서드가 필요합니다. 이 sum 메서드는 출력값도 int 정수여야 하죠. 그 다음에 이 매서드에 이름을 붙여봅시다.
Calculable이라는 이름을 붙여주고 interface 이기 때문에 interface 키워드를 적어주었습니다. 그리고 중괄호를 열고 닫아서 Calculable 이라는 인터페이스의 범위를 지정해 주었습니다. 이렇게 interface를 만들었습니다. 이제 만든 interface를 실제 클래스를 생성하는 곳에 활용해 봅시다.
클래스를 생성할 때 implements 키워드를 통해 interface를 적용해줄 수 있습니다. 제가 만든 DummyCal 메서드는 interface의 규격을 정확히 지키고 있기 때문에 아무 문제가 없는 것을 알 수 있습니다.
하지만 RealCal 같은 경우 Calculable interface의 규격을 지키지 않았기 때문에 빨간 밑줄이 쳐지고 컴파일 조차 되지 않는 것을 알 수 있습니다. 즉 우리가 인터페이스가 적용된 클래스를 구현하고 컴파일하는데 성공했다는 것은 우리의 클래스는 인터페이스가 규제하고 있는 형태를 정확하게 엄수하고 있다는 것을 의미하는 것입니다. 자 그럼 저는 불분명한 말이 아니라 자바에서 클래스의 형식을 지정하는 인터페이스를 전달을 해주면 개발사에서는 클래스를 이에 맞추어서 작성을 할 것을 명확하게 예측할 수 있습니다. 왜냐하면 interface를 지키지 않으면 컴파일 조차 되지 않기 때문이죠. 그럼 우리는 버그는 있을지언정, 그 클래스가 우리가 원하지 않는 형태 혹은 사용방법을 갖지 않을 것이라는 것을 확인할 수 있습니다.
게다가, 우리가 interface에 맞추어서 작성하지 않은 것들은 빨간 밑줄을 통해 위에 보는 바와 같이 자동으로 구현하지 않았던 것들을 추가해주는 기능을 eclipse가 제공하는 것을 볼 수 있습니다. 그럼 구체적인 구동 방법만 추가해주면 되는 것이죠. 그럼 우리는 납품을 받을 때 제공받은 클래스들이 버그는 있을지언정 호환이 안될 일은 없을 것이라는 것을 알 수 있습니다.
인터페이스는 복잡합니다. 그래서 첫 인상이 중요합니다. 인터페이스는 질서를 세워주는 아주 좋은 것입니다.
출처 : https://opentutorials.org/module/4872
'[생활코딩] Server > JAVA Interface(인터페이스)' 카테고리의 다른 글
Java Interface - 4 수업을 마치며 (0) | 2023.05.08 |
---|---|
Java Interface - 2 다형성(polymorphism) (0) | 2023.05.08 |
Java Interface - 1 기본형식 (0) | 2023.05.08 |