소프트웨어에서 인터페이스라고 하는 용어와 해당 랭귀지에서 제공하는 Interface라고 하는 예약어는 추상화와 관련이 있다. 여기서 추상화가 무엇인지 그리고 왜 추상화를 잘하면 좋은지 먼저 이해할 필요가 있다.
추상화란 말은 뭔가를 뽑아낸다는 사전적 의미를 가지는데 뽑아내서 두리뭉실한 일반적인 것으로 표현한다는 뜻이다. 이렇게 하면 좋은 것은 인간이 이해하기 쉽다는 점이다. 예를 들어, "오늘 참 예쁘네요"라는 말을 아침에 누군가에게 들었다고 해보자. 예쁘다는 말은 추상적이다. 어떤 요소로 인해 예쁘다는 감정을 불러일으키는지 모르지만 이런 관념적인 표현이 인간에게 기분 좋은 느낌을 가져온다는 것은 누구나 아는 일이다. 가만히 생각해 보면 우리가 일상에서 이런 류의 추상적인 표현을 상당히 많이 한다는 것을 알 수 있다. 즉,
추상화가 잘 될수록 인간이 이해하기 쉽다.
추상화가 잘되었다는 말은 일반화가 잘되었다는 말이고 이것은 프로그램에 문외한이 봐도 이해할 수준이란 뜻이고 설계자의 의도가 분명히 전달되었다는 뜻이라고 봐도 된다. 여기서 인터페이스를 추상화의 도구로 많이 사용한다. 예를 들어,
앨리스와 토모에는 친구사이다. 두 사람은 오늘 점심에 만나서 짬뽕을 먹기로 했다
라는 시나리오가 있다고 하자. 이때 약속.점심먹기()를 프로그램으로 만든다고 하면 '중국집을 찾아서 짬뽕을 주문한 후 먹는다'가 되는데 이때 중국집을 일반적으로 인터페이스로 정의를 한다. 이렇게 하는 이유는 확장성도 있지만 사람이 이해하기 쉽기 때문이다. 위의 그림에서 중국집 인터페이스에 모르는 단어는 없다. 누구나 아는 될 수 있는 대로 일반적으로 (짬뽕의 종류와 가게 이름도 명시하지 않고) 중국집을 표현한 것이다. 동네 슈퍼 아줌마도 이해할 수준이다.
두 사람이 만나서 어떤 가게에 가서 먹을지는 나중의 일이고 어쨌든 점심 식사로 짬뽕을 먹기로 했다는 사실을 UML 로 표현하면 저렇게 된다. 물론 '홍콩반점에서 짬뽕을 먹는다'라는 약속을 했다면 당연하지만 Interface를 이용할 필요가 없다. 구체적으로 가게가 명시되었기 때문에 굳이 인터페이스를 사용할 이유는 없다.
이처럼 인터페이스는 오로지 인간이 이해하기 위해서 사용하는 것이다. 추상화 자체가 인간을 위한 것이고 랭귀지 컴파일러가 이해하기 쉽도록 하기위해 사용하는 것은 아니다. 때문에 수많은 오픈소스 프레임워크에 그렇게나 많은 Interface가 등장하는 것이다. 즉, 인터페이스를 보고 시스템의 동작을 이해하라는 뜻이다.
다형성을 위해 인터페이스를 만들었다는 주장도 있는데 이것은 틀리다. 견고한 클래스, 추상 클래스로도 다형성은 구현할 수 있다. 다형성은 인터페이스의 효과이지 이것을 위해 인터페이스를 만든 것이 아니다. 추상화와 인간이 사물을 바라보는 관점을 위해 인터페이스가 존재하는 것이다. 객체 지향이란 이런 것이다. 현실 세계를 반영해서 만든 것이기 때문에 비유가 아주 쉽다.
현실에서도 누구나 사람을 처음 만나면 인터페이스를 보지 구체적인 능력은 알지도 못하고 보지는 않는다.
이런 인터페이스를 속이는 것에서 인생사 모든 비극이 시작하는지도 모른다.
'일상' 카테고리의 다른 글
Unix 스타일 (0) | 2023.07.28 |
---|---|
디테일이 없다면.. (0) | 2023.07.11 |
어느 스타트업 창업자 (0) | 2023.06.26 |
IoC(Inversion of Control, 제어 역전) 이란 무엇인가 (0) | 2023.06.19 |
약빨고 만든 노래 (0) | 2023.06.18 |