객체 지향 프로그래밍(OOP, or Object-Oriented Programming)은 개별 객체에 관련 특성과 동작을 묶어서 프로그램을 구성하는 방법이다. 개념상 객체는 시스템의 구성 요소와 같다. 프로그램을 일종의 공장 조립 라인이라고 생각해보자. 시스템 구성 요소 조립 라인의 각 단계는 일부 재료를 가공하고, 궁긍적으로 원재료를 완제품으로 변환한다. 객체는 데이터를 담는다. 마치 조립 라인 각 단계의 원자재나 사전에 가공된 재료처럼 말이다. 또한, 각 조립 라인의 구성 요소가 수행하는 동작과도 비슷하다. 숫자, 문자열, 그리고 리스트와 같은 기본 자료구조는 무언가의 가격이나 시의 이름이라던지, 좋아하는 색과 같은 간단한 것을 나타내도록 설계되었다. 예를 들어, 조직의 직원들을 기록한다고 가정해보자. 그러기 위해서는 각 직원의 이름이나, 나이, 직함, 일을 시작한 해와 같은 기본 정보들을 저장해야 할 것이다. 이런 정보들을 다음과 같이 표현할 수 있다. 하지만 이런 방식에는 몇 가지 문제가 있다. 첫 번째로, 리스트 두 번째로, 리스트 이런 유형의 코드를 더 잘 관리하고 유지할 수 있도록 만들어주는 좋은 방법이 클래스(class)를 사용하는 것이다. 클래스란 무엇인가클래스는 사용자가 정의한(user-defined) 자료 구조를 생성하기 위해 사용된다. 또한 클래스는 클래스에서 생성된 객체가 해당 데이터로 수행할 수 있는 동작과 작업을 정의하는 메서드라고 불리는 특별한 함수를 가진다. 중요한 점은 클래스는 단지 구조를 제공한다는 것이다. 클래스는 무언가가 어떻게 정의되어야 하는지에 대한 청사진(blueprint)이라고 할 수 있다. 실제로 클래스는 실제 컨텐츠 자체를 제공하지 않는다. 클래스 vs. 인스턴스클래스를 청사진이라고 한다면, 인스턴스는 실제 데이터를 포함하는, 클래스에서 만들어진 객체이다. 다르게 이해하자면, 클래스는 양식이나 설문지와 같다. 왜냐하면 필요한 정보를 정의하기 때문이다. 사용자가 양식을 작성하고 나면, 사용자의 특정 사본이 클래스의 인스턴스가 된다. 여기에는 사용자에 관련된 실제 정보가 포함되어 있다. 여러 다른 인스턴스를 생성하기 위해서 양식의 여러 사본을 작성할 수 있지만, 양식을 가이드로 작성하지 않으면 어떤 정보가 필요한지 모르기 때문에 길을 잃을 수 있다. 그러므로, 객체의 개별 인스턴스를 생성하려면, 클래스를 정의해서 무엇이 필요한지 먼저 명시해주어야 한다. 클래스를 정의하는 방법모든 클래스 정의는
함수나 변수 이름과는 달리, 파이썬에서 클래스의 이름을 정의하는 컨벤션으로 카멜케이스(CamelCase) 표기법을 사용한다.
즉, 객체 속성의 초기 값은 항상
클래스에 속한 함수(function)는 인스턴스 메서드(instance method)라고 불린다. 왜냐하면 클래스의 인스턴스에 속하기 때문이다.
인스턴스 속성은 각 객체에 대해 특정하지만, 클래스 속성은 모든 인스턴스에 대해 동일하다. 다음 예제에서는,
클래스 속성은 클래스의 첫 번째줄 아래 및 메서드 정의 외부에 정의된다. 클래스 속성에는 반드시 값이 할당되어야 한다. 왜냐하면 초기 값이 무엇인지 결정하기 위한 인수 없이 클래스 인스턴스에서 인수 없이 생성되기 때문이다. 속성이 클래스의 모든 인스턴스에 대해 동일한 초기 값을 가져야 할 때 마다 클래스 속성을 사용해야 한다. 인스턴스가 생성되기 전에 명시되어야만 하는 속성에 인스턴스 속성을 사용할 수 있다. Reference
Programming/Python [Python] class 객체의 변수, 메소드 확인하는 방법!솜씨좋은장씨 2021. 11. 22. 12:05
Python으로 여러 오픈되어있는 라이브러리를 설치해서 사용하다보면 (예시) pdfminer.six 라이브러리의 결과물
실행 결과가 위처럼 class 객체로 나오는 경우가 종종 있습니다. 물론 설명이 자세하게 되어있는 라이브러리거나 코드라면 문제가 없겠지만 아무런 설명도 없이 저렇게 결과가 나오게 되면 당황스러운 경우가 종종 있습니다. 그럴 경우 해당 python class 객체가 어떠한 변수와 메소드를 가지고 있는지 확인하는 방법은 다음과 같습니다.
python의 기본 내장 함수인 dir을 활용하면
위처럼 해당 객체가 가지고 있는 변수와 메소드의 정보를 리스트 형태로 만들어서 return 해줍니다. 종종 사용하게 되어 공유해봅니다! 읽어주셔서 감사합니다. |