데이터 과학 유망주의 매일 글쓰기 — 75일차
다형성(Polymorphism)
데이터 과학 유망주의 매일 글쓰기 — 75일차
다형성(Polymorphism)
다형성

Polymorphism의 본래 뜻은 “다양한 형태로 존재하려는 성질"이다.
오늘 한일:
오늘 자가 점검의 시간은 예상외로 서술형 문제는 하나도 없었다. 그러나 주어진 문제 역시 한 주간 배웠던 내용들, 특히 클래스를 주의깊게 배웠기 때문인지 그렇게 어렵게 느껴지지 않았다.
이번 주 배운 내용을 회고하려던 중, 오늘은 객체지향개념 중 하나인 다형성(Polymorphism)을 리뷰하면 좋겠다고 생각했다.
다형성(Polymorphism)
부모 클래스의 함수를 자녀 클래스가 이어 받지만, 필요에 따라서 그 기능을 조금 변경할 수 있는 기법을 말한다. 부모로 부터 물려받은 재산이기 때문에, 그 이름은 같지만, 사용 목적을 조금 다르게 변경할 수 있는 도구를 자녀 클래스가 가지게 되는 것이다. 또한, 부모 클래스의 원형 함수와, 자녀 클래스가 상속한 동명의 함수를 공통된 인터페이스 함수를 통해 호출할 수 있게 하는 개념을 말하기도 한다.
예를 들어, 아래의 코드를 보자.
# 네모 클래스
class Square:
# 색깔 입히는 함수
def color(self, color):
print(“Square is: {}”.format(color))
# 세모 클래스
class Triangle(Square):
# 색깔 입히는 함수
def color(self, color):
print(“Triangle is: {}”.format(color))
# 공통 interface 정의
def color_shapes(shape, colored):
shape.color(colored)
# 객체로 인스턴스화
square = Square()
triangle = Triangle()
# 객체를 공통된 인터페이스에 인자로 사용하여 각 모양에 색깔 입히기
color_shapes(square, “red”)
color_shapes(triangle, “blue”)
>> Square is: red
>> Triangle is: blue
위 코드는 자녀 클래스인 “세모(Triangle)” 클래스가 부모 클래스인 “네모(Square)” 클래스를 상속한 모습을 보여준다. 여기서 자녀 클래스는 부모 클래스의 메소드인 color()를 부여받지만, 조금 기능이 다른 것을 볼 수 있다. print되는 것이 다르기 때문이다.
이 동명의 조금 다른 함수들을 어떻게 일괄적으로 실행할 수 있을까? 위 코드를 보면 color_shapes()라는 공통 인터페이스가 있는데, 바로 이 것을 이용해서 할 수 있다. 여기서 인자는 shape과 colored가 있는데, shape은 함수를 가지고 있는 클래스, colored는 함수에 이용하려는 인자가 된다. 이 공통 인터페이스 함수는 입력된 클래스 shape에서 인자 colored를 이용하여 color()함수를 호출한다.
이후 클래스를 객체화하고, 공통 인터페이스를 이용해 원하는 클래스와 색깔을 인자로 넣어주면, 두 개의 이름은 같지만 다른 함수를 하나의 공통 인터페이스로 호출할 수 있는 것이다. “네모는 빨강(Sqaure is: red)”, “세모는 파랑(Triangle is blue)”라는 결과가 출력된 것을 볼 수 있다.
이렇듯 이름이 같지만 기능이 조금 다른 함수를 공통된 인터페이스를 통해 동시에 호출할 수 있게 해주며, 부모 클래스로 부터 받은 함수를 자녀 클래스가 각자 자신의 필요에 맞게 다양한 형태로 사용할 수 있게 해 주는 것이 다형성의 개념이라고 할 수 있다.
앞으로 할일:
이번 주는 그 어느 때보다 내가 사용한 코드에 대해 많은 생각을 해 볼 수 있는 한 주였다. 이전까지 그냥 가져다 쓴 나는 짜집기 전문가로써 트레이닝 된 것에 불과하다고 볼 수 있지만(사실 이것도 나는 좋은 거라고 생각한다.), 이번 주는 진짜 소프트웨어 엔지니어의 관점에서 어떻게 해야 조금 더 효율적이고 다른 사람들이 알아보기 쉬운 코드를 짤 수 있을지 고민해 볼 수 있었다.
객체 지향의 개념은 사실 매우 방대하고, 그 개념이 추상적일 수 있어, 많은 사람들이 헷갈리는 부분이기도하다. 그만큼 무언가를 특별히 “~이렇다”라고 할 수 없을 정도로 많은 사람들이 명확히 정희하기 힘들어 하는 개념이다. 그렇지만, 어느 정도 “어떤 것이다”라는 느낌을 가지고, 어떻게 해야 효율적으로 코드를 짤 수 있을지를 고민할 수 있게 해주는 다소 철학적인 역할을 한다고도 볼 수 있다. 그만큼 꼬리에 꼬리를 물고 이어지는 질문들이 많다. 그래서, 각자의 해답이 다를 수 있다.
중요한 것은 코딩은 이론 보다는 실전이라는 것이다. 객체지향의 개념이 이렇다 저렇다 떠들기 전에, 무엇보다도 스스로 무언가를 개념을 적용하여 만들어 보는 것이 중요하다. 아무리 이론적으로 빠삭해도 실제로 그것을 바탕으로 무언가를 구현할 수 없다면 무용지물 일테니까. 게다가, 코드로 그 개념을 옮기지 못한다면 이론은 아무 쓸모도 없는 것이다. 그렇기에 마냥 이론을 붙잡고 있기 보다, 직접 자신이 무언가 해보면서 부딪히고, 거기서 하나 하나 적용해나가고 배워나가는 것이 중요하다. 그렇게 해야 어떤 개념이 어떻게 적용되는 것인지, 그리고 어떻게 적용해야 조금 더 좋을지를 조금씩 몸으로 터득할 수 있는 것이다.
세상에 존재하는 모든 배움도 마찬가지라는 생각이든다. 프로그래밍을 배우면서 개인의 역량이라는 것은, 꾸준한 노력 끝에 조금씩 성장하는 속성이라는 것을 알아가게 되는 것 같다. 내일도 내가 쓴 단 한줄의 코드라도 어제보다는 조금 더 효율적일 수 있도록 앞으로도 노력해야겠다. 결국 내가 한줄 한줄 쓰는 코드를 누군가에게 논리적으로 다 설명할 수 있는 날이 왔으면 좋겠다. 설령 그날이 매우 멀더라도, 나의 삶은 조금 씩 덜 틀리면서, 더 효율적인 방향으로 나아갈 것이라는 사실을 안다. 모두가, 내일은 오늘의 나보다 조금 씩 덜 틀리고, 조금 더 효율적인 사람으로 변화하기를 소망한다.
메타데이터
- post_id
- e90ca96756ed
- slug
- 데이터-과학-유망주의-매일-글쓰기-75일차-e90ca96756ed
- url
- https://medium.com/@conanmoon/%EB%8D%B0%EC%9D%B4%ED%84%B0-%EA%B3%BC%ED%95%99-%EC%9C%A0%EB%A7%9D%EC%A3%BC%EC%9D%98-%EB%A7%A4%EC%9D%BC-%EA%B8%80%EC%93%B0%EA%B8%B0-75%EC%9D%BC%EC%B0%A8-e90ca96756ed
- canonical_url
- https://medium.com/@conanmoon/%EB%8D%B0%EC%9D%B4%ED%84%B0-%EA%B3%BC%ED%95%99-%EC%9C%A0%EB%A7%9D%EC%A3%BC%EC%9D%98-%EB%A7%A4%EC%9D%BC-%EA%B8%80%EC%93%B0%EA%B8%B0-75%EC%9D%BC%EC%B0%A8-e90ca96756ed
- author_url
- https://medium.com/@conanmoon
- status
- ok
- fetched_at
- 2026-08-11 05:40:59