1. 객체지향의 이해
2.. 클래스와 인스턴스
3. 객체지향의 활용
1. 객체지향의 이해
(1) 객체지향의 개념
- 객체와 객체 사이의 상호작용으로 프로그램을 구성하는 프로그래밍 패러다임을 의미한다.
- 프로그램을 유연하고 변경을 쉽게 만들어 대규모 소프트웨어 개발에 사용을 함.
[1] 객체지향 패러다임의 특징
- 추상화 : 공통의 속성이나 기능을 도출
- 캡슐화 : 데이터 구조와 데이터의 연산을 결합
- 상속 : 상위 개념의 특징이 하위 개념에 전달
- 다형성 : 유사 객체의 사용성을 그대로 유지
(2) 객체와 클래스
[1] 객체 정의
- 객체는 추상화와 캡슐화의 결과를 의미한다.
- 실세계의 사물에 대한 상태(데이터)와 연산(메소드)을 표현한 단위를 말한다.
- 멤버(데이터 필드, 메소드)는 클래스에 의해 결정이 된다.
[2] 클래스 정의
- 클래스는 객체를 만들어 내기 위한 설계도면으로 볼 수 있다.
- 쉽게 말해, 클래스의 여러 복사본들을 객체라고 볼 수 있음. 즉, 원본(설계도)으로 볼 수 있음.
- 클래스에서는 메소드와 초기자가 존재함.
[3] 메소드(method)
- 객체에 대한 행동(연산)을 정의
- 함수의 정의 및 사용 방법과 동일함.
- 클래스 내부에 함수가 있으면 그것을 메서드라고 부름.
[4] 초기자(initializer)
- 객체의 상태를 초기화하는 특수 메소드를 의미한다.
- 항상 __init__으로 명명함
- 자바에선 생성자로 볼 수 있음.
(3) 파이썬 객체 & 클래스 구문 형식
- 클래스 내부에 메소드들을 정의 할 수 있음. 이때, 메소드는 단순히 클래스 내부의 함수를 의미함.
class Calculator: # 클래스 정의
def add(self, a, b):
print(a + b)
def minus(self, a, b):
print(a - b)
calculator = Calculator() # 객체 생성
calculator.add(1, 2) # 생성 된 객체 메소드 호출
calculator = Calculator() # 또 다른 객체 생성
calculator.minus(2, 1) # 생성 된 객체 메소드 호출
- Calculator 클래스를 호출해서 메서드를 부르는 부분은
(4) 메소드의 정의
- 클래스 내부의 정의 되어있는 함수를 메소드라고 말한다.
[1] self 매개변수
- 해당 매개변수는 self 자기 자신 즉, 해당 클래스의 정보를 담고있다.
- self 매개변수 사용시에는 모든 메소드의 첫번째 매개변수로 써야한다.
- 객체 자신을 참조하여 클래스 정의에 포함된 멤버에 접근 시 사용한다.
class test:
def abc(self): # 함수 호출시 자동으로 self에 해당 클래스를 넘겨줌
self.age = 100
print(self.a)
test().abc()
- self는 여러 객체들이 있을때, 각각의 고유값을 저장할 수 있음.
(5) 초기자(생성자)
- 초기자는 객체를 생성하는 과정에서 매개변수로 값을 넣으면, __init__ 메서드(함수)가 호출이 되며 값을 초기화 할 수 있다.
- 사실상 생성자를 초기자라고 부른다. ( __init__ 메서드 임. )
class User:
def __init__(self, name, age):
self.name = name # 멤버 변수에 전달받은 값 저장
self.age = age
def introduce(self):
print(f"안녕하세요, 제 이름은 {self.name}이고 나이는 {self.age}살이에요.")
# 객체 생성하면서 초기자 자동 호출됨
user1 = User("이름", 28)
user1.introduce()
2. 데이터 필드 감추기
(1) 데이터 은닉(data hiding)
- 데이터 필드의 직접 변경을 방지하기 위해 사용자의 직접적 접근을 차단할 수 있음.
- pulbic과 다른 private 데이터 필드로 정의
- 클래스 내부에서만 접근이 가능하게 만들 수 있음.
- 앞 두 밑줄(__)로 정의 하면 된다.
- setter와 getter를 활용하여 값을 변경 할 수 있다. ( 그냥 단순히 내부에서 접근하는 함수이다. )
class User:
def __init__(self, name, age):
self.__name = name # 접근은 해당 클래스에서만 가능
self.__age = age
def get_name(self): # 가능하게 만들기 위해 getter를 활용
return self.__name
def get_age(self):
return self.__age
user = User("junbin", 20)
print(user.get_name())
print(user.get_age())
(2) 데이터 은닉 사용하는 이유
- 외부에서 직접 데이터를 수정하면, 객체 상태가 예상치 못하게 변경될 위험이 있음.
- 나중에 내부 로직을 바꿔도 외부 인터페이스(get, set 메서드)는 그대로 두면 되므로 유지보수가 쉬워짐.
- 변수마다 읽기 전용이나 쓰기 전용처럼 동작하게 만들 수 있음.
3. 정리
- 파이썬의 모든 것은 객체(Object) 이다.
num = 1
print(type(num)) # 결과 : <class 'int'>
# 즉, num = int(1) 형태인 것인데 생략이 된것이다.
- num = int(1) 과 num = 1 은 같은 형태이고, 파이썬이 내부적으로 저렇게 만들어 주는 것이다.
- 즉, 파이썬은 모든 것이 객체이다.
'공부 > ⚡Python' 카테고리의 다른 글
| [Python] import (0) | 2025.04.21 |
|---|---|
| [Python] 11강 - 모듈 (0) | 2025.04.21 |
| [Python] 9강 - 함수 (0) | 2025.04.17 |
| [Python] 파이썬 인터프리터(Interperter) 쉽게 이해하기 (1) | 2025.04.17 |
| [Python] 7강 - 반복 구조 (0) | 2025.04.17 |
