객체지향 프로그래밍
객체지향 프로그래밍(Object-Oriented Programming, OOP)은 소프트웨어를 설계하고 구현하는 데 사용되는 중요한 프로그래밍 패러다임 중 하나이다. 이 패러다임은 프로그램을 "객체"라고 불리는 독립적인 개체로 나누고, 이러한 객체들 간의 상호작용을 통해 프로그램을 구성하는 개발 방법론이다.
절차지향 프로그래밍
절차지향 프로그래밍은 프로그램을 작성할 때 일련의 절차 또는 단계에 따라 코드를 구성하는 방식이다. 이러한 단계나 절차들은 주로 함수나 서브루틴으로 나누어져 있으며, 각각의 함수는 특정한 작업을 수행한다. 주로 '입력 - 처리 - 출력'의 순차적인 절차를 따르며, 코드를 위에서부터 아래로 실행하면서 데이터를 처리하는 방식으로 동작합니다. C 언어와 같은 프로그래밍 언어는 주로 절차지향적인 스타일을 따른다.
함수형 프로그래밍
함수형 프로그래밍은 함수(function)를 최우선으로 취급하여 프로그램을 작성하는 패러다임이다. 함수는 다른 함수에 전달되거나 반환될 수 있으며, 함수들 간의 조합을 통해 복잡한 작업을 수행한다. 상태를 변경하지 않고 데이터를 처리하고, 부작용(side effect)을 최소화하려는 노력이 있다. 함수형 언어로는 Haskell, Lisp, Clojure 등이 있으며, 몇몇 다른 언어들도 함수형 프로그래밍을 지원한다. 함수형 프로그래밍은 병렬처리와 상태 관리에 용이하며, 함수들을 조합하여 간결하고 안정적인 코드를 작성하는데 도움이 된다.
클래스
- 객체(Object): 객체는 현실 세계에서의 실제 개체나 추상적인 개념을 모델링한 것이다.
예를 들어 자동차, 사람, 은행 계좌 등이 객체가 될 수 있다. 객체는 데이터(속성, 상태)와 메서드(동작, 함수)로 구성된다.
- 클래스(Class): 클래스는 객체를 만들기 위한 템플릿 또는 설계도이다. 클래스는 객체의 공통 속성과 동작을 정의, 객체를 생성하는데 사용된다.
- 인스턴스(instance): 클래스를 기반으로 실제로 생성된 객체를 인스턴스라고 한다. 클래스는 여러 인스턴스를 생성하고, 각 인스턴스는 독립적인 데이터와 메서드를 가진다.
class 클래스이름:
# 클래스 속성(멤버 변수) 정의
속성1 = 초기값1
속성2 = 초기값2
# 생성자 메서드 (생략 가능)
def __init__(self, 매개변수1, 매개변수2, ...):
# 인스턴스 속성 초기화
self.속성1 = 매개변수1
self.속성2 = 매개변수2
# 메서드(멤버 함수) 정의
def 메서드1(self, 매개변수1, 매개변수2, ...):
# 메서드 동작 정의
pass
def 메서드2(self, 매개변수1, 매개변수2, ...):
# 메서드 동작 정의
pass
- 객체(인스턴스) 생성
class Dog:
pass
Rucy = Dog()
print(Rucy)
print(type(Rucy))
<__main__.Dog object at 0x7bcc579c3970>
<class '__main__.Dog'>
PPomi = Dog()
print(PPomi)
print(type(PPomi))
<__main__.Dog object at 0x7bcc8c3234f0>
<class '__main__.Dog'>
- 객체 속성 초기화
class Dog:
name = ''
age = 0
family = ''
Rucy = Dog()
print(Rucy.name)
print(Rucy.age)
print(Rucy.family)
0
Rucy.name = '루시'
Rucy.age = 14
Rucy.family = '포메'
print(Rucy.name)
print(Rucy.age)
print(Rucy.family)
루시
14
포메
PPomi = Dog()
PPomi.name = '뽀미'
PPomi.age = 7
PPomi.family = '폼피츠'
print(PPomi.name)
print(PPomi.age)
print(PPomi.family)
뽀미
7
폼피츠
- 메서드의 사용
Rucy = Dog()
Rucy.eat()
class Dog:
name = ''
age = 0
family = ''
def eat(self):
print('사료를 먹습니다!')
Rucy = Dog()
Rucy.eat()
사료를 먹습니다!
PPomi = Dog()
PPomi.eat()
사료를 먹습니다!
생성자
: 클래스의 인스턴스가 생성될 때 자동으로 호출되는 특별한 메서드,
생성자는 객체의 초기화를 담당하며, 객체가 생성될 때 필요한 속성을 초기화하고 설정하는 역할을 한다.
파이썬에서 생성자 메서드는 init이라고 이름이 정해져 있음.
class 클래스이름 :
def __init__(self, 매개변수1, 매개변수2):
self.속성1 = 매개변수1
self.속성2 = 매개변수2
class Dog:
def __init__(self):
self.name = ''
self.age = 0
family = '포메'
self.temp = family
Rucy = Dog()
print(Rucy)
print(Rucy.name)
print(Rucy.age)
#print(Rucy.family)
print(Rucy.temp)
0
포메
class Dog:
def __init__(self, name, age, family='족보있음');
self.name = name
self.age = age
self.family = family
Rucy = Dog('루시', 14, '포메')
print(Rucy.name)
print(Rucy.age)
print(Rucy.family)
루시
14
포메
PPomi = Dog('뽀미', 7)
print(PPomi.name)
print(PPomi.age)
print(PPomi.family)
뽀미
7
족보있음
메서드
: 클래스 내부에 정의되어 연결된 함수,
해당 클래스의 모든 객체에서 공유되며, 객체의 동작을 정의하거나 특정 작업을 수행하는 데 사용된다.
- 메서드 정의
class Counter:
# 생성자
def __init__(self):
self.num = 0
# 메서드
def increment(self):
self.num += 1
def current_value(self):
return self.num
def decrement(self):
self.num -= 1
def reset(self):
self.num = 0
KBbank = Counter()
print(KBbank.num)
print(KBbank.current_value())
KBbank.increment()
KBbank.increment()
KBbank.increment()
print(KBbank.current_value())
KBbank.decrement()
print(KBbank.current_value())
0
0
3
2
HanaBank = Counter()
print(HanaBank.current_value())
HanaBank.increment()
HanaBank.increment()
HanaBank.increment()
HanaBank.increment()
HanaBank.increment()
print(HanaBank.current_value())
0
5
print(KBbank.current_value())
2
HanaBank.reset()
print(HanaBank.current_value())
0
- 메서드 타입
인스턴스 메서드(Instance Method): 객체의 상태를 조작하거나 객체에 특정 작업을 수행하는 메서드이다. 대부분의 클래스 메서드는 인스턴스 메서드이다. 위의 예제에서 보여진 init 메서드도 인스턴스 메서드이다.
클래스 메서드(Class Method): 클래스 레벨에서 동작하며, 모든 인스턴스가 공유하는 메서드이다. 클래스 메서드는 @classmethod 데코레이터를 사용하며 정의하며, 첫 번째 매개변수로 cls를 사용한다.
정적 메서드(Static Method): 특정 클래스나 인스턴스와 관련이 없는 메서드로, 클래스 내부에 정의되어 있지만 클래스나 인스턴스와 독립적으로 호출될 수 있다. 정적 메서드는 @staticmethod 데코레이터를 사용하여 정의한다.
class Math:
def add(self, x, y):
return x + y
def multiply(self, x, y):
return x * y
math = Math()
result1 = math.add(10, 3)
print(result1)
result2 = math.multiply(10, 3)
print(result2)
class Math:
str1 = 'Hello! '
@classmethod
def add(cls, x, y):
return x + y
@classmethod
def multiply(cls, x, y):
return x * y
@classmethod
def hello(cls, name):
return cls.str1 + name
print(Math.add(10, 3))
print(Math.multiply(10, 3))
print(Math.hello('김사과'))
13
30
Hello! 김사과
class Math:
def __init__(self, x, y):
self.x = x
self.y = y
def add(self):
return self.x + self.y
def multiply(self):
return self.x * self.y
@staticmethod
def subtract(x, y):
return x + y
math = Math(10, 3)
print(math.add())
print(math.multiply())
#print(math.subtract()) #TypeError: Math.subtract() missing 2 required positional arguments: 'x' and 'y'
print(math.subtract(10, 3))
13
30
13
'코딩 > 파이썬' 카테고리의 다른 글
파이썬 과제 (3). 로또 예측 프로그램 (0) | 2024.03.19 |
---|---|
파이썬 과제 (2). 가위, 바위, 보 게임 만들기 (0) | 2024.03.19 |
콜백함수와 람다함수 (0) | 2024.03.19 |
변수의 범위 (0) | 2024.03.19 |
사용자 정의 함수 (0) | 2024.03.18 |