Python Oop 1

이남경·2024년 1월 24일
0

SSAFY 11기

목록 보기
10/67
post-thumbnail

객체 지향 프로그래밍


절차 지향 프로그래밍 (Procedural Programming)

프로그램을 '데이터'와 '절차'(순서가 매우 중요하다)로 구성하는 방식의 프로그래밍 패러다임

절차 지향 프로그래밍 특징

  • “데이터”와 해당 데이터를 처리하는 “함수(절차)”가 분리되어 있으며, 함수 호출의 흐름이 중요

  • 코드의 순차적인 흐름과 함수 호출에 의해 프로그램이 진행

  • 실제로 실행되는 내용이 무엇이 무엇인가가 중요

  • 데이터를 다시 재사용하거나 하기보다는 처음부터 끝까지 실행되는 결과물이 중요한 방식

image

소프트웨어 위기(Software Crisis)

  • 하드웨어의 발전으로 컴퓨터 계산용량과 문제의 복잡성이 급격히 증가함에 따라 소프트웨어에 발생한 충격

image

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

  • 데이터와 해당 데이터를 조작하는 메서드를 하나의 객체로 묶어 관리하는 방식의 프로그래밍 패러다임

절차 지향 vs 객체 지향

  • 절차 지향

    • 데이터와 해당 데이터를 처리하는 함수(절차)가 분리

    • 함수 호출의 흐름이 중요

      image

  • 객체 지향

    • 데이터와 해당 데이터를 처리하는 메서드(메시지)를 하나의 객체(클래스)로 묶음

    • 객체 간 상호작용과 메시지 전달이 중요

      image

객체


개요

클래스 (Class)

  • 파이썬에서 타입을 표현하는 방법

  • 객체를 생성하기 위한 설계도

  • 데이터와 기능을 함께 묶는 방법을 제공

image

객체 (Object)

클래스에서 정의한 것을 토대로 메모리에 할당된 것

파이썬의 모든 것은 객체이다.

‘속성’‘행동’으로 구성된 모든 것

객체 예시

image

  • 클래스로 만든 객체를 인스턴스 라고도 함

  • 클래스를 설계도 혹은 청사진 이라고도 부른다.

  • 인스턴스를 말하고자 할 땐 무조건 클래스의 인스턴트다 라고 말해야 한다.

  • 클래스도 객체이고 인스턴스도 객체이다. → 파이썬의 모든 것은 객체이다.

image

클래스와 객체

  • 변수 name의 타입은 str 클래스다.

  • 변수 name은 str 클래스의 인스턴스이다.

  • 우리가 사용해왔던 데이터 타입은 사실 모두 클래스였다.

    name = 'Alice'
    
    print(type(name))  # <class 'str'>
  • 결국 문자열 타입의 변수는 str 클래스로 만든 인스턴스다.

인스턴스와 메서드

하나의 객체(object)는 특정 타입의 인스턴스(instance)이다.

  • 123, 900, 5는 모두 int의 인스턴스

  • 'hello', 'bye'는 모두 string의 인스턴스

  • [232, 89, 1], []은 모두 list의 인스턴스

객체(object)의 특징

객체는 속성과 기능의 결합이다!

  • 타입(type) : 어떤 연산자(operator)와 조작(method)이 가능한가?

  • 속성(attribute) : 어떤 상태(데이터)를 가지는가?

  • 조작법(method) : 어떤 행위(함수)를 할 수 있는가?

image

클래스


개요

클래스 (Class)

  • 파이썬에서 타입을 표현하는 방법

  • 객체를 생성하기 위한 설계도

  • 데이터와 기능을 함께 묶는 방법을 제공

인스턴스와 클래스 간의 이름 공간(namespace)

  • 클래스를 정의하면, 클래스와 해당하는 이름 공간 생성

  • 인스턴스를 만들면, 인스턴스 객체가 생성되고 독립적인 이름 공간 생성

  • 인스턴스에서 특정 속성에 접근하면, 인스턴스 -> 클래스 순으로 탐색

독립적인 이름공간을 가지는 이점

  • 각 인스턴스는 독립적인 메모리 공간을 가지며,
    클래스와 다른 인스턴스 간에는 서로의 데이터나 상태에 직접적인 접근이 불가능

  • 객체 지향 프로그래밍의 중요한 특성 중 하나로, 클래스와 인스턴스를 모듈화하고 각각의 객체가 독립적으로 동작하도록 보장

  • 이를 통해 클래스와 인스턴스는 다른 객체들과의 상호작용에서 서로 충돌이나 영향을 주지 않으면서 독립적으로 동작할 수 있음

코드의 가독성, 유지보수성, 재사용성을 높이는데 도움을 줌

인스턴스 변수와 클래스 변수


클래스 변수 활용

  • 가수가 몇 명인지 확인하고 싶다면?

    • 인스턴스가 생성 될 때마다 클래스 변수가 늘어나도록 설정할 수 있음

클래스 변수와 인스턴스 변수

  • 클래스 변수를 변경할 때는 항상 클래스.클래스변수 형식으로 변경

메서드


개요

메서드 종류

  • 인스턴스 메서드

  • 클래스 메서드

  • 정적 메서드

image

인스턴스 메서드

인스턴스 메서드 (instance method)

  • 클래스로부터 생성된 각 인스턴스에서 호출할 수 있는 메서드

  • 인스턴스의 상태를 조작하거나 동작을 수행

인스턴스 메서드 구조

  • 클래스 내부에 정의되는 메서드의 기본

  • 반드시 첫 번째 매개변수로 인스턴스 자신(self)을 전달받음

클래스 메서드


클래스 메서드 (class method)

클래스가 호출하는 메서드

클래스 변수를 조작하거나 클래스 레벨의 동작을 수행

스태틱 메서드

스태틱(정적) 메서드 (static method)

클래스와 인스턴스와 상관없이 독립적으로 동작하는 메서드

주로 클래스와 관련이 있지만 인스턴스와 상호작용이 필요하지 않은 경우에 사용

스태틱 메서드 구조

  • @staticmethod 데코레이터를 사용하여 정의

  • 호출 시 필수적으로 작성해야 할 매개변수가 없음

  • 즉, 객체 상태나 클래스 상태를 수정할 수 없으며 단지 기능(행동)만을 위한 메서드로 사용

메서드 정리

  • 인스턴스 메서드

    • 인스턴스의 상태를 변경하거나, 해당 인스턴스의 특정 동작을 수행
  • 클래스 메서드

    • 인스턴스의 상태에 의존하지 않는 기능을 정의
    • 클래스 변수를 조작하거나 클래스 레벨의 동작을 수행
  • 스태틱 메서드

    • 클래스 및 인스턴스와 관련이 없는 일반적인 기능을 수행

각자의 역할

  • 클래스가 사용해야 할 것

    • 클래스 메서드
    • 스태틱 메서드
  • 인스턴스가 사용해야 할 것

    • 인스턴스 메서드

클래스가 할 수 있는 것

  • 클래스는 모든 메서드를 호출 할 수 있음

  • 하지만 클래스는 클래스 메서드와 스태틱 메서드만 사용하도록 한다

인스턴스가 할 수 있는 것

  • 인스턴스는 모든 메서드를 호출 할 수 있음

  • 하지만 인스턴스는 인스턴스 메서드만 사용하도록 한다

할 수 있다 != 써도 된다

각자의 메서드는 OOP 패러다임에 따라 명확한 목적에 따라 설계된 것이기 때문에 클래스와 인스턴스 각각 올바른 메서드만 사용하도록 해야 한다.

참고


매직 메서드

  • 특별한 인스턴스 메서드

  • 특정 상황에 자동으로 호출되는 메서드

  • Double underscore(__)가 있는 메서드는 특수한 동작을 위해 만들어진 메서드

    - 스페셜 메서드 혹은 매직 메서드라고 불림

0개의 댓글

관련 채용 정보