자 이제 클래스의 마지막 추상화를 같이 공부해 봅시다!!!

추상화
- 복잡한 시스템의 세부 사항을 감추고, 필요한 부분만 노출함으로써 코드를 더 간단하고 명확하게 작성
- 복잡한 구현 세부 사항을 몰라도 제공된 기능을 사용
- abc (Abstract Base Class) 모듈을 사용해 추상화를 지원
추상화는 추상클래스와 추상메서드가 한쌍으로 사용됩니다. 우리가 지금까지 클래스 선언을 해왔던 것과 동일합니다. 다만 이제 함수선언과 같이 클래스 ()가 생기고 abs라는 모듈이 들어간 것입니다.
여기서, 잠깐 추상클래스와 추상메서드가 무엇이냐?
추상클래스
- 추상 클래스는 하나 이상의 추상 메서드를 포함한 클래스
- 구체적인 구현 없이 구조만 제공하며, 이를 기반으로 구체적인 동작을 구현하는 자식클래스를 설계하는 데 사용
- 직접 인스턴스화할 수 없으며, 반드시 상속받아 사용해야 함
- 추상 클래스는 생성자, 일반 메서드와 추상 메서드를 모두 포함 가능
- 즉, 공통된 동작은 추상 클래스에서 정의하고, 구체적인 동작은 자식클래스에서 구현
추상메서드
- 추상 메서드는 선언만 되어 있는 메서드
- 자식클래스에서 반드시 구현해야 하는 메서드로 강제성을 지님
- 추상 메서드는 추상 클래스 내에 정의되며, @abstractmethod 데코레이터를 사용
- 데코레이터? 기존 함수나 메서드의 동작을 수정하거나 확장할 때 사용
자 이제 개념 정리는 끝났으니, 다들 아시죠?
실습
- from abs import ABC, abstractmethod 를 먼저 호출
- 추상 클래스 PaymentSystem(ABC) 선언
- authenticate와 process_payment 추상메서드를 선언
- 추상 클래스에 payment_summary를 선언하여 결제완료 알림 출력
- 자식 클래스에서 추상클래스를 호출하여 신용카드 결제 시스템 완성 시키고, 출력
이걸로 추상화에 대한 개념은 모두 끝났습니다. 아마 저기 모듈불러오는
from abc import ABC
궁금하신 분이 있으시겠지만, 그것은 다음시간에 같이 공부하는 주제이니 오늘은 사용 체험이라고 생각해 주시길 바랍니다 :D
이제 그럼 마무리로 클래스 메서드와 정적 메서드를 추가로 더 알아보고 포스팅을 마치도록 하겠습니다.
클래스 메서드와 정적 메서드
- 메서드의 self 개념 주 클래스를 인스턴스와 하지 않고 호출해서 사용하는 경우에는 self가 필요 없음
- 위 경우에 일반저긍로 클래스 메서드나 정적 메서드를 활용
클래스 메서드
- 클래스 메서드는 자기 자신의 클래스를 첫 번째 인자로 받는 메서드, cls 사용
- 클래스 속성에 접근하거나 클래스 상태를 변경할 수 있음
- 클래스 변수에 접근하거나 수정할 때 사용
- 클래스 또는 자식클래스 간의 동작을 통합적으로 처리 할때 사용
- 인스턴스 생성 루 사용하는 것이 아닌 클래스에서 호출
- @classmethod 데코레이터 사용
하지만 클래스 메서드를 선언하지 않아도 인스턴스로 충분히 같은 결과 값을 출력할 수있습니다.
그런데 왜 클래스 메서드를 사용할까요?
- 클래스 변수와 클래스 레벨의 데이터를 다룰 때 유용합니다.
- 인스턴스를 생성하는 대체 생성자를 만들 때 사용됩니다.
- 클래스 전체에 적용되는 로직을 명확히 표현합니다.
- 상속된 클래스에서 다른 동작을 정의할 수 있습니다
위 와 같은 이유로 클래스 메소드를 쓴다고 합니다. 저는 아직 이해가 잘 안되지만, 앞으로 계속 공부하다 보면 언젠가 이해가 되는 날이 오지 않을까? 하고 있습니다. 여러분들도 이게 뭔소리지 하셔도 괜찮다고 봅니다. PYTHON 오늘 하고 그만둘거 아니지 않습니까 ㅎㅎ
정적 메서드
- cls나 self를 사용하지 않음
- 클래스와 독립적인 작업(예: 유틸리티 함수)을 정의할 때 유용
- @staticmethod 데코레이터 사용
- 정적 메서든느 일반 함수로 작성해도 됨, 다만, 함수의 목적을 클래스와 연관 지어 코드의 효율성을 높일 수 있음
예시를 보시면 어?? 이거 그냥 함수만 정의해도 더 간단히 쓸 수 있는거 아니야?
하실텐데 맞습니다. 그냥 add함수를 선언하는게 빠르죠 하지만 정적이라는 뜻은 가만히 미동이 없는 뜻입니다. 그 뜻대로 저 클래스 내에서만 쓸수있는 메서드 인거죠 다른 곳에 잘못들어가 코드에 문제를 일으키는 것을 방지하고자 쓰는 메서드로 아시면 될 것으로 보입니다.
그럼 클래스 메서드와 정적 메서드는 무슨 차이점이 있나요?
클래스 메소드는 클래스 자체를 매개변수로 받기 때문에 클래스 상태를 관리하거나 상속받은 클래스에서 동작을 다르게 정의할 수 있습니다. 반면 정적 메소드는 클래스나 인스턴스와 무관한 유틸리티 기능을 제공합니다.
오늘도 같이 공부하시느라 수고 많으셨습니다!!!!!!

여기서 끝내면 안되겠죠 분명 더 어려운 실습을 낸다고 했으니까요.

실습(클래스 종합프로그래밍)
해답 예시는 하루코딩에 올려져 있습니다.
'python 시작하기' 카테고리의 다른 글
Python 파일입출력 (1) | 2024.12.07 |
---|---|
python 모듈 (5) | 2024.12.06 |
python 클래스 상속, 다향성 (0) | 2024.12.04 |
pythone +) 클래스 변수 실습 해답예시 , 건강상태 클래스 해답 예시 (0) | 2024.12.03 |
python class 변수와 캡슐화 (0) | 2024.12.03 |