본문 바로가기
sbs 아카데미 학원 수업/파이썬 수업 메모 (SBS 아카데미 학원)

파이썬 수업 메모 7일차 - 클래스, 상속, try-expect

by demianpark127 2024. 12. 7.
SMALL

https://colab.research.google.com/

 

Google Colab Notebook

Run, share, and edit Python notebooks

colab.research.google.com

 

 


클래스

파이썬의 클래스는 **객체 지향 프로그래밍(OOP)**의 핵심 개념으로, 현실 세계의 사물을 소프트웨어적으로 표현하는 구조입니다. 클래스는 같은 속성과 행동을 가진 객체들을 묶어서 관리하기 위한 설계도나 청사진 역할을 합니다. 다음은 클래스의 주요 개념입니다:


1. 클래스와 객체

  • 클래스(Class): 어떤 종류의 객체를 만들기 위한 설계도나 틀입니다.
    예를 들어, "자동차"라는 클래스를 만들면, 모든 자동차가 가질 수 있는 공통적인 특징(속성)과 행동(기능)을 정의합니다.
  • 객체(Object): 클래스를 기반으로 만들어진 실제 데이터입니다. 클래스를 통해 만들어지는 구체적인 실체로, 각각 독립적인 값을 가질 수 있습니다.
    예: 자동차 클래스에서 "내 차"와 "네 차"는 각각 객체입니다.

2. 속성(Attributes)과 메서드(Methods)

  • 속성(Attributes): 객체가 가지는 데이터나 상태입니다.
    예를 들어, 자동차의 속성은 색상, 제조사, 속도 등이 될 수 있습니다.
  • 메서드(Methods): 객체가 할 수 있는 동작이나 행동입니다.
    예를 들어, 자동차는 운전, 멈춤, 경적 울리기 등의 행동을 할 수 있습니다.

3. 인스턴스

  • 인스턴스(Instance): 클래스에서 생성된 객체를 의미합니다.
    예를 들어, "빨간색 스포츠카"는 자동차 클래스의 인스턴스입니다. 같은 클래스에서 여러 인스턴스를 만들 수 있으며, 각 인스턴스는 독립적인 속성과 동작을 가집니다.

4. 생성자(Constructor)

  • 객체를 만들 때 초기 상태를 정의하는 특별한 메서드입니다.
    예를 들어, 자동차를 만들 때 색상과 모델을 지정하는 과정을 생성자가 담당합니다. 이를 통해 객체가 생성될 때 필요한 초기 설정을 할 수 있습니다.

5. 클래스 변수와 인스턴스 변수

  • 클래스 변수: 모든 객체가 공유하는 데이터입니다.
    예를 들어, 모든 자동차의 종류가 "탈것"이라면, 이는 클래스 변수로 설정될 수 있습니다.
  • 인스턴스 변수: 각 객체마다 개별적으로 가지는 데이터입니다.
    예를 들어, 자동차마다 색상이나 속도가 다를 수 있으니 이는 인스턴스 변수로 설정됩니다.

6. 상속(Inheritance)

  • 기존 클래스의 특징을 물려받아 새로운 클래스를 만드는 것.
    예를 들어, 자동차 클래스를 기반으로 "전기차"라는 클래스를 만들면, 기존 자동차 클래스의 속성과 행동을 재사용하면서 전기차에 맞는 추가적인 특징을 정의할 수 있습니다.

7. 다형성(Polymorphism)

  • 같은 이름의 메서드가 서로 다른 클래스에서 다르게 동작할 수 있는 성질입니다.
    예를 들어, 자동차와 자전거는 모두 "주행"이라는 메서드를 가질 수 있지만, 실제 구현 방식은 서로 다를 수 있습니다.

8. 캡슐화(Encapsulation)

  • 객체의 내부 데이터와 기능을 외부에서 직접 접근하지 못하도록 감싸는 것.
    예를 들어, 자동차의 엔진 내부 구조를 운전자가 직접 다룰 수 없도록 하고, 운전자는 단지 페달을 밟는 방식으로만 자동차를 제어할 수 있게 하는 것과 같습니다.

9. 추상화(Abstraction)

  • 복잡한 내부 구현을 감추고 중요한 부분만 노출시키는 것.
    예를 들어, 사용자는 자동차의 엔진 작동 원리를 몰라도 핸들과 페달을 통해 자동차를 운전할 수 있습니다.

10. 객체 지향 프로그래밍의 4대 특징

  1. 추상화: 필요한 정보만 노출하고 불필요한 세부사항을 숨김.
  2. 캡슐화: 데이터와 동작을 묶어 보호하고 외부 접근을 제한.
  3. 상속: 기존의 클래스를 확장해 새로운 클래스를 만듦.
  4. 다형성: 같은 이름의 동작이 다른 방식으로 실행될 수 있음.

파이썬 클래스의 특징

  • 파이썬 클래스는 다른 객체 지향 언어보다 구현이 간단하고 직관적입니다.
  • 클래스는 코드의 재사용성을 높이고, 프로그램을 논리적으로 구조화하는 데 도움을 줍니다.

궁금한 점이 있다면 더 알려드릴게요! 😊

 

 

 


파이썬 클래스는 객체 지향 프로그래밍(OOP)의 핵심 요소로, 데이터와 동작(메서드)을 한 곳에 묶는 설계도 역할을 합니다. 아래는 파이썬 클래스의 주요 이론을 설명하는 코드 예제입니다.


1. 클래스 정의 및 기본 사용

 

# 클래스 정의
class Person:
    # 생성자 메서드 (__init__)
    def __init__(self, name, age):
        self.name = name  # 인스턴스 변수
        self.age = age

    # 메서드
    def introduce(self):
        return f"My name is {self.name} and I am {self.age} years old."

# 객체 생성
person1 = Person("Alice", 30)
person2 = Person("Bob", 25)

# 메서드 호출
print(person1.introduce())  # My name is Alice and I am 30 years old.
print(person2.introduce())  # My name is Bob and I am 25 years old.


2. 클래스 변수와 인스턴스 변수

class Person:
    species = "Homo sapiens"  # 클래스 변수 (모든 객체가 공유)

    def __init__(self, name, age):
        self.name = name      # 인스턴스 변수
        self.age = age

# 객체 생성
person1 = Person("Alice", 30)
person2 = Person("Bob", 25)

# 클래스 변수 접근
print(Person.species)  # Homo sapiens
print(person1.species) # Homo sapiens

# 인스턴스 변수 접근
print(person1.name)    # Alice
print(person2.name)    # Bob

 


3. 상속(Inheritance)

 


4. 다형성(Polymorphism)

 

 


5. 캡슐화(Encapsulation)

 

 


6. 클래스 메서드와 정적 메서드

 


7. 매직 메서드 (Magic Methods)

매직 메서드는 특별한 이름을 가진 메서드로, 클래스의 특정 동작을 정의합니다.

 

 

8. 객체 비교

매직 메서드를 사용해 객체를 비교할 수 있습니다.

 

 

 


 

파이썬에서 **생성자(Constructor)**는 클래스가 인스턴스화될 때 자동으로 호출되는 특별한 메서드입니다. 생성자는 보통 객체가 생성될 때 필요한 초기값을 설정하거나 초기화 작업을 수행합니다.

파이썬에서는 __init__ 메서드가 생성자 역할을 합니다.


생성자의 특징

  1. __init__ 메서드:
    • 생성자는 항상 __init__이라는 이름을 가지며, 클래스 정의 안에 포함됩니다.
    • 객체가 생성될 때 자동으로 호출됩니다.
    • 객체의 **속성(Attributes)**을 초기화하거나 초기 설정을 수행합니다.
    • 첫 번째 매개변수는 반드시 self여야 하며, 이는 생성된 객체 자신을 참조합니다.
  2. 인스턴스 생성과 초기화:
    • 생성자를 통해 객체의 고유한 데이터를 설정할 수 있습니다.
  3. 매개변수 전달:
    • 생성자는 매개변수를 받을 수 있으며, 이를 이용해 객체 속성을 동적으로 설정합니다.

 

 

파이썬에서 **상속(Inheritance)**은 객체 지향 프로그래밍의 중요한 개념으로, **기존 클래스(부모 클래스)**의 속성과 메서드를 **새로운 클래스(자식 클래스)**에서 물려받아 사용할 수 있도록 합니다. 이를 통해 코드의 재사용성확장성을 높일 수 있습니다.


상속의 주요 개념

  1. 부모 클래스 (Parent Class 또는 Superclass)
    • 상속을 제공하는 클래스입니다.
    • 기본적인 속성과 메서드를 정의합니다.
  2. 자식 클래스 (Child Class 또는 Subclass)
    • 부모 클래스를 상속받아 새롭게 정의된 클래스입니다.
    • 부모 클래스의 속성과 메서드를 그대로 사용할 수 있고, 필요에 따라 새롭게 추가하거나 재정의(오버라이딩)할 수 있습니다.
  3. 코드 재사용
    • 상속을 통해 공통 기능을 부모 클래스에 정의하고, 자식 클래스에서 이를 활용하거나 확장할 수 있습니다.

상속의 기본 문법

 

파이썬에서 **상속(Inheritance)**은 객체 지향 프로그래밍의 중요한 개념으로, **기존 클래스(부모 클래스)**의 속성과 메서드를 **새로운 클래스(자식 클래스)**에서 물려받아 사용할 수 있도록 합니다. 이를 통해 코드의 재사용성확장성을 높일 수 있습니다.


상속의 주요 개념

  1. 부모 클래스 (Parent Class 또는 Superclass)
    • 상속을 제공하는 클래스입니다.
    • 기본적인 속성과 메서드를 정의합니다.
  2. 자식 클래스 (Child Class 또는 Subclass)
    • 부모 클래스를 상속받아 새롭게 정의된 클래스입니다.
    • 부모 클래스의 속성과 메서드를 그대로 사용할 수 있고, 필요에 따라 새롭게 추가하거나 재정의(오버라이딩)할 수 있습니다.
  3. 코드 재사용
    • 상속을 통해 공통 기능을 부모 클래스에 정의하고, 자식 클래스에서 이를 활용하거나 확장할 수 있습니다.

상속의 기본 문법

 

 

class Parent2 :
  def __init__(self, name) :
    self.name = name
  def hello(self) :
    print("안녕하세요")
 
class Child2(Parent2) :
  def __init__(self, name, age) :
    super().__init__(name) #Parent2(name)
    self.age = age
  def bye(self) :
    super().hello()
    print("안녕히 가세요")
   
kid = Child2("김", 5)
print(kid.name, kid.age)
kid.bye()

 

 


 

파이썬의 try와 except 문은 예외 처리를 위한 구문입니다. 프로그램 실행 중 예외(Exception)가 발생했을 때, 이를 처리하여 프로그램이 중단되지 않고 계속 실행되도록 돕습니다.


try-except의 목적

  • 예외: 프로그램 실행 중 발생하는 오류.
  • 목적: 예상치 못한 오류를 잡아내고 적절한 대처를 통해 프로그램의 안정성을 유지.

 

 

 

 

파이썬의 finally 블록은 예외 발생 여부와 상관없이 반드시 실행되는 코드를 정의할 때 사용됩니다. 예외 처리 구문인 **try-except**와 함께 사용되며, 주로 **정리 작업(Cleanup)**에 활용됩니다.


finally의 특징

  1. 항상 실행:
    • try 블록에서 예외가 발생하더라도 finally 블록의 코드는 무조건 실행됩니다.
    • 예외가 발생하지 않아도 실행됩니다.
  2. 주요 목적:
    • 파일 닫기, 네트워크 연결 해제, 리소스 반환 등 정리 작업에 사용.
  3. except와 함께 사용 가능:
    • except로 예외를 처리한 후에도, 또는 예외를 처리하지 않고 finally만 사용하는 경우에도 동작.

 

 

 

 

 

GPT 코드 수정

# 사용자 정의 예외
class NameDigitError(Exception):
    def __init__(self):
        super().__init__("이름에 숫자가 들어갈 수 없습니다.")

# 이름에 숫자가 있는지 확인하는 함수
def is_there_digit(name):
    for char in name:
        if char.isdigit():  # 숫자 확인
            return True
    return False

# 예외 처리
try:
    name = input("이름을 입력하세요 : ")
    if is_there_digit(name):
        raise NameDigitError  # 숫자가 있으면 예외 발생
except NameDigitError as e:
    print(e)  # 예외 메시지 출력
else:
    print(name, "님 안녕하세요!")  # 정상적인 경우
finally:
    print("프로그램 종료")  # 항상 실행

# 클래스 = 변수 + 함수
# 클래스 = 데이터멤버 + 클래스변수 + 생성자 + 소멸자 + getter + setter + 그외 함수(생성,소멸,get,set 이외)
# __init__ (생성자)
# __del__ (소멸자)
# 상속 : class Child(Parent)
# super().__init__().super.variable
 
# Exception Class
# 상속 받을 수 있음
# try - except (as e) - else - finally
# except : 여러개 만들 수 있음, 계층구조로 부모예외클래스가 한번에 처리가능
 
LIST