인프런 커뮤니티 질문&답변
인터페이스 자체에 잘 이해가 되질 않습니다.
작성
·
630
1
안녕하세요. 홍팍님
인터페이스 강의에서 궁금한 점이 생겨 질문 드립니다.
인터페이스란 개념 설명해주신 대로 인터페이스란 프로토 타입(추상 메소드 ) 즉 빈껍떼기 메소드 라고 말씀해주셨습니다. 즉 알람이라는 메소드 안에 어떻게 알람이 작동할지 모른 상태라는 것인건 알겠습니다. 그리고 그 핸드폰(클래스)이 아직 어떻게 작동할지 모르는 알람에게 접근해 그 알람이 어떻게 작동할지 핸드폰(클래스)에서 재정의 즉 값을 넣어준다는 것도 잘 알겠습니다. 하지만 여기서 궁금한것이 저번 시간에 공부했던 클래스 메소드와 비교해 인터페이스의 장점이 무엇인지 잘 모르겠습니다.
객체가 주어지면 그 객체에 맞는 클래스를 만들고 그 클래스 안에 필드 값을 저장 및 생성자를 통해 필드 값에 대한 실행 코드를 작성하는것으로 알고 있습니다. 그 다음 메소드를 통해 함수 호출을 하는것도 알고 있구요. 이렇게 하면 굳이 인터페이스를 써야하는 이유가 있을까요?
제가 알고 있는 예로 말씀 드리겠습니다.
자동차(객체)라는걸 만든다고 가정할떄 class를 통해 자동차를 정의해주고 자동차의 속성(필드값)을 지정해주고 그 속성이 가지는 값들을 생성자를 통해 정의해주고 그 밑에 자동차의 기능(메소드)를 작성합니다. 그러면 한 class 안에 메소드가 이미 들어가 있는 상황이 되겠죠?
그렇다면 인터페이스를 통해 굳이 빈껍데기인 메소드를 만들고 이걸 한 class에서 불러와 값을 지정해주는 의미가 있나요?
이미 한 자동차라는 class안에 메소드까지 다 지정해놓은 상황인데 굳이 자동차의 기능을 빈껍데기로 만들고 이 빈껍데기를 자동차라는 class 가 받아서 그 메소드 값을 지정해준다는게 너무 비효율적 작업이 아닌가.. 생각이 듭니다..그리고 다른 클래스의 메소드를 불러오는거라고 한다면 상속이라는걸 통해 메소드를 받으면 되는거 아닌가요?.. 제가 말씀 드린 궁금증이.. 어떤 궁금증인지.. 잘 파악이 되셨는지 모르겠습니다.
워낙.. 글을 잘 못써서요.. 지금까지 긴 글 봐주셔서 감사의 말씀을 드리며... 답변 주시면 감사드리겠습니다.
퀴즈
객체 지향 프로그래밍에서 인터페이스는 주로 어떤 역할을 할까요?
데이터를 저장하는 공간
객체의 역할을 정의하는 설계도
다른 클래스의 기능을 상속받는 방법
완성된 기능을 가진 객체 자체
답변 4
1
역시! 홍팍님이십니다.
덕분에 인터페이스와 추상 메소드의 개념을 잘 알았습니다!!
정말 감사합니다.
아울러 추상 클래스에 대하여 추가적으로 링크까지 주셔서 감사합니다.
더욱 더 열심히 공부해서 좋은 개발자가 되도록 노력하겠습니다.
감사합니다.
PS.
다른 질문들도 얼른 준비해서 홍팍님과 다시 만나길 기대하겠습니다 ㅎㅎ
1
인터페이스
인터페이스는 일종의 역할입니다. 이러한 인터페이스는 여러개의 추상 메소드의 집합으로 볼 수 있습니다.
추상메소드
추상 메소드는 껍데기 메소드입니다. 이러한 추상 메소드가 묶여 하나의 역할 즉, 인터페이스를 이룹니다.
정리
인터페이스가 추상메소드를 포함하는 구조이다.
PS.
추상 클래스를 해당 강의에서 제외하였습니다. 제 유튜브에 간단한 내용이 있으니, 참고해보세요. https://youtu.be/O6f6fRSkpA0
잘 전달이 되었길 바라며, 오늘도 수고하셨습니다!
0
안녕하세요. 답변 주신 내용은 정말 많은 도움이 됐습니다.
다름이 아니라 그 외에도 질문할게 있어서 답글을 달게 되었습니다.
앞서 강의에서 인터페이스는 다른 말로 추상메서드라고 하셨습니다.
그럼 추상메서드와 인터페이스는 같은 의미 인건가요?
같은 의미라면 왜 추상메서드와 인터페이스라는걸 나누어 놓은 건가요?
아울러 강의에는 추상 클래스 및 GUI 프로그래밍 에 대한 부분은 없는건가요?
현재 학원을 다니면서 부족한 개념을 홍팍님 강의를 통해 보충하고 있습니다.
추상 클래스와 인터페이스에 좀 많은 혼동이 있어서 추상 클래스를 찾아보았는데
따로 강의가 없는거 같아서요.. 제가 놓치고 있는 강의에 설명을 해주셨다면
정말 죄송하지만 알려주실수 있으실까요?
다시 한번 명확하고 쉽게 인터페이스에 대해 설명해 주신 점 감사의 말씀을 드리며
오늘 하루도 홍팍님의 강의를 듣고 열공 하겠습니다!
0
USB, 실생활 인터페이스 예
흔히 접할 수 있는 인터페이스의 예로, USB가 있습니다. 일반적으로 노트북 측면에는 USB 포트가 있죠? 이를 통해 다양한 기기들과 통신할 수 있습니다. 예를들어 스마트폰, 카메라, 마이크 등을 말이죠. 이들 모두 공통된 인터페이스 USB를 구현하고 있기기에 가능한 일입니다.
만약 각각의 기기(스마트폰, 카메라, 마이크, ...)별, 서로 다른 방식의 연결잭이 있었다면 어땠을까요? 수 많은 기기에 대한 모든 모양의 구멍이 뚫려있어야 합니다. 보기도 흉하고, 비용적으로도 손실이 클겁니다.
인터페이스의 장점
자바의 객체도 마찬가지입니다. 어떤 객체가 외부 객체와 소통할 때, 인터페이스로 소통할 수 있는데, 다양한 객체들이 공통된 인터페이스를 구현하면 할 수록, 효율성은 증가합니다.
USB 하나로 수 많은 기기들과 소통할 수 있는 것 처럼 말이죠.
Q1. 비효율적인거 아닌가요?
상황에 따라 비효율적인 경우도 있습니다. 반드시 인터페이스를 만들 필요는 없습니다. 인터페이스는 확장 가능성이 있다 판단될 때 만드시면 됩니다.
Q2. 인터페이스 말고, 상속을 통해 오버라이딩하면 되지 않을까요?
상속 관계인 경우, 그렇게 사용하시면 됩니다. 하지만 상속관계가 없는 객체들의 경우, 해당 방법을 사용할 수 없습니다.
PS.
전달이 잘 되었는지 모르겠네요. 더 깊은 내용을 원하신다면, 해당 링크(https://gxnzi.tistory.com/60)와 "디자인 패턴" 학습을 권해드립니다.
감사합니다.





