RAG

패스트캠퍼스 환급챌린지 47일차 : 테디노트의 RAG 비법노트 강의 후기

Sssadie 2025. 12. 28. 20:27
반응형

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.

 

객체지향 프로그래밍

객체지향 프로그래밍(Object-oriented Programming)

  • '객체' 개념을 기반으로 한 프로그래밍 패러다임
  • 객체는 속성(필드, 데이터)과 기능(프로시저, 메소드) 으로 구성

왜 객체지향 프로그래밍인가?

  • 인간의 인지 방식과 가장 유사
  • 실제 세계를 모델링 하는데에 적합
  • 개념의 정의와 재사용이 자유로움
  • 유지보수의 용이성

객체와 클래스

객체(Object)

  • 변수와 함수, 자료구조의 조합
  • 현실 세계의 개념, 사물을 프로그램에서 모델링 한 것 또는 추상적인 개념
  • 속성(데이터)과 기능(동작)을 가짐
  • 객체는 변수화 할 수 있음 → 인스턴스
  • 쇼핑몰에서 판매하는 상품 하나 하나가 객체
  • 상품 하나마다 별개의 속성을 가짐
  • 모든 상품이 가지는 속성의 종류는 동일함
  • 상품마다 수행할 수 있는 기능이 존재
  • 객체에 정의되지 않은 기능은 할 수 없음(상품에 로그인하기, ...)

 

클래스(Class)

  • 객체를 생성하기 위한 프로그램 코드 템플릿
  • 객체의 초기 상태값과 기능에 대한 구현을 제공
  • 객체를 만들기 위한 설계도(개념의 정의)
  • 객체의 속성과 기능을 정의
  • 하나의 클래스는 여러 개의 인스턴스를 정의하는 데에 사용됨

객체와 클래스

  • 클래스는 객체를 생성하기 위한 설계도
  • 클래스로부터 생성된 객체들은 각각 고유한 속성을 가질 수 있음
  • 한 클래스의 인스턴스에 가해진 변경은 다른 인스턴스에 영향을 미치지 않음
  • 클래스에 정의된 기능이 변경되면, 해당 클래스 인스턴스의 해당 기능이 변경됨
class Person:
    def hello(self):
    print("Hello!")

 

클래스 정의하기

  • class {class_name} :  로 클래스의 정의 시작
  • 들여쓰기(indent)로 기존의 코드와 구분
  • 인스턴스의 기능(메소드) 정의
    - 메소드 정의 시 첫 번째 파라미터는 반드시 self
       *self : 이 메소드를 호출한 객체 자신을 의미

생성자(init)

class Person:
    def __init__(self, name):
        self.name = name
  • 객체 생성 시 자동 실행
  • 객체의 초기 상태 정의

객체지향의 4대 특징

  • 캡슐화 : 내부 구현 숨기기
  • 추상화 : 중요한 것만 모델링
  • 상속 : 기존 클래스 재사용
  • 다형성 : 같은 이름, 다른 동작
  •  

함수와 객체지향 사고의 차이를 따져보자면, 함수는 '무엇을 할까?' 라면 객체는 '누가 이 일을 할까?'라고 할 수 있어요. 처음 이 내용을 접했을 때는 막연하게 느껴졌지만, 객체지향을 배우면서 차이가 점점 명확해졌어요. 함수 중심의 사고에서는 문제를 기능 단위로 나눕니다. 입력을 받아 어떤 처리를 하고 결과를 반환하는지가 핵심이죠. 그래서 코드의 흐름은 자연스럽게 작업이 순서 중심으로 구성됩니다. 비교적 단순한 프로그램이나 계산 위주의 로직에서는 함수 중심 구조만으로 충분히 깔끔한 코드를 만들 수 있습니다. 

반면, 객체지향 사고에서는 '이 기능을 수행하는 주체는 누구인가?', '이 데이터와 이 동작은 같은 책임을 가지는가?'와 같이 함수에서와는 다른 시선을 갖게 되죠. 즉, 기능을 나열하기보다 역할과 책임을 가진 객체를 정의하는 것이 우선이 됩니다. 그 결과, 코드는 '무엇을 할지'가 아니라 '누가 어떤 책임을 갖고 행동하는지'를 중심으로 구성되죠.

예를 들어, 쇼핑몰 시스템을 생각해봅시다. 함수 중심 사고에서는 결제 함수, 상품 조회 함수, 할인 계산 함수처럼 기능 목록을 먼저 떠올리게 되죠. 반면, 객체지향 사고에서는 상품, 사용자, 주문과 같이 객체를 정의하고, 각각이 어떤 행동을 해야 하는지를 고민하게 됩니다. 결제는 '결제함수'가 하는 일이 아니라, '주문 객체'가 수행해야 할 책임이 되는 겁니다. 이 차이는 프로그램 규모가 커질수록 더욱 크게 드러납니다. 기능 중심으로만 코드를 확장하다보면, 서로 얽힌 함수들이 늘어나고 점점 수정이 어려워지죠. 반대로 객체지향 구조에서는 책임이 명확하게 분리되어 있기 때문에, 변경 사항이 발생해도 영향을 받는 부분을 비교적 쉽게 예측할 수 있어요. 유지보수와 확장성 측면에서 객체지향이 강점을 갖는 이유도 여기에 있다고 생각해요. 

 함수, 모듈, 객체지향 등등 들어는 봤지만 제대로 정리하는건 처음인 것 같아요. 머릿속에서 뒤죽박죽 헷갈리지 않도록 잘 정리하고 기억해둬야겠어요. 분명 배웠던 내용들인데 시간 지나고 들으면 또 새로운 이 상황....다신 마주하고 싶지 않네요. 명확한 기억으로 남겨두고 코드 짤 때 활용해야겠어요.

 

 

커리어 성장을 위한 최고의 실무교육 아카데미 | 패스트캠퍼스

성인 교육 서비스 기업, 패스트캠퍼스는 개인과 조직의 실질적인 '업(業)'의 성장을 돕고자 모든 종류의 교육 콘텐츠 서비스를 제공하는 대한민국 No. 1 교육 서비스 회사입니다.

fastcampus.co.kr

 

 

반응형