FRONTMANFRONTMAN
  • 태그
  • 방명록
  • 글쓰기
  • 관리자
  • HOME
  • 태그
  • 방명록
Python 객체지향 프로그래밍 (OOP)
hahekaku
Python 객체지향 프로그래밍 (OOP)Language/Python2023. 10. 24. 17:17@hahekaku
Table of Contents

객체지향 프로그래밍(OOP)란?

객체지향 프로그래밍은 프로그램을 객체(object)라는 기본 단위로 구성하여 설계 및 구현하는 프로그래밍 패러다임입니다. 각 객체는 데이터(attribute)와 이를 조작하는 행동(method)으로 구성됩니다. 이를 통해 코드의 재사용성과 유지보수성을 높이고 복잡한 문제를 직관적으로 해결할 수 있습니다.


클래스와 객체

클래스(class)는 객체를 생성하기 위한 템플릿 또는 설계도입니다. 클래스를 기반으로 생성된 실체를 객체(object)라고 합니다.

클래스 정의 및 객체 생성 예제

class Dog:
    # 클래스 속성
    species = "Canis familiaris"

    # 생성자 메서드
    def __init__(self, name, age):
        self.name = name  # 인스턴스 속성
        self.age = age    # 인스턴스 속성

    # 인스턴스 메서드
    def bark(self):
        return f"{self.name}이(가) 멍멍 짖습니다!"

# 객체 생성
my_dog = Dog("바둑이", 3)

# 속성 접근
print(my_dog.name)  # 출력: 바둑이
print(my_dog.age)   # 출력: 3

# 메서드 호출
print(my_dog.bark())  # 출력: 바둑이가 멍멍 짖습니다!

생성자와 메서드 (__init__, self)

__init__은 객체가 생성될 때 자동으로 호출되는 생성자 메서드입니다. 생성자는 객체의 초기 상태를 설정하는 데 사용됩니다.

생성자의 역할

  • 인스턴스 속성을 초기화합니다.
  • 객체 생성과 동시에 원하는 속성을 설정할 수 있습니다.

self의 의미

  • self는 객체 자신의 참조를 나타냅니다.
  • self를 통해 클래스 내부에서 객체의 속성과 메서드에 접근합니다.

생성자와 메서드의 예제

class Book:
    def __init__(self, title, author, pages):
        self.title = title  # 책 제목
        self.author = author  # 저자 이름
        self.pages = pages  # 총 페이지 수

    def description(self):
        return f"'{self.title}' by {self.author}, {self.pages} pages"

# 객체 생성
my_book = Book("파이썬 프로그래밍", "홍길동", 350)

# 메서드 호출
print(my_book.description())  # 출력: '파이썬 프로그래밍' by 홍길동, 350 pages

상속과 다형성

상속(inheritance)은 기존 클래스의 속성과 메서드를 새로운 클래스가 물려받아 재사용하거나 확장할 수 있는 기능입니다.
다형성(polymorphism)은 같은 이름의 메서드가 객체의 타입에 따라 다르게 동작하는 것을 말합니다.

상속 예제

# 부모 클래스
class Animal:
    def __init__(self, name):
        self.name = name

    def speak(self):
        return "소리를 냅니다."

# 자식 클래스
class Dog(Animal):
    def speak(self):
        return f"{self.name}이(가) 멍멍 짖습니다!"

class Cat(Animal):
    def speak(self):
        return f"{self.name}이(가) 야옹합니다!"

# 객체 생성
dog = Dog("바둑이")
cat = Cat("나비")

print(dog.speak())  # 출력: 바둑이가 멍멍 짖습니다!
print(cat.speak())  # 출력: 나비가 야옹합니다!

캡슐화와 접근 제한자

캡슐화(encapsulation)는 객체의 속성과 메서드를 외부에서 직접 접근하지 못하도록 제한하고, 특정 인터페이스를 통해 접근하게 만드는 개념입니다.

접근 제한자의 종류

  • Public (public) : 기본 접근 수준으로, 어디서나 접근 가능합니다.
  • Protected (protected) : 클래스 내부와 하위 클래스에서만 접근 가능합니다. (_로 표시)
  • Private (private) : 클래스 내부에서만 접근 가능합니다. (__로 표시)

캡슐화 예제

class BankAccount:
    def __init__(self, account_number, balance):
        self.account_number = account_number  # public
        self._balance = balance  # protected

    def deposit(self, amount):
        if amount > 0:
            self._balance += amount
            return f"{amount}원이 입금되었습니다."
        return "잘못된 금액입니다."

    def withdraw(self, amount):
        if 0 < amount <= self._balance:
            self._balance -= amount
            return f"{amount}원이 출금되었습니다."
        return "잔액이 부족하거나 잘못된 금액입니다."

    def get_balance(self):
        return f"현재 잔액은 {self._balance}원입니다."

# 객체 생성
account = BankAccount("123-456-789", 100000)

# 메서드 사용
print(account.deposit(50000))  # 출력: 50000원이 입금되었습니다.
print(account.withdraw(30000))  # 출력: 30000원이 출금되었습니다.
print(account.get_balance())  # 출력: 현재 잔액은 120000원입니다.

참고

Python은 엄격한 접근 제한을 강제하지 않으며, protected나 private 속성에 접근은 가능합니다. 하지만 이러한 네이밍 컨벤션을 통해 사용자는 암묵적으로 접근을 제한하는 것이 권장됩니다.

 

'Language > Python' 카테고리의 다른 글

Python 예외 처리(Exception, try-except)  (0) 2023.10.26
Python 모듈(module)과 패키지(package)  (0) 2023.10.25
Python 파일 입출력 (파일 열기, 읽기와 쓰기)  (0) 2023.10.24
Python의 리스트 컴프리헨션(List Comprehension)  (0) 2023.10.23
Python 딕셔너리(Dictionary)와 집합(Set)  (0) 2023.10.22
Language/Python 추천 글
more
  • Python 예외 처리(Exception, try-except)
    Python 예외 처리(Exception, try-except)2023.10.26
  • Python 모듈(module)과 패키지(package)
    Python 모듈(module)과 패키지(package)2023.10.25
  • Python 파일 입출력 (파일 열기, 읽기와 쓰기)
    Python 파일 입출력 (파일 열기, 읽기와 쓰기)2023.10.24
  • Python의 리스트 컴프리헨션(List Comprehension)
    Python의 리스트 컴프리헨션(List Comprehension)2023.10.23
FRONTMAN

검색

250x250

방문자 수

Total
Today
Yesterday

카테고리

  • 분류 전체보기 (54)
    • Language (48)
      • JavaScript (15)
      • TypeScript (14)
      • Python (14)
      • Dart (5)
      • Java (0)
    • FE (6)
      • WEB (4)
      • React (0)
      • Flutter (1)
    • CS (0)
      • Algorithm (0)
      • Network (0)
    • DevOps (0)

공지사항

  • 전체보기

최근 글

인기 글

태그

  • nodejs
  • JavaScript
  • Python
  • Type
  • 웹
  • async
  • DART
  • frontend
  • await
  • Modules
  • npm
  • tuple
  • Flutter
  • Interface
  • Object
  • web
  • list
  • 자바스크립트
  • 타입
  • 타입스크립트
  • OOP
  • typeScript
  • js
  • function
  • CLASS
  • export
  • 파이썬
  • Import
  • inline frame
  • 리스트

최근 댓글

FRONTMAN :: hahekaku
CopyrightBluemivDesigned byBluemiv

티스토리툴바