이번주 주말에는 면접 스터디를 하게 되면서 면접 질문을 정리한 다양한 repository를 보게 되었고
그것들을 참고하면서 공부를 하게 되었고 깃헙에 정리했다..!!
먼저, 강의를 보며 다형성, Solid에 대해서 공부하는 시간을 가졌다.
다형성과 SOLID를 공부하면서 자연스럽게 인터페이스에 대해서 추가로 공부하였고
인터페이스와 관련된 면접 질문을 찾아보게 되었다.
처음에 강의를 들을 때는 관계에 대해서 헷갈렸다.
다형성이 객체 지향에서 가장 중요하고 좋은 객체지향 설계의 5가지 원칙인 SOLID가 있다. 는 파악했으나
다형성이랑 인터페이스는 무슨 관계인건지 몰라서 머리가 아팠다.
🖥️(강의) : 클라이언트는 대상의 역할 즉, 인터페이스만 알면 된대!
👧🏻(나) : 아직 감이 잘 안잡히는데..😵💫
🖥️ : 구현이 인터페이스를 구현한 클래스래!
👧🏻 : 근데 인터페이스를 왜 쓰지?
계속 인터페이스 예시를 보다보니 가장 크게 와닿았던 것은
기본 틀을 제공하는 것이므로 표준화가 가능하다, 그리고 개발 시간을 단축시킬 수 있다.
여기서 조금 더 이해를 하고 싶어서 다형성과 연관지어서 이해하려고 했다.
운전자가 있고 자동차가 있어. 운전자가 클라이언트고 자동차는 서버라고 생각해봐
운전자가 운전하려면 자동차의 역할에만 알면 돼
예를 들어 운전방법이 있어 이 역할을 인터페이스라고 해
근데 운전자가 자동차의 내부 구조까지 알아야 할까?
자동차가 변경되면 운전을 못할까?
아니지 운전을 할 수 있어. 왜? 운전방법을 아니깐
➡️ 클라이언트는 구현 대상의 내부 구조를 몰라도 된다!
역할에는 로미오와 줄리엣이 있고 배우(구현)는 A와 J가 연습했어
역할이 인터페이스이고 구현이 인터페이스를 구현한 클래스야
근데 어느날 A라는 사람이 아파서 B가 로미오 역할을 하게 되었어
로미오 역할은 클라이언트가 하고 줄리엣 역할은 서버라고 생각해봐
근데 줄리엣을 맡은 J한테 영향이 있을까?
➡️ 클라이언트는 구현 대상 자체를 변경해도 영향을 받지 않는다!
인터페이스를 계속 파다보니 추상클래스 예시도 비교하는 글들을 많이 보게 되면서
이들의 차이점도 같이 비교하면서 또 머리가 아팠다.
깃허브에 정리를 하면서 비교하니깐 감이 잡힐 듯 말듯 ..
💡
다형성을 활용해서 역할과 구현으로 분리를 하면 클라이언트는 인터페이스만 알면 되고
내부 구조를 몰라도 된다. 이를 잘 활용하려면 인터페이스를 잘 설계해야한다.
여기서 인터페이스는 클라이언트 프로그램에 어떤 메서드를 제공하는지 알려주는
명세(specification) 또는 약속이다. 쉽게 말하자면, 인터페이스는 추상 메서드의 집합이다.
즉, 구현된 것이 전혀 없는 껍데기와 같다.
여기서 추상 클래스와 인터페이스의 차이에 대해서 질문이 들어올 수 있다.
출처
[ [Java] 인터페이스 - 인터페이스를 활용한 다형성 구현 ]
[ [Java, 객체지향] 인터페이스란? (Interface) ]
[ 인터페이스(Interface) 정의 및 사용 이유 (장점) ]
[ 스프링 핵심 원리(1) - 객체 지향 설계와 스프링 ]
[ 객체지향 설계 ]
'WIL' 카테고리의 다른 글
24주차 - commit 기록 지우기 (0) | 2022.02.27 |
---|---|
23주차 - 생성자 (0) | 2022.02.20 |
21주차 - 페이징 (0) | 2022.02.06 |
19주차 - 이번주 정리 (0) | 2022.01.24 |
18주차 (0) | 2022.01.16 |