객체지향 사실과 오해 1장, 2장

박지성 ·2025년 8월 9일
post-thumbnail

읽기전에…

객체에 대해서 알고 있는 내용이 없어서, 궁금한 내용, 기본적인 개념을 정리해봤다.

시작!


객체 알아보기

프로그램을 수많은 '객체(object)'라는 기본 단위로 나누고 이들의 상호 작용으로 서술하는 방식이다.

인간이 정의한 추상적인 개념이다.

-나무위키-

객체지향을 공부하면 항상 어려운 이유가 추상적인 개념이라 그런 것 아닐까 한다.

CS를 공부할 때 항상 나오는 “추상” 개념이 나오면 많이보고, 많이 접하는게 가장 빠르게 익혀지는 것 같다


왜 객체지향이 나온걸까

절차지향 : 코드가 순서대로 실행된다

문제점

  • 프로그램이 커질 수록 데이터를 관리하기 힘들다
  • 함수가 많아져서 서로 얽히고 꼬인다
  • 수정하려면 여기 저기 고쳐야한다

절차지향 문제점을 해결하고 싶다

현실 세계 처럼 생각해보자!

자동차 : 상태(속도, 연료), 행동(가속, 정지)

강아지 : 특징(이름, 털 색), 행동(뛰기, 짖기)

그럼 프로그램의 세계에서도 적용해보자

기능과 데이터를 묶어서 → 객체로 관리하자


묶으면 뭐가 좋은데

  • 독립성이 증가해서 서로 영향을 덜 준다
  • 필요한 것만 공개, 나머지는 숨겨서 관리할 수 있다(캡슐화)
  • 같은 모양으로 여러 개 객체를 만들 수 있다(재사용성)

함수랑 뭐가 다를까?

함수는 “동작”만 있다

데이터는 함수 밖에 있거나, 매개변수로 받는다

def 더하기 함수(a, b):
    return a + b // -> 동작만 수행!!

print(더하기(2, 3))  # 5

객체는 “데이터(속성)”“동작(메서드)”를 같이 가진다

class 계산기:
    def __init__(self):
        self.결과 = 0  # 데이터

    def 더하기(self,):  # 동작
        self.결과 += 값

calc = 계산기()
calc.더하기(3)
calc.더하기(2)
print(calc.결과)  # 5

즉!! 객체는 데이터도 가지고 있다!!!

함수객체
데이터 보관없음있음
동작있음있음
관계데이터와 분리데이터와 결합
상태 유지XO

사실 우리는 객체를 쓰고 있었다!!!

Nest.js

Nest.js를 사용해본적 있다면, 객체지향 설계를 사용한 것!!!!!

ControllerServiceRepository 등 역할을 가진 객체들로 구조를 만든다!

예를 들어

  • Controller의 역할은 '웹 요청을 받는 것'이고, 책임은 '요청을 분석해서 적절한 Service에 처리를 위임
  • Service의 역할은 '핵심 비즈니스 로직을 처리하는 것'이고, 책임은 '데이터를 가공하거나 계산하는 것'

각자 역할과 책임이 뚜렷한 객체들이 서로 협력하여 하나의 기능을 완성하는 구조

React

리엑트는 객체 지향 개념을 품고 있다.

nest.js 처럼 객체지향 설계라고 보기는 힘들지만 “컴포넌트”를 본다면 객체지향 개념이 녹아 있다고 볼 수 있습니다!!

React는 class 문법을 사용하지 않는 함수형 컴포넌트를 주로 사용하지만, 그 기본 단위인 컴포넌트가 자율성을 가지고, 명확한 책임을 수행하며, 다른 컴포넌트와 협력한다는 점에서 객체지향의 철학을 담고 있다!!


중요한 사실

객체지향은 말 그대로 지향이다 지향

Class 같은 키워드에 얽매이는 것이 아니라. 시스템이 각자의 역할을 가지고 부품(객체)들이 소통을 하면서 기능을 만들어가는지가 가장 중요하다!!!!

엄격하게 있는 기술, 규칙이 아니다!!!!

지향하는 설계 철학

프로그래밍 패러다임


1장. 협력하는 객체들의 공동체

핵심 키워드 : 협력, 책임, 역할

중요한 사실 : 이 책에서는 객체지향이 현실을 모방한 것이 아니라, 새로운 세계를 창조하는 것이다 라고 말한다.

이는 위에서 “현실 세계 처럼 생각해보자!”라고 말했던 것과 상충하는 말이다. 이게 이 책이 강조하고 있는 말인 것 같다.

수정 중...

profile
개발 블로그 맞음.

0개의 댓글