개발자들 사이에서 객체 지향 프로그래밍은 상당한 추종자들을 끌어들였습니다. 대중적인 컴퓨터 언어인 파이썬도 마찬가지로 객체 지향 패러다임을 고수합니다.
OOP 원칙의 기초를 형성하는 Python에서 객체와 클래스를 정의하는 방법을 다룹니다. "파이썬의 객체 지향 프로그래밍"에 대한 이 튜토리얼에서는 파이썬 클래스를 선언하고, 클래스에서 객체를 생성하고, XNUMX가지 OOP 기술을 사용하는 방법을 배웁니다.
그래서, 먼저 먼저.
객체 지향 프로그래밍이란?
객체 지향 프로그래밍(OOP)의 주요 초점은 "객체" 생성입니다. 상호 연결된 변수와 함수의 모음이 개체를 구성합니다.
이러한 변수를 객체의 속성이라고 하는 경우가 많으며 동작을 함수라고 하는 경우가 많습니다. 이러한 항목은 응용 프로그램에 보다 효과적이고 이해하기 쉬운 구조를 제공합니다. 자동차는 항목의 예입니다.
자동차가 항목이라면 그 속성에는 색상, 모델, 가격, 브랜드 등이 포함됩니다. 또한 가속, 감속 및 기어 변경이 가능합니다.
또 다른 예: 개를 항목으로 생각하면 그 특성 중 일부는 색, 품종, 이름, 체중 등이 될 수 있습니다.
객체, 은닉, 상속 등과 같은 실제 개념을 프로그래밍에 통합하기 때문에 객체 지향 프로그래밍은 잘 알려져 있습니다. 실제 상황과 너무 유사하기 때문에 시각화가 더 간단합니다.
객체 지향 프로그래밍 개념
파이썬의 클래스와 객체
다른 모든 객체 지향 언어와 마찬가지로 Python을 사용하면 객체를 생성하는 클래스를 설계할 수 있습니다. 문자열, 목록, 사전 및 기타 객체를 포함하여 Python에서 가장 널리 사용되는 데이터 유형은 내장 클래스입니다.
클래스는 특정 종류의 개체를 정의하는 연결된 메서드 및 인스턴스 변수의 그룹입니다. 클래스는 객체의 모델 또는 템플릿으로 볼 수 있습니다. 클래스를 구성하는 변수를 속성이라고 합니다.
개체는 정의된 속성 집합이 있는 클래스의 구성원입니다. 이 때문에 동일한 클래스를 사용하여 원하는 수의 개체를 만들 수 있습니다.
Python 클래스는 클래스 이름과 콜론이 뒤에 오는 클래스라는 단어를 사용하여 정의됩니다. 앵무새 클래스의 예는 다음과 같습니다.
여기에서는 class 키워드를 사용하여 빈 클래스 Parrot을 선언합니다. 우리는 클래스에서 인스턴스를 만듭니다. 인스턴스는 특정 클래스에서 만들어진 특정 개체입니다. 'pass'는 우리가 잠시 동안 구현을 생략할 수 있는 코드의 대용으로 자주 사용됩니다. "pass" 키워드를 사용하여 오류를 발생시키지 않고 Python 코드를 실행할 수 있습니다.
클래스를 인스턴스화하면 객체(인스턴스)가 생성됩니다. 클래스가 생성될 때 객체의 설명만 정의됩니다. 결과적으로 스토리지나 RAM이 할당되지 않습니다.
앵무새 클래스 개체의 예는 다음과 같습니다.
Obj는 이 인스턴스에서 Parrot 클래스 개체입니다.
앵무새에 대한 세부 사항을 알고 있다고 가정해 보겠습니다. 이제 parrot 클래스와 해당 개체를 만드는 방법을 보여줍니다.
특수 메서드( __init__ )
init라는 메서드는 모든 Parrot 객체가 ()을 가져야 하는 속성을 정의합니다. 새로운 Parrot 객체가 생성되면 __init__ 함수는 객체의 속성 내에서 제공하는 값을 할당하여 객체의 초기 상태를 생성합니다.
따라서 클래스의 각 새 인스턴스는 __init__()를 사용하여 초기화됩니다. __init__()는 매개변수의 개수에 제한이 없지만 self는 항상 첫 번째 매개변수입니다.
활성 클래스 인스턴스에 대한 참조는 자체 인수에 포함됩니다. 클래스의 현재 개체 주소에 연결되고 해당 개체의 변수 데이터에 대한 액세스를 제공하는 self 매개변수는 이를 의미합니다.
예제 1
위의 코드에서 Parrot이라는 클래스를 설정했습니다. 다음으로 속성이 정의됩니다. 사물의 특징은 속성입니다. 클래스의 __init__ 함수는 이러한 특성이 지정되는 곳입니다.
객체가 생성되면 초기화 메서드가 처음에 호출되는 메서드입니다. 그런 다음 Parrot 클래스의 인스턴스가 생성됩니다. 이 경우 Blaze와 Wonda는 새 개체에 대한 참조(값)입니다. __class .species를 사용하면 클래스 속성에 액세스할 수 있습니다.
클래스의 모든 인스턴스는 동일한 특성을 갖습니다. 인스턴스 특성은 blaze.name 및 blaze.age를 사용하여 액세스할 수도 있습니다. 그러나 클래스의 모든 인스턴스에는 고유한 인스턴스 속성이 있습니다.
예제 2
행동 양식
클래스 본문 내부에 정의된 함수를 메서드라고 합니다. 항목이 어떻게 작동할지 지정하는 데 사용됩니다.
앞서 언급한 애플리케이션()에는 sing()과 dance의 두 가지 메소드가 정의되어 있다. 이들은 Flame과 같은 인스턴스 객체에서 호출되기 때문에 인스턴스 메서드라고 합니다.
OOPS 개념의 기초
객체 지향 프로그래밍의 네 가지 핵심 아이디어는 다음과 같습니다.
- 계승
- 캡슐화
- 다형성
- 추출
계승
사람들은 종종 신생아에게 자신의 얼굴 특성이 부모와 비슷하거나 부모로부터 특정 특성을 물려받았다고 말합니다.
당신은 또한 당신이 당신의 부모와 몇 가지 특성을 공유하는 것을 관찰했을 가능성이 있습니다. 실제 상황도 상속과 상당히 유사합니다.
그러나 이 경우 "상위 클래스"의 특성은 "자식 클래스"로 전달됩니다. 이러한 측면을 이 컨텍스트에서 "속성" 및 "메소드"라고 합니다.
클래스는 상속이라고 하는 기술을 사용하여 다른 클래스에서 해당 메서드와 특성을 파생할 수 있습니다. 상속은 부모 클래스의 속성을 받는 자식 클래스의 프로세스입니다.
예:
부모 클래스 Human은 위의 예에서 자식 클래스 Boy에 의해 상속됩니다. Boy는 Human에서 상속되기 때문에 Boy 클래스의 인스턴스를 만들 때 모든 메서드와 속성에 액세스할 수 있습니다.
Boy 클래스에는 schoolName이라는 메서드도 정의되어 있습니다. 부모 클래스 개체는 schoolName 메서드에 액세스할 수 없습니다. 그러나 schoolName 메서드는 자식 클래스 개체(Boy)를 만들어 호출할 수 있습니다.
캡슐화
프로그램의 모든 변수에 전역 액세스 권한을 부여하는 것은 클래스로 작업하고 민감한 데이터를 처리할 때 현명한 조치가 아닙니다.
프로그램에 이러한 변수에 대한 완전한 액세스 권한을 부여하지 않고 캡슐화는 필요한 변수를 얻을 수 있는 메커니즘을 제공합니다.
목적을 위해 명시적으로 정의된 메서드를 사용하여 변수에서 데이터를 업데이트, 편집 또는 삭제할 수 있습니다. 이 프로그래밍 방법은 데이터 입력에 대한 보안 및 제어가 강화된 이점이 있습니다.
아래 데모에서 변수에 얼마나 빨리 액세스할 수 있는지 확인하십시오.
다형성
휴대전화를 사용하여 검색한다고 가정해 보겠습니다. Instagram 피드. 음악을 듣고 싶은 충동이 들 때 Spotify에 액세스하여 좋아하는 노래를 재생하기 시작했습니다.
잠시 후 전화를 받았으므로 전화를 받기 위해 백그라운드에서 하던 일을 일시 중지했습니다. 친구가 전화를 걸어 특정 사람의 전화번호를 문자로 보내달라고 요청했습니다.
그래서 당신은 그에게 SMS로 전화번호를 보내고 당신의 일을 계속했습니다. 당신은 아무것도 집어 들었습니까? 하나의 장치(휴대폰)만 있으면 피드를 검색하고, 음악을 듣고, 전화를 걸고 걸고, 메시지를 보낼 수 있습니다.
따라서 다형성은 이에 필적합니다. Poly는 다수를 의미하고 morph는 다른 형태를 나타냅니다. 따라서 다형성은 전체적으로 다양한 형태를 가진 어떤 것을 의미합니다.
또는 상황에 따라 다양한 행동을 보일 수 있는 "무언가". OOPS에서 다형성은 이름은 같지만 동작이 다른 함수를 설명합니다. 또는 동일한 함수 이름을 가진 다른 함수 서명(함수에 전달된 매개변수).
예:
여기서 우리는 각각의 인스턴스 메소드를 사용하여 Zebra와 Rabbit의 객체를 반복하기 위해 변수 animal을 사용할 수 있습니다. 결과적으로 Zebra와 Rabbit 모두의 행동(color() & eats())은 여기서 animal이라는 단일 변수로 표현됩니다. 따라서 다형성 규칙을 준수합니다.
추출
이 콘텐츠를 읽기 위해 노트북, 휴대전화 또는 태블릿을 사용할 가능성이 큽니다. 그것을 읽는 동안 당신은 또한 메모를 하고, 주요 구절에 밑줄을 긋고, 아마도 개인 파일에 일부 정보를 저장하고 있을 것입니다.
이것을 읽을 때 볼 수 있는 것은 표시되는 데이터가 있는 "화면"뿐입니다. 입력할 때 키보드의 키만 볼 수 있으므로 키를 누를 때 해당 단어가 화면에 표시되는 것과 같은 내부 미묘함에 대해 걱정할 필요가 없습니다.
또는 화면의 버튼을 누르면 새 탭이 실행됩니다.
따라서 이 상황에서 관찰할 수 있는 것은 모두 추상적입니다. 우리는 그것이 만들어내는 결과만 볼 수 있고 내부 복잡성(실제로 우리에게 중요함)은 볼 수 없습니다.
이와 유사하게 추상화는 구현이나 내부 세부 사항을 숨기면서 모든 것이 소유한 기능만 드러냅니다.
추상화의 주요 목표는 배경 정보와 관련 없는 데이터 구현을 숨겨 사람들이 보고 싶은 것만 볼 수 있도록 하는 것입니다. 코드의 복잡성을 관리하는 데 도움이 됩니다.
예:
차량 관련 추상 클래스가 여기에 있습니다. 추상 클래스 ABC에서 상속되기 때문에 추상입니다. 추상 메서드가 정의되지 않았거나 비어 있기 때문에 Vehicle 클래스에는 정의가 없는 바퀴 없음이라는 추상 메서드가 있습니다.
그들은 메서드의 구현을 제공하기 위해 추상 클래스를 상속하는 클래스를 예상합니다.
OOPS 개념의 이점
- 캡슐화함으로써 높은 보안 및 데이터 프라이버시가 달성됩니다.
- 동일한 클래스의 많은 다형성 버전을 가질 수 있는 유연성.
- 추상화를 통해 높은 수준의 코드 복잡성을 줄였습니다.
- 단일 문제를 찾기 위해 수백 줄의 코드를 살펴보는 대신 프로그래밍의 모듈화로 인해 디버깅이 간단해집니다.
- 코드 재사용은 부모 클래스 속성의 자식 클래스 상속으로 인해 발생합니다.
- 각 미니 문제에 필요한 조치를 수행하는 클래스를 생성하기 때문에 효과적인 문제 해결이 가능합니다. 다음 문제는 해당 클래스를 재사용할 수 있으므로 훨씬 더 빨리 해결할 수 있습니다.
결론
결론적으로 우리는 현재 가장 핫한 프로그래밍 패러다임인 Python에서 OOPS 아이디어에 대해 배웠습니다.
이것을 읽고 나면 OOPS 패러다임이 전적으로 클래스와 객체의 개념을 다룬다는 것을 깨달았을 것입니다. 캡슐화, 다형성, 상속 및 추상화와 같은 OOPS 개념.
댓글을 남겨주세요.