2026. 5. 15. 06:11ㆍAI/Python
프로그래밍 방법론은 프로그램을 개발하는 접근 방식이나 철학이다
프로젝트의 규모, 요구사항 개발 팀의 특성에 따라 적합한 방법론이 달라지므로
각 방법론의 특징과 장단점을 이해해보자.
절차적 프로그래밍 (Procedual Programming)
절차를 중시하는 방식으로, 작업을 순서대로 실행하도록 프로그램을 구성한다.
코드가 명령문으로 이루어져 있고 작업 순서가 중요하다.
변수와 함수가 함께 사용되고, 함수를 통해 프로그램의 기능을 분리하고 코드 중복을 줄인다.
대표적으로 C언어가 절차적 프로그래밍을 사용하고 있다.
But 설계적인 측면으로 좋지 않고, 협업하기가 힘든 단점이 있다.
객체 지향 프로그래밍 (Object-Oriented Programming)
객체라는 개념을 사용해 프로그램을 구성하는데, 객체는 데이터(속성, 명사)와 함수(메소드, 동사)를 하나의 단위로 묶은 것이다.
예를 들어 강아지를 묘사할 때 명사로써는 강아지 이름, 강아지 종, 눈의 갯수 등이 있을 수 있겠다.
동사로써는 짖다, 달린다, 먹는다, 잔다 등으로 표현할 수 있겠다.
어떤 모양을 머릿속으로 떠올릴 수 있다면, 하나의 객체(Object)로 인식될 수 있다.
객체라고 표현되는 것들을 프로그래밍 하는 것으로 이해하자.
클래스라는 틀을 이용해 객체를 정의하고, 이를 통해 여러 개의 객체를 생성할 수 있다.
나온 배경을 생각해보자면, 여러 사람들이 하나의 프로그램을 만들 때 조각조각 내서 만들어 협업하기에 유리하다.
그래서 캡슐화, 상속, 다형성 등의 특징을 활용해 코드를 재사용하고 확장할 수 있다.
함수형 프로그래밍 (Functional Programming)
함수를 중심으로 프로그래밍을 구성하는 방법으로, 수학적인 함수 개념에 기초하고 있으며
코드가 간결하고 직관적이다. 예를 들어 map, filter, reduce 등의 함수나 재귀를 주로 사용하여
데이터 처리를 간결하게 수행한다.
map (.....).filter(.....)
클래스 (Class)
클래스는 객체지향 프로그래밍에서 데이터(속성)와 기능(메소드)를 하나로 묶어 객체로 만들기 위한 설계도이다.
클래스를 정의하면 그 구조를 기반으로 여러 개의 객체(인스턴스, 메모리에 올라감)를 생성할 수 있으며
각 객체는 동일한 구조를 가지면서도 서로 다른 값을 가질 수 있다.
class 클래스 이름:
# 클래스 속성 (멤버 변수) 정의
속성1 = 초기값
속성2 = 초기값
def __init__(self, 매개변수1, 매개변수2):
# 인스턴스 속성 초기화
self.속성1 = 매개변수1
self.속성2 = 매개변수2
def 메서드1(self, 매개변수1, 매개변수2):
# 메소드 동작 정의
객체 (인스턴스) 생성
클래스를 정의한 후에는 이를 기반으로 객체(인스턴스)를 생성할 수 있다.
class Fruit:
pass # 내용이 없는 블록
apple = Fruit() # 객체를 만듬, 메모리가 힙 영역에 올라감
객체와 인스턴스
객체와 인스턴스는 거의 같은 의미로 사용되나, 관점에 따라 구분된다.
객체는 메모리에 생성된 모든 실체를 의미하는 포괄적은 개념으로 Python에서 리스트, 함수, 클래스 등 모든 값이 객체이다.
반면 인스턴스는 특정 클래스에 의해 생성된 객체를 가리키는 관계 중심의 용어로써 "어떤 클래스의 인스턴스다" 라고 표현한다.
즉 모든 인스턴스는 객체이나, 모든 객체가 특정 클래스의 인스턴스라고 강조해서 부르는 것은 아니다.
인스턴스라는 용어는 주로 클래스와의 관계를 설명할 때 사용된다.
생성자
클래스의 인스턴스가 생성될 때 자동으로 호출되는 특별한 메소드이다.
객체의 초기화를 담당하며, 객체가 생성될 때 필요한 속성을 초기화하고 설정한다.
__init__라고 이름이 정해져 있다.
속성은 self를 사용하여 접근하고 설정하며, 객체가 생성될 때마다 다른 값을 가질 수 있다.
인스턴스 변수
각 인스턴스(객체)마다 별도로 생성되는 변수로, 객체를 만들 때마다 self 키워드를 통해
생성자에서 정의되고, 각 객체가 고유한 값을 따로 저장한다.
인스턴스 변수는 인스턴스명으로만 접근 가능하고, 다른 인스턴스에 영향을 주지 않고
자신만의 데이터를 가질 수 있어 객체마다 다른 속성값을 저장할 때 사용된다.
메서드
클래스 내부에 정의된 함수로, 객체(인스턴스)나 클래스와 관련된 동작(행동)을 수행하는 기능이다.
Python에서는 메서드의 종류에 따라 self를 사용하는 인스턴스 메서드, cls 사용하는 클래스 메서드,
별도의 참조 없이 독립적으로 동작하는 정적 메서드로 나뉜다.
메서드는 단순한 함수와 달리 특정 객체와 클래스와 연결되어 동작하며
객체의 상태(속성)을 읽거나 변경하는 역할을 한다.
class Fruit:
# 클래스 변수 (모든 공통 변수)
tax_rate = 0.1
def __init__(self, name, quantity):
self.name = name
self.quantity = quantity
self.price = price
# 인스턴스 메서드
def print_info(self):
print(f"과일 이름: {self.name}")
print(f"수량: {self.quantity}")
# 클래스 메서드
@classmethod
def set_tax_rate(cls, rate):
cls.tax_rate = rate
# 정적 메소드
@staticmethod
def calculate_discount(price, discount_rate):
return price * (1 - discount_rate)
fruit = Fruit("과일", 10, 15000)
fruit.print_info()
discounted = Fruit.calculate_discount(fruit.price(), 0.1)
Fruit.set_tax_rate(0.5)
데코레이터
기존 함수나 메소드를 수정하지 않고, 그 기능을 감싸서 추가 동작을 붙여주는 기능으로
실행 전후에 로그를 출력하거나 권한 체크, 시간 측정 등의 공통 기능을 쉽게 재사용할 수 있게 해준다.
내부적으로는 함수를 인자로 받아 새로운 함수를 반환하는 구조로 동작한다.
@데코레이터이름 형태로 사용하면 해당 함수가 자동적으로 데코레이터에 전달되어 기능이 확장된다.
클래스 변수
클래스에 속하는 변수로 클래스가 생성될 때 정의되며 그 클래스로 만들어진 모든 인스턴스(객체)가 공유한다.
클래스명으로 직접 접근하거나 인스턴스명으로 접근할 수 있지만
모든 인스턴스가 같은 메모리 공간의 값을 참조하므로, 한 인스턴스에서 값을 변경하면
다른 인스턴스에서도 변경된 값을 볼 수 있다.
주로 전체 객체에 공통적인 속성을 저장할 때 사용한다.
'AI > Python' 카테고리의 다른 글
| Python의 기본 - 예외 처리 (10) (0) | 2026.05.23 |
|---|---|
| Python의 기본 - 객체 지향 프로그래밍의 패러다임 (9) (0) | 2026.05.17 |
| Python의 기본 - 사용자 정의 함수 (7) (0) | 2026.05.14 |
| Python의 기본 - 제어문 (6) (0) | 2026.05.14 |
| Python의 기본 - 튜플, 세트, 딕셔너리 (5) (0) | 2026.04.29 |