작성
·
508
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)와 "디자인 패턴" 학습을 권해드립니다.
감사합니다.