참고: https://wikidocs.net/16071
상속(Inheritance)
class Parent:
...내용...
class Child(Parent):
...내용...
- Parent class를 상속받는 Child class를 선언
- 그러면 자식클래스에서 부모클래스의 속성, 메소드를 기재하지 않아도 포함됨
부모 클래스 확장하기
- 부모 클래스에 새 메소드 추가
- 새로운 attribute 추가
- 기존 메소드 재정의: 매개변수를 같게 주는 경우
- Method Overriding
자식클래스 내에서 부모클래스 호출하기
- 그럴때는 super() 라는 키워드를 사용하면 자식클래스 내에서 코드에서도 부모클래스를 호출할 수 있습니다.
# 오버라이딩 vs. 오버로딩
- Overriding: 상속 시 상위 클래스에서 정의한 메소드를, 하위 클래스에서 재정의하는 것 (매개변수 변화 X) "올라타는거"
-> 상속과 관련된 개념, 메소드 오버라이딩 시 부모클래스의 메소드는 무시되고, 자식클래스의 메소드가 동작.
- Overloading: 같은 메소드를 매개변수 변화에 따라 다르게 주는 것.
- 파이썬은 오버로딩을 공식적으로 지원하지 않음(??) 하나의 메소드에게 다형성을 부여하는 것. 파이썬에서는 연산자 오버로딩을 사용하는 경우가 많음: 연산자를 객체끼리 사용할 수 있게 하는 기능. "연산자 오버로딩" 나중에 더 찾아보긔
-> operator overloading (연산자 오버로딩): dunder (double underscore) -> magic method, class 안의 특수 method, 대부분 operator overloading 후 사용됨. 연산자 오버로딩: 피연산자가 문자이거나 / 숫자이거나 / 문자와 숫자이거나 전체 모두 오버로딩을 해놨기 때문에 쓸 수 있었던 것.
# 생성자 변수 vs. 클래스변수
- 파이썬에서 생성자(Constructor)에 변수를 사용하는 것과 클래스 변수(Class Variable)를 사용하는 것은 서로 다른 개념입니다
1. 생성자(Constructor): -> 인스턴스 변수, 각 인스턴스가 생성될 때마다 다른 변수를 각기 생성
- 생성자는 클래스의 인스턴스(객체)가 생성될 때 호출되는 특별한 메서드입니다. 일반적으로 __init__이라는 이름을 가집니다.
- 생성자는 객체가 초기화될 때 필요한 작업을 수행하도록 사용됩니다. 이때 객체의 속성을 초기화하거나 인스턴스 변수에 초기값을 할당하는 등의 작업을 할 수 있습니다.
- 생성자에 전달되는 변수들은 해당 객체의 인스턴스 변수로 사용됩니다.
2. 클래스 변수(Class Variable): -> 클래스 변수, 모든 인스턴스가 동일한 클래스 변수를 공유
- 클래스 변수는 클래스 내부에서 선언되고 모든 인스턴스가 공유하는 변수입니다. 즉, 해당 클래스의 모든 객체가 동일한 클래스 변수를 공유합니다.
- 클래스 변수는 클래스의 모든 인스턴스가 공유하기 때문에 일반적으로 클래스 수준의 정보나 설정 값을 저장할 때 사용됩니다.
따라서, 생성자에 변수를 사용하는 것은 각 객체의 초기화와 관련이 있고, 클래스 변수는 해당 클래스의 모든 인스턴스가 공유하는 값에 사용됩니다.
# 객체지향 프로그래밍과 엮어서 생각하기
# SOLID: 객체지향언어 5원칙(Principles)
https://mangkyu.tistory.com/194
[OOP] 객체지향 프로그래밍의 5가지 설계 원칙, 실무 코드로 살펴보는 SOLID
이번에는 객체 지향 프로그래밍의 5가지 핵심 원칙인 SOLID에 대해 알아보고자 합니다. 실제로 애플리케이션을 개발할 때 어떻게 적용할 수 있을지 구체적인 예시를 들어 살펴보고자 합니다. 아
mangkyu.tistory.com
1.
[ 단일 책임의 원칙(SRP, Single Responsibility Principle) ]
-> 하나의 클래스는 하나의 액터만 담당해야 함
class person { def cook, def plate, def order, def eat } -> 요리사는 cook, plate만 쓰고, 손님은 order, eat만 쓴다면 안좋은 클래스얌 -> 이런식으로 쓰면 안돼
2.
[ 개방 폐쇄 원칙 (Open-Closed Principle, OCP) ]
출처: https://mangkyu.tistory.com/194 [MangKyu's Diary:티스토리]
-> 클래스 자체 변경은 X, 확장은 상속 오버로딩 등으로 해야함 다형성(overloading & overriding)
3.
[ 리스코프 치환 원칙 (Liskov Substitution Principle, LSP) ]
출처: https://mangkyu.tistory.com/194 [MangKyu's Diary:티스토리]
-> 부모 class를 자식class로 치환해도 정상동작해야 함.
4.
[ 인터페이스 분리 원칙 (Interface segregation principle, ISP) ]
출처: https://mangkyu.tistory.com/194 [MangKyu's Diary:티스토리]
->
목적과 관심이 각기 다른 클라이언트가 있다면 인터페이스를 통해 적절하게 분리해줄 필요가 있는데, 이를 인터페이스 분리 원칙이라고 부른다. 즉, 인터페이스 분리 원칙이란 클라이언트의 목적과 용도에 적합한 인터페이스 만을 제공하는 것
출처: https://mangkyu.tistory.com/194 [MangKyu's Diary:티스토리]
예를 들어 파일 읽기/쓰기 기능을 갖는 구현 클래스가 있는데 어떤 클라이언트는 읽기 작업 만을 필요로 한다면 별도의 읽기 인터페이스를 만들어 제공해주는 것이다.
출처: https://mangkyu.tistory.com/194 [MangKyu's Diary:티스토리]
5.
[ 의존 역전 원칙 (Dependency Inversion Principle, DIP) ]
출처: https://mangkyu.tistory.com/194 [MangKyu's Diary:티스토리]
-> 부모클래스는 되도록 추상적, 자식클래스는 되도록 구체적. (저수준 모듈이 고수준 모듈(입출력에 먼 에 의존적)
'컴퓨터 > 프로그래밍' 카테고리의 다른 글
[Python] List Comprehension 리스트 표현식 (0) | 2024.09.04 |
---|---|
[Python] 이터레이터 Iterator / 제너레이터 Generator / Iterable (0) | 2024.09.04 |
[Python] Docstring 개념 & 사용법 (1) | 2024.09.04 |
[Python] 환경 변수에 Key, Token 저장해서 사용하기 & .gitignore로 무시 (0) | 2024.09.03 |
[프로그래밍] 정적 vs 동적 프로그래밍 언어 (0) | 2024.01.16 |