Post

파이썬 기본 문법 - 클래스 상속

📌시작하며

신입 개발자로 일하기 시작하며 업무에 필요한 스택을 틈틈히 공부하고 있다.😌 파이썬도 같은 흐름으로, 백엔드 코드를 읽거나 소통할 때 필요한 파이썬 공부도 시작했다.

파이썬 언어는 인간이 읽기 쉬운 고급언어로 배우기도 쉽다고 한다. 아직 걸음마 단계라 과연 그런지는 차차 공부해봐야 알겠지만😅

일단 기본 문법은 예제도 쳐보고 한 번은 훑어봐서, 자주 사용 되는 문법 위주로 정리해보고자 한다.

✅클래스

클래스는 객체 지향 프로그래밍의 핵심으로, 클래스 안에 데이터와 기능을 함께 작성해 하나로 묶을 수 있다.

➡️클래스 정의

클래스는 아래와 같이 class키워드를 사용해 정의한다. 아래는 Dog란 class를 정의했다.

1
class Dog:

➡️생성자

객체가 생성될 때 자동으로 호출되는 특수 메서드로 객체의 초기 상태를 설정할 수 있다. __init__을 사용해 정의하면 된다.

1
2
3
class Dog:
  def __init__(self, name):
    self.name= name

여기서 self는 메서드가 호출된 객체(즉 생성된 인스턴스)를 가리키는 역할을 한다.

1
2
3
4
5
6
class Dog:
  def __init__(self, name):
    self.name= name

# Dog 클래스를 이용한 dog1이란 인스턴스를 생성
dog1 = Dog("해피")

이때 dog1이 Dog를 부르고, 이 상황에서 self는 dog1이 되는 것이다. 이를 바탕으로 self에 dog1을 넣어보자. dog1.name = name이 되고, Dog("해피")로 name에 “해피”를 넣어서 생성했기 때문에, dog1.name = "해피"가 되는 것이다.

➡️메서드

아래에서 두가지 메서드를 정의했다. 이름을 받아 문장을 return하는 bark와 지정된 문장이 return되는 cute다. 이때 cute의 경우 self를 직접적으로 이용하지는 않지만 사이에 self를 넣어야 함에 유의한다.

1
2
3
4
5
6
7
8
9
10
11
12
class Dog:
    def __init__(self, name):
        self.name = name  # 인스턴스 변수 설정

    def bark(self):
        return f"우리 {self.name}(은/는) 왕왕 짖어요"
    def cute(self):
        return "우리 강아지는 귀여워요"

dog1 = Dog("해피")
print(dog1.bark())  # 출력: 우리 해피(은/는) 왕왕 짖어요
print(dog1.cute())  # 출력: 우리 강아지는 귀여워요

✅클래스 상속

클래스 상속이란 기존 클래스를 기반으로 새로운 클래스를 생성할 수 있게 해주는 기능으로, 이를 통해 기존 클래스의 속성, 메서드를 재사용하고 확장하거나 수정할 수 있게 한다.

먼저 아래와 같이 공통 class를 정의해주었다.

1
2
3
4
5
6
7
class Animal:
  def __init__(self, name):
    self.name = name
    self.age = 5

  def speak(self):
    return "이렇게 말해요"

이제 Animal 클래스를 상속해보자. 상속은 class 지금 만드는 클래스(상속할 클래스): 로작성한다.

1
2
3
class Cat(Animal):
    def speak(self):
        return f"고양이 {self.name}(은/는) 야옹야옹"

이 상황에서 speak 메서드는 Cat 클래스에서 오버라이드(재정의) 되었다.

  • 오버라이딩: 기본 클래스에서 정의된 메서드를 파생 클래스에서 다시 정의하여 새로운 동작을 구현하는 것

➡️부모 클래스 접근하기

위에서 정의한 부모 믈래스를 다시 살펴보자.

1
2
3
4
5
6
7
class Animal:
  def __init__(self, name):
    self.name = name
    self.age = 5

  def speak(self):
    return "이렇게 말해요"

만약 이때 하위 클래스에서는 self.age = 5 가 아니라 self.age = 7 로 바꾸고 싶다면 어떻게할까?

이와 같이 부모 클래스의 __init__메서드에 접근할 때는 super 키워드를 사용하면 된다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Animal:
    def __init__(self, name):
        self.name = name
        self.age = 5

class Cat(Animal):
    def __init__(self, name):
        super().__init__(name)  # 부모 클래스의 __init__ 호출
        self.age = 7  # 나이를 7로 변경

animal = Animal("동물")
print(f"{animal.name}{animal.age}살이에요")  # 출력: 동물은 5살이에요

cat = Cat("쿠키")
print(f"{cat.name}{cat.age}살이에요")  # 출력: 쿠키는 7살이에요

위와 같이, super()는 현재 클래스의 부모 클래스를 참조하고, 해당 부모 클래스의 메서드나 속성에 접근할 수 있는 방법을 제공하는 키워드로, 이를 통해 코드의 재사용성과 확장성을 높일 수 있다.

🗂️참고 사이트

This post is licensed under CC BY 4.0 by the author.