미분류

객체지향 패러다임

언어와 객체지향

by HOON


0

Posted on Feb. 3, 2025, 5:18 p.m.


random_image

안녕하세요, 오늘은 객체지향에 대해서 작성해보겠습니다.

먼저 다들 알고 계시다시피 먼저 객체지향이란 프로그래밍 패러다임 중 하나로, 프로그램을 여러 개의 객체(object)로 구성하여 상호작용하도록 설계하는 방식이라고 할 수 있습니다. 마치 레고를 조립하는 것 처럼요!

대학교 수업시간에 저는 교수님께서 자동차를 비유해 객체지향에 대해 설명 해 주셨는데, 지금 생각해보니, 아마 이게 가장 이해하기 쉬웠던 것 같습니다.


1. 객체지향

우선 코드부터 볼까요?

class Wheel:
    def __init__(self, size):
        self.size = size

    def rotate(self):
        print(f"바퀴가 {self.size}인치 크기로 회전 중입니다.")

class Handle:
    def __init__(self, type):
        self.type = type

    def turn(self, direction):
        print(f"{self.type} 핸들이 {direction} 방향으로 회전했습니다.")

# 객체 생성
front_wheel = Wheel(18)
steering_wheel = Handle("전자식")

front_wheel.rotate()
steering_wheel.turn("왼쪽")

자동차에 들어가는 부품들 휠,타이어,핸들,의자 등 자동차는 굉장히 많은 부품으로 이루어져있습니다.
그럼 자동차를 생산 할 때 마다 이 부품을 만들 수 있는 설계도를 매번 만들어야할까요??

아닙니다.

이미 잘 작성된 설계도를 그대로 따라서 부품을 생산하고 그걸 끼워 맞추기만 하면 되는거죠.
이게 바로 객체지향입니다. 자동차라는 클래스를 생성하고 그 안에 필요한 부품들을 이미 만들어진 설계도대로 쉽게 생성해서 끼우기만 하면 됩니다.



2. 장단점

이처럼 객체지향은 코드의 재사용성을 증가시킬 수 있어요. 이미 만들어진 설계도를 가져다 쓰는 것 처럼요.
또한 유지보수도 용이하겠죠? 내가 사용한 코드를 다른사람도 똑같이 사용 했을테니까요.

이렇게만 보면 객체지향이 절차지향보다 좋아보여요! 근데 그런가요?

물론 서비스 규모가 커지면 커질수록 객체지향이 답이라는걸 느낄 수 있습니다.
코드가 거대해지고 어디를 수정해야할지 감이 안오거든요.

하지만 절차지향이 갖는 이점도 있습니다.
만약 코드가 순차적으로 이루어져야만 하는 상황이라면? 혹은 미묘한 시간의 차이조차 고려해야한다면?

예를 들어, 리얼타임 시스템이나 임베디드 시스템처럼 정해진 시간 내에 특정 작업이 완료되어야 하는 경우 절차지향 방식이 더욱 적합합니다.
또한, 수학적 연산이 많은 프로그램에서도 절차지향이 유리할 수 있다. 대규모 데이터를 반복적으로 처리해야 할 때, 불필요한 객체 생성 없이 메모리를 효율적으로 사용할 수 있기 때문입니다.

각자 상황에 맞게 객체지향이나, 절차지향을 사용하면 좋을 것 같습니다.
물론 저는 현재 이 서버가 가동되고있는 구조를 docker -> k8s로 변경할거라 MSA 기반 절차지향 패러다임으로 변경 할 예정입니다.



3. 결론

지금 당장 옆에 핸드폰만 봐도 전부 객체로 이루어져있습니다.
모든것이 체계화 되어있죠. 객체지향은 우리가 일상에서 접하는 많은 개념과 자연스럽게 연결됩니다. 한번 찾아보세요!
객체지향의 개념이 헷갈렸던 분들이라면 이 글을 통해 조금이나마 도움이 되길 바랍니다.

×

Leave a Comment: