본문 바로가기
Python/07. 객체와 라이브러리

01. 객체와 클래스

by gamdong2 2024. 7. 27.
절차지향 프로그래밍(Procedural Programming)과 객체지향 프로그래밍(Object-Oriented Programming, OOP)은 소프트웨어 개발에서 사용하는 두 가지 주요 프로그래밍 패러다임임

 

1. 절차지향 프로그래밍

프로그램을 절차나 함수의 집합으로 구성하는 방식

 

1) 특징

 

구조적 접근

    - 프로그램을 함수나 절차로 나누어 단계별로 실행
    - 함수들은 주로 입력을 받아 출력을 반환하는 방식으로 동작
② 순차적 실행
    - 코드가 순차적으로 실행되며, 절차나 함수가 호출됨에 따라 프로그램의 흐름이 제어됨
    - 전역 변수와 지역 변수를 사용하여 데이터를 관리
③ 데이터와 함수의 분리
    - 데이터와 이를 처리하는 함수가 분리되어 있음
    - 함수는 데이터를 매개변수로 받아 처리함

④ 주요 언어
    - C, Pascal, Fortran

 

2. 객체지향 프로그래밍

프로그램을 객체의 집합으로 구성하는 방식. 객체는 데이터와 그 데이터를 처리하는 함수를 함께 포함함

 

1) 객체란?

  • 객체 = object = instance
  • 선언된 class를 기반으로 만들어진 실체
  • 하나의 class 설계도를 기반으로 수 많은 객체 생성이 가능

2) 객체지향 프로그래밍 맛보기

[스마트폰 생산 과정]

1. 스마트폰 설계도(class) 작성
2. 설계도를 기반으로 '스마트폰1, 스마트폰2,...'의 객체(object, instance) 생성
3. '스마트폰1'에 여러 기능의 앱들('스마트폰1' 객체의 변수(attribute), 메서드(method)) 설치
4. 같은 설계도로 생성된 객체 '스마트폰2'와는 다른 종류의 앱들('스마트폰2' 객체의 변수(attribute), 메서드(method))이 설치됨

 

3) 객체지향 프로그램 작성

1. class 설계 (attribute, method 구성)
2. class를 기반으로 필요한 객체 생성
3. 해당 객체의 개별 attribute, method를 조작하여 프로그램 수행

"설계도(class)를 기반으로 객체를 여러개 생성 가능, 각 객체는 별도로 동작(기능)할 수 있음"
# [1. class 선언]
# (class 선언 ⊃ attribute, method 선언) -> 추후 클래스 호출하여 객체(quad1, quad2, ...) 생성
class Quad:
    height = 0  # attribute 선언 (attribute 에 할당된 값 : 초기값)
    width = 0  # attribute 선언
    color = ""  # attribute 선언
    
    # method 선언  # 인자 자리에 첫번째 인자로써 'self' 키워드 무조건 기입(인자가 없을 때에도); but 추후 해당 메서드 호출시 인자 없을 경우 그냥 괄호() 만 기입
    def get_area(self):  
        return self.height * self.width  # 해당 method가 호출됐을 때 실행할 코드
        
# [2-1. 객체1 생성]
quad1 = Quad()  # 클래스 호출하여 객체(object=instance) 생성
quad1.height = 4  # [3-1. 객체 기능(attribute) 호출]
quad1.width = 3
quad1.color = "red"
quad1.get_area()  # [3-2. 객체 기능(method) 호출]

# [2-2. 객체2 생성]
# 위에서 선언한 quad1의 attribute 값들은 새로운 객체(quad2)에 아무 영향x
quad2 = Quad()
quad2.height = 5  
quad2.width = 5
quad2.color = "blue"
quad2.get_area()
12
25

 

4) 특징

 

객체(Object)

    - 객체는 데이터(속성, attribute)와 메서드(함수, method)를 포함하는 독립적인 단위
    - 객체는 클래스의 인스턴스이며, 클래스는 객체를 정의하는 설계도
② 캡슐화(Encapsulation)
    - 데이터와 메서드를 하나의 객체로 묶어 외부에서 직접 접근하지 못하도록 보호
    - 객체 내부의 구현을 숨기고 인터페이스만을 외부에 제공
③ 상속(Inheritance)
    - 클래스는 다른 클래스의 속성과 메서드를 상속받아 재사용할 수 있음
    - 코드의 재사용성을 높이고, 계층적 관계를 형성함
④ 다형성(Polymorphism)
    - 동일한 이름의 메서드가 다른 클래스에서 다르게 동작할 수 있음
    - 이를 통해 코드의 유연성과 확장성을 높일 수 있음
⑤ 추상화(Abstraction)
    - 복잡한 시스템을 단순화하여 중요한 부분만 표현
    - 객체지향 프로그래밍에서는 클래스와 객체를 통해 현실 세계의 개념을 모델링
⑥ 주요 언어
    - Java, C++, Python, C#

 

 

 

<<절차지향 vs 객체지향 프로그래밍 비교>>

  절차지향 객체지향
코드 구조 함수, 절차 객체, 클래스
데이터 관리  전역 변수, 지역 변수를 통해 관리 객체 내부의 속성으로 관리
재사용성 코드 재사용X, 함수 독립성X 코드 재사용O (by 상속, 다형성)
유연성 코드 변경 시 전체 코드에 영향  코드 변경에 유연하게 대응
(by 캡슐화, 추상화)

 

'Python > 07. 객체와 라이브러리' 카테고리의 다른 글

02. 파이썬 라이브러리  (0) 2024.07.27