본문 바로가기

코딩

프로토콜을 구현하다

728x90
반응형

프로토콜 구현 ; Implementing Protocols

코딩에서 프로토콜 이란 일종의 계약이나 규약으로, 클래스나 객체가 지켜야 하는 인터페이스를 말한다. `프로토콜 구현`이란 이 인터페이스에 따라 클래스나 객체를 설계하고, 해당 프로토콜에 명시된  메서드와 속성을 구현하는 것이다.

요약하면, 코딩할 때 특정 규칙을 준수해 클래스나 객체를 구현하는 것을 `프로토콜 구현' 이라 한다.

 

프로토클 구현의 목적은 상속받은 객체나 클래스들이 효과적으로 함께 작동하기 위함이며, 클래스가 특정 역할이나 계약을 수행하기 위해 구현해야 하는 메서드나 속성을 명시한다.

 

프로토콜을 구현함으로써 다형성(polymorphism)을 활용할 수 있고, 클래스 간에 유사한 동작을 공유할 수 있습니다. 또한, 인터페이스를 기준으로 클래스를 설계함으로써 코드의 가독성과 유지 보수성을 향상시킬 수 있습니다. 다른 클래스나 모듈에서 프로토콜을 구현한 클래스를 사용할 때, 프로토콜을 준수하는지 여부에 따라 특정 기능이 보장되는 것을 확인할 수 있습니다

인터페이스 구현 ; Implementing Interface

코딩에서 인터페이스란 프로토콜을 구현을 정의하는데 사용되는 개념이다. 클래스가 특정 인터페이스를 구현한다는 것은 해당 클래스가 인터페이스에 명시된 메서드를 모두 포함하고, 인터페이스 규칙에 따라 정확한 동작을 보장하는 것을 의미한다.

 

인터페이스 ; Interface used in OOP

객체지향 프로그래밍에서 `인터페이스`란 클래스들에 대한 계약을 정의하는 추상 메서드나 속성들의 집합으로 인터페이스를 따르는 경우 반드시 구현해야 하는 메서드 목록이다. 목록이라 함은 메서드를 정의하지만, 해당 메서드의 구현 내용은 제공하지 않는다는 것이다.

 

인터페이스는 클래스에 대한 청사진 역할을 하며, 인터페이스를 구현함으로써 비슷한 동작을 가진 다른 클래스들을 일관되게 다룰 수 있도록 보장한다. 보장이라 함은 특정 메서드들이 클래스 내에서 사용 가능하다는 것이다.

 

클래스들의 계약 ; A contract for classes

클래스들의 계약은 인터페이스를 통해 정의되는데, 클래스들 간에 어떤 메서드가 구현되어야 하는지를 명시하는 것이다. 인터페이스는 추상 메서드로 이루어진 목록을 제공하는데, 추상 메서드는 구현 시 반드시 구현되어야 하는 메서드다.

`클래스가 인터페이스를 구현`한다는 것은 그 클래스가 인터페이스에 명시된 모든 메서드를 실제로 구현해야 한다는 의미이다.

 

이렇게 클래스들의 계약을 정의함으로써 클래스들은 동일한 인터페이스를 준수하게 되며, 이를 통해 유사한 동작을 수행하는 클래스들을 일관되게 다룰 수 있게 된다. 또한, 인터페이스를 구현한 클래스들은 해당 인터페이스의 메서드들을 호출하는 코드에서 서로 교체하여 사용할 수 있으며, 다형성을 지원하게 된다.

 

 

파이썬에서의 클래스 계약 구현

파이썬에서 `클래스 계약` 인터페이스를 구현하는 방법은 추상 베이스 클래스(ABC; Abstract Base Class) 와 추상 메서드(Absctact Method)를 사용하는 것이다.

from abc import ABC, abstractmethod

# ABC 를 상속해 인터페이스 구현
class 도형(ABC):
    # 추상 메서드를 이용해 반드시 구현해야할 계약 정의
    @abstractmethod
    def 면적(self):
        pass
    
    @abstractmethod
    def 둘레(self):
        pass
    
    
class 직사각형(도형):
    def __init__(self, 가로, 세로):
        self.가로 = 가로
        self.세로 = 세로
        
    def 면적(self):
        return self.가로 * self.세로
    
    def 둘레(self):
        return 2 * (self.가로 + self.세로)


책상 = 직사각형(120, 90)
print(f'책상 면적은 {책상.면적()} cm2 이다')
print(f'책상 둘레는 {책상.둘레()} cm 이다')


class 원(도형):
    def __init__(self, 반지름):
        self.반지름 = 반지름
        
    def 면적(self):
        return 3.14 * self.반지름 * self.반지름
    
    def 둘레(self):
        return 2 * 3.14 * self.반지름
    
원탁 = 원(45)
print(f'반지름 45인 원탁 면적은 {round(원탁.면적())} 이다')
print(f'반지름 45인 원탁 둘레는 {round(원탁.둘레())} 이다')

 

인터페이스 클래스에 계약된 추상 메서드 중 하나라도 구현을 하지 않으면 오류가 발생한다.

from abc import ABC, abstractmethod

# ABC 를 상속해 인터페이스 구현
class 도형(ABC):
    # 추상 메서드를 이용해 반드시 구현해야할 계약 정의
    @abstractmethod
    def 면적(self):
        pass
    
    @abstractmethod
    def 둘레(self):
        pass
    
    
class 직사각형(도형):
    def __init__(self, 가로, 세로):
        self.가로 = 가로
        self.세로 = 세로
        
    def 면적(self):
        return self.가로 * self.세로

책상 = 직사각형(120, 90)

- 오류 내용 -
TypeError: Can't instantiate abstract class 직사각형 with abstract method 둘레
728x90
반응형