Today I Learned 28 - Python / OOP의 핵심 개념

angie·2022년 7월 30일
0

Python

목록 보기
8/11
post-thumbnail

OOP의 핵심 개념

  • 추상화 Abstraction
  • 상속 Inheritance
  • 다형성 Polymorphism
  • 캡슐화 Encapsulation

추상화 Abstraction

  • 세부적인 내용은 감추고 필수적인 부분만 표현하는 것
  • 여러 클래스가 공통적으로 사용할 속성 및 메서드를 추출하여 기본 클래스로 작성하여 활용

상속 Inheritance

  • 부모 클래스의 모든 속성이 자식 클래스에게 상속된다 = 코드 재사용성이 높아진다.
class ParentClass:
    <code block>

class ChildClass(ParentClass):
    <code block>
issubclass(class, classinfo)
  • class가 classinfo의 subclass인 경우 True를 반환
isinstance(object, classinfo)
  • object가 classinfo의 인스턴스거나 subclass인 경우 True를 반환

super()

  • 자식 클래스에 메서드를 추가로 구현할 수 있습니다.
  • 부모 클래스의 내용을 사용하고자 할 때, super()를 사용할 수 있습니다.
class ChildClass(ParentClass):
    def method(self, arg):
        super().method(arg)

다형성 Polymorphism

  • 동일한 메서드가 클래스에 따라 다르게 행동할 수 있음

  • 즉, 서로 다른 클래스에 속해있는 객체들이 동일한 메시지에 대해 각기 다른 방식으로 응답될 수 있다.

메서드 오버라이딩

: Method Overriding

  • 상속 받은 메서드를 재정의할 수도 있습니다.

  • 상속 받은 클래스에서 **같은 이름의 메서드**로 덮어씁니다.

  • __init__, __str__의 메서드를 정의하는 것 역시, 메서드 오버라이딩입니다.

class Person:
    def __init__(self, name):
        self.name = name
        
    def talk(self):
        print(f'안녕, {self.name}')

class Soldier(Person):

    # 부모 클래스에 있는 메소드를 재정의해서 덮어씌운다.
    def talk(self):
        print(f'군인 {self.name}')
        
p = Person('윤호') # 안녕, 윤호
p.talk()
s =Soldier('유천') # 군인 유천
s.talk()

캡슐화 Encapsulation

  • 객체의 일부 구현 내용에 대해 외부로부터의 직접적인 액세스를 차단하는 것을 말합니다.

    • 예시: 주민등록번호
  • 다른 언어와 달리 파이썬에서 캡슐화는 암묵적으로는 존재하지만, 언어적으로는 존재하지 않습니다.

접근제어자의 종류

접근 제어자문법의미
Publicname외부로부터 모든 접근 허용
Protected_name자기 클래스 내부 혹은 상속받은 자식 클래스에서만 접근 허용
Private__name자기 클래스 내부의 메서드에서만 접근 허용

Public Access Modifier

  • 언더바가 없이 시작하는 메서드나 속성들이 이에 해당합니다.

  • 어디서나 호출 가능합니다.

  • 하위 클래스에서 메서드 오버라이딩을 허용합니다.

  • 일반적으로 작성되는 메서드와 속성의 대다수를 차지합니다.

Protected Access Modifier

  • 언더바 1개로 시작하는 메서드나 속성들이 이에 해당합니다.

  • 암묵적 규칙에 의해 부모 클래스 내부와 자식 클래스에서만 호출 가능합니다.

  • 하위 클래스에서 메서드 오버라이딩을 허용합니다.

-> subclass에서 사용하겠다는 의미, 그러나 강제성은 없어서 Public과 거의 동일하게 외부접근이 가능

Private Access Modifier

  • 언더바 2개로 시작하는 메서드나 속성들이 이에 해당합니다.

  • 본 클래스 내부에서만 사용이 가능합니다.

  • 하위 클래스 상속 및 호출이 불가능합니다.

  • 외부 호출이 불가능합니다.

profile
better than more

0개의 댓글