ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 20220906 TIL 인터페이스가 뭐예용?
    TIL 2022. 9. 6. 17:24

     

    개발을 하다보면 정말 많이 말듣쓰하게 되는 용어 중 하나가 인터페이스다.

    https://www.inven.co.kr/board/maple/2299/2540734

    하지만 이렇게 자주 쓰이는 용어임에도 인터페이스가 뭔지 물으면 대답하기가 참 곤란하고 어렵다.

    심지어 자바 인터페이스는 다중상속을 쉽게 해준다는데 왜 interface라는 용어가 붙은 건지 이해를 하기가 어렵다.

    자바 인터페이스를 검색하면 보통 인터페이스를 어떻게 사용하는지 밖에 나오지 않는다.

    하지만 인터페이스의 뜻을 제대로 이해하지 못하면

    인터페이스를 오용, 남용할 가능성이 높아보이고, 언제 써야할 지 판단이 어려워서

    이 글에서는 자바 인터페이스를 왜 interface라고 하는지 분석해봤다.

    인터페이스가 어려운 여러분과 저를 위해 이 글을 바칩니다.

    https://tistory1.daumcdn.net/tistory/1990090/attach/fd025109baa7401a871888aea43d3f1d

    인터페이스의 일반적인 의미부터 알아보자.

    inter + face = 서로 맞대고 있는

    서로 다른 것을 이어주는 친구가 인터페이스이다.

     

    우리는 interface를 통해 소통한다.

    즉, interface는 매개체이다.

     

    정보를 눈으로 얻는 경우 모니터가 인터페이스이고,

    소리로 정보를 얻는 경우 스피커가 인터페이스에 해당한다.

    또한 우리가 복잡한 것을 쉽게 다룰 수 있는 것은 모두 interface덕분이다.

     

    자동차에는 1년을 공부해도 모자랄 부품들이 수 없이 많이 들어있다.

    하지만 2종 보통 면허 하나만 있으면 버스는 몰지 못해도 웬만한 자동차는 다 몰 수 있다.

    가솔린 차, 경유 차, 하이브리드 차, 전기차.

    https://image.edaily.co.kr/images/Photo/files/NP/S/2019/09/PS19090500266.jpg

    이 자동차의 내부는 다 각기 다르게 만들어져 있을 것이다. 

    하지만 자동차 별로 면허를 따지 않아도 되는 이유는 무엇일까?

    그리고 1종과 2종 면허가 나뉘어 있는 이유는 무엇일까?

    2종 면허로 운전할 수 있는 차들은 모두 같은 인터페이스를 공유하고 있고,

    2종 면허로 운전할 수 있는 차는 1종 면허로만 운전할 수 있는 차와는 다른 인터페이스를 갖고 있기 때문이다.

     

    경유차만 몰던 사람이 내부 구조가 전혀 다른 전기차를 처음 타봤어도 운전할 수 있다.

    핸들 1개, 브레이크 1개, 엑셀 1개의 동일한 인터페이스를 장착하고 있어서이다.

    동일한 인터페이스를 사용하면 내부 동작원리를 알지 못해도 동일한 방식으로 사용할 수 있다.

    에어콘, 티비 등 전자기기의 리모콘에는 대부분 아래의 아이콘이 그려진 버튼이 있다.

    https://cdn-icons-png.flaticon.com/512/254/254436.png

    새로운 전자기기를 샀을 때 설명서를 읽지 않은 채 위 아이콘이 그려진 버튼을 보자마자 바로 누르려고 하는 당신은 이미 이 인터페이스에 익숙한 것이다.


    그렇다면 이제 본론으로 들어가서 자바의 인터페이스는 왜 interface라는 명칭이 붙었는지 알아보자.

     

    유명한 사이트인 https://www.baeldung.com/ 에서는

    In Java, an interface is an abstract type that contains a collection of methods and constant variables.

    라고,

    위키피디아에서는

    An interface in the Java programming language is an abstract type that is used to describe a behavior that classes must implement.

    라고 인터페이스를 어떻게 사용해야 할 지 알려주고 있다.

     

    물론 이런 식의 설명도 필요하다.

    하지만 이런식의 설명만으로는 interface를 어떤 상황에서 왜 사용해야 하는지 판단하기가 어렵다.

     

    우리가 전원 모양을 보면 '아 이걸 누르면 켜져!'라는 걸 무의식적으로 알기 때문에

    전자기기 제조업체에서 전자기기가 켜지게 하는 전원 모양의 버튼을 전자기기에 넣어 놨듯이,

    객체에서 우리가 원하는 인터페이스를 사용할 수 있게 하기 위해 우리가 클래스에 어떤 interface를 implement한다.

    당연히 그 interface는 추상화되어 있고, 딱 보면 어떤 일을 할 지 예상이 가는, 사용하기 쉬운 형태여야 할 것이다.

     

    즉, 동일한 interface를 implement(장착)한 클래스들은 내부적으로 어떻게 돌아가는지는 모르겠지만 동일한 method를 실행했을 때 비슷한 방식으로 동작하겠구나. 라고 짐작할 수 있다.

    동일한 interface(전원버튼)를 티비에도 넣고, 모니터에도 넣고, 공기청정기에도 넣고, 에어콘에도 넣고, 노트북에도 implement했기 때문에 우리는 '전원버튼' 을 통해 해당 전자기기를 켤 수 있다.

     

    하지만 한 편으로는, 인터페이스가 우리에게 지시하는 대로 하지 않으면 우리가 원하는 목적을 달성할 수 없다.

    물론 기기를 분해해서 원하는 인터페이스를 만들어낼 수도 있지만,

    https://i.ytimg.com/vi/2XzA1TYh17g/maxresdefault.jpg

    인터페이스는 어떻게 보면 사용법(구체적 약속)이다.

    따라서 인터페이스를 클래스에 implement하면 인터페이스의 메소드들을 모두 구현해야 한다.

    왜냐하면 전원 버튼을 눌렀는데 그 어떤 것도 켜지지 않으면 사용자가 매우 당황스러울 것이기 때문이다.

    따라서 같은 인터페이스를 implement 한 클래스들은 모두 같은 메소드를 가지고 있을 것이고

    따라서 interface를 이용하면 서로 다른 타입의 객체여도, 동일한 메소드를 실행하면 비슷한 방식으로 동작하겠구나라고 예상할 수 있다.

     

    프로그래밍 용어들은 현실세계의 용어를 차용한 것들이 많다.

    그 용어가 붙은 데에는 그만한 이유가 있는 것이다.

    그 이유를 이해하면 그 용어의 개념을 훨씬 쉽게 이해할 수 있고 훨씬 잘 적용할 수 있다.

    내가 interface를 코드에 사용할 수 없었던 것은 언제 사용해야 될 지 몰랐기 때문이고, 근본적으로는 개념을 제대로 몰랐기 때문이다.

    해당 개념을 어떻게 써야될 지 모르겠다면 해당 용어의 일반적 의미부터 떠올려보고,

    프로그래밍 용어가 원래 알고 있던 뜻과 매칭이 안된다면 왜 그 용어가 붙여졌을 지 고민해보자.

    댓글

Designed by Tistory.