(+) 인터페이스 개념 바로잡기
Last updated
Last updated
객체지향의 사실과 오해에서 등장하는 '인터페이스' 라는 단어는 자바의 인터페이스가 아니다. 본연의 '인터페이스' 라는 의미 그대로이다. 그리고 사실 내가 계속 사용해온 자바의 인터페이스 역시 결국 본연의 '인터페이스' 의미 자체이다.
인터페이스에 대해서 근본적으로 다시 한번 찾아보는 과정에 사전적 의미도 다시 보고 도 다시 봤다. 어느 곳에서도 흔히 인터페이스를 처음 학습할때 배우게 되는 '상속'의 개념이라던가, '부모'와 같은 상하위를 구분짓는 이야기는 없었다.
애초에 상하위 개념이 아니라 ‘접점’을 통한 ‘연결’의 의미인데 인터페이스를 처음 학습할 때 ‘상속’, ‘부모’와 같은 단어로 배우다 보니 개념이 잘못 자리잡게 된 것 같다. 인터페이스라는 말 자체가 inter(중간) + face(맞대고 있는) 의 의미이기에 ‘연결’의 의미가 맞다.
더욱이 extends가 아니고 implements 인 것도 보면 뜻이 더 명확한데 영영사전을 보면 의미가 아래와 같다.
If you implement something such as a plan, you ensure that what has been planned is done.
프로그래밍적으로 보면 ‘~을 구현할 예정’ 혹은 ‘~을 구현했어’ 와 같은 의미인 것이다. 연결을 통해서 해당 인터페이스(접점)를 통해서 필요한 것을 구현해서 사용한다는 뜻으로 해석하는 것이 자연스러운 것 같다. 책에서 계속 강조하는 인터페이스와 구현을 분리한다는 맥락과 이어진다.
모두 WritingInstrument라는 인터페이스를 통해서 write을 재정의하고 있다. WritingInstrument를 implements 하도록 함으로써 후에 클라이언트(Student)가 WritingInstrument라는 인터페이스(접점)를 통해서 접근이 가능하도록 한다.