본문 바로가기

Today I Learned

[TIL][Unity] 인터페이스

인터페이스

오늘 아침 팀 프로젝트 일간 회의에서 재휘님이 작업 피드백으로 '장애물 오브젝트 스크립트에 인터페이스를 적용하라'고 하셨다. 강의를 들어 적용법에 대해 알고 있었기에 알았다고 하였으나, 정확히 왜 인터페이스를 사용해야 하는지 이해하지 못했다. 따라서 오늘 저녁 식사 이후 시간은 온전히 인터페이스에 대해 이해하고 사용하는 이유를 공부하는데에 사용하였다.

 

인터페이스란?

인터페이스를 왜 사용하는지 알아보기 이전에 인터페이스가 정확히 무엇인지 알 필요가 있었다.

인터페이스란, 추상화를 달성하고 객체가 서로 상호작용할 수 있도록 하는 강력한 도구이다.

사실 위 문장만으로 인터페이스를 정확히 이해할 수 없다. 따라서 풀어 설명하자면, 인터페이스는 상속 받는 클래스에서 구현해야 할 기능, 내용에 대한 템플릿을 제공하는 역할을 한다. 이는 다형성과 코드의 유연성을 높이는 데 중요한 역할을 한다. 다음은 인터페이스의 주요 특징이다.

  • 구현을 포함하지 않음
  • 다중 상속을 지원함
  • 다형성을 지원함
  • 구현을 강제함

가장 큰 특징으로 인터페이스 내에는 구현을 포함하지 않으며, 인터페이스에 정의된 멤버는 반드시 구현해야 한다는 특징이 있다.

 

인터페이스 구현 예시

다음과 같이 인터페이스를 정의할 수 있다.

public interface ICalculater
{
    void FirstNum();
    void SecondNum();
    void Calculate();
    int result;
}

 

위 인터페이스는 계산기에 대한 인터페이스를 정의한 것으로 FirstNum 메서드는 사용자로부터 첫 번째 수를 입력받는 메서드, SecondNum 메서드는 두 번째 수를 입력받는 메서드, Calculate 메서드는 인터페이스를 상속 받은 클래스에서 정의한 연산을 진행하는 메서드, result 변수는 결괏값을 저장하는 정수형 변수이다.

 

아래는 위 인터페이스를 상속받은 Add 클래스와 Subtract 클래스이다.

public class Add : ICalculator
{
    public void FirstNum()
    {
        // 첫 번째 수를 입력받는 메서드
    }
    
    public void SecondNum()
    {
        // 두 번째 수를 입력받는 메서드
    }
    
    public void Calculate()
    {
        // 더하기 연산을 진행하는 메서드
        
    }
}

public class Subtract : ICalculator
{
    public void FirstNum()
    {
        // 첫 번째 수를 입력받는 메서드
    }
    
    public void SecondNum()
    {
        // 두 번째 수를 입력받는 메서드
    }
    
    public void Calculate()
    {
        // 빼기 연산을 진행하는 메서드
        
    }
}

 

위와 같이 구현하면 Calculate 메서드에서 result 변수에 연산의 결괏값을 저장하게 된다.

이 처럼 클래스 구성의 템플릿을 제공하는 특징이 있으며, 개발자가 유연성 높은 코드를 작성할 수 있게 된다.

 

인터페이스는 물론 코드 자체의 유연성을 높여주기도 하지만, 개발자가 정리된 상황에서 코딩할 수 있는 환경을 제공한다.

코딩을 하다보면 메서드 작성 도중에 다른 메서드가 필요한 듯 하여 다른 메서드를 작성하고 이러한 상황이 많이 반복됨을 많이 경험하게 된다. 하지만 인터페이스를 통해 상속 받을 클래스에 대한 기틀을 마련하여 코딩에 접근한다면 훨씬 차분한 코딩이 가능할 것이라고 생각한다.

물론 인터페이스를 사용하기 위해서는 무작정 코드부터 작성하고 보는 경우 할 일이 더 늘어나게 되어 안쓰느니만 못하다. 이제부터라도 코드 작성 전 내가 어떤 클래스를 구현하고 싶은지, 어떠한 기능이 포함되어야 하는지를 적절히 정리하여 코딩하는 습관을 들여야겠다.

 

24.06.05 Today I Learned