본문 바로가기

IT/개발상식

Interface

Interface

Programming에서 Interface란 어떠한 것에 대한 틀을 의미합니다. 건물을 짓는데 기둥이 없으면 곤란하겠죠. 특히 꼭 있어야 하는 기둥이 없다면 식은땀이 날 것입니다.

이러한 것처럼 Software에서도 Interface에 있는 틀은 꼭 구현을 해야 합니다. 이러한 강제성을 부여한다는 의미도 있겠지만 설계를 할 때에도 큰 도움이 됩니다. 예를 들어 협업 과정에서 개발자의 실수로 어떠한 기능을 구현하지 않으면 처음 설계한 것과 다른 결과물이 나오거나 이러한 누락되어 구현하지 않은 기능을 찾기까지 꽤 큰 공수가 들겠지요.

이러한 개발자의 휴먼에러는 개발하는 입장에서 굉장한 스트레스입니다. 이러한 휴먼에러를 줄이고자 본인에게 잘 맞는 IDE를 선택하기도 하지요. 이처럼 Interface는 생각보다 꽤 큰 역할을 한다고 볼 수도 있겠네요.

그럼 지금부터 예시 코드를 통하여 확인해 보도록 하겠습니다.

 


 

TypeScript와 함께하는 Interface 예시

사실 Interface를 설명하는데 있어 TypeScript가 적절한 예시는 아니겠습니다만 적당히 느낌만 알아 보도록 하겠습니다. 물론 제가 JavaScript에 더욱 익숙한 이유도 있지만요..

이번 예시에서는 간단한 HTTP 통신을 위한 Fetcher Class를 설계해 볼 것입니다. 참고로 HTTP란 인터넷 상에서 Server와 Client가 Data를 주고 받는 일종의 약속과 같은 느낌입니다. 이번 글에서는 통신에 대한 개념을 설명하는 것이 아니니 이정도 까지만 설명드릴게요.

그럼 바로 예시코드로 넘어가겠습니다.

interface IHttp {
    get(): Promise<unknown>;
    post(): Promise<unkwon>;
    patch(): Promise<unkwon>;
    del(): Promise<unkwon>;
}

위의 코드는 단순히 HTTP 통신 방식 중에서 GET, POST, PATCH, DELETE메소드에 대한 것을 Interface로 나타낸 것입니다. 대충 이러한 메소드들이 적혀져 있구나 정도를 보시면 되겠습니다. 즉, HTTP의 메소드인 GET, POST, PATCH, DELETE에 대한 틀을 만들어 준 것입니다.

class Http implements IHttp {
    constructor() {}

    // @override
    public get(): Promise<unknown> {
        // Do something ...
        console.log("나는 GET");
    }

    // @override
    public post(): Promise<unknown> {
        // Do something ...
          console.log("나는 POST");
    }

    // @override
    public patch(): Promise<unknown> {
        // Do something ...
          console.log("나는 PATCH");
    }

    // @override
    public del(): Promise<unknown> {
        // Do something ...
         console.log("나는 DELETE");
    }
}

위의 코드는 Interface에서 정의한 것들을 구체적으로 어떻게 동작할 것인지 정의한 것입니다. 보통 Interface를 구체적으로 구현할 때에는 프로그래밍 언어에서 대부분 implements키워드로 내가 "구현하겠다."라고 말해줍니다. 그리고 Interface에서 틀을 짜놓은 것들을 빠짐없이 모두 구현해야만 합니다.

마치 건물 설계도가 나오면 그대로 만들어야 하는 것과 같이 말이지요.

위의 예시만 보면 사실 Interface 없이 바로 Class로 작성하면 안되나? 라는 의문이 들기 마련입니다. 하지만 실제 현업에서는 만들어야 하는 기능들에 대해 대략적으로 Interface로 작성한 뒤, 이러한 기능들을 토대로 추가적인 기능 구현이 필요한 경우, Interface를 구현하는 방식으로 작업 방향을 이끌어 가기도 한답니다.

프로그램 소스의 양이 많아지고 프로젝트 덩어리가 커지면 커질 수록 Interface는 대략적인 방향성을 제시해 주는 역할도 해주는 느낌이지요. 예시가 적절했는지는 모르겠지만 이번 글에서 Interface에 대해 애매하신 분들이 보고 대략적으로나마 도움이 됐으면 하는 바람에서 작성해 보았습니다.

그럼 언제나 그렇듯 갑작스레 글을 요약하며 마무리 하도록 하겠습니다.

 


 

요약

Interface는 건물의 설계도와 같은 느낌이다.

반드시 구현해야만 한다.

약간의 방향성도 제시해주는 느낌이다.

'IT > 개발상식' 카테고리의 다른 글

추상화  (0) 2024.01.10
Clean Code  (0) 2023.12.02
Architecture  (0) 2023.10.25
객체지향 프로그래밍  (0) 2023.09.24
Container  (0) 2023.09.23