Practice makes perfect

[Python] 클래스(Class - 객체지향) 본문

Anaconda/Python

[Python] 클래스(Class - 객체지향)

kerpect 2020. 7. 28. 18:18

객체지향(Object Oriented Programming)이란 ?

: 효율적인 데이터 관리 방법으로, 데이터를 한개씩 보는 것이 아니라 하나의 의미별로 관리하는 것입니다. 객체 지향 프로그래밍은 컴퓨터 프로그램 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위, 즉 "객체"들의 모임으로 파악하고자 하는 것입니다. 

 

각각의 데이터 -> 레코드 단위(하나의 변수 이름) 

 객체지향 프로그래밍(Object-Oriented Programming)이란, 객체 조립하여 전체 프로그램을 만드는 방식인데, 이는 마치 자건거를 부품별로 조립하여 만드는 것과 같습니다. 객체 지향적 프로그램은 필요 부분만 교체할 수 있어, 유지보수 및 확장성이 뛰어납니다. 

 

 

기본 구성 요소 

 

- 클래스(Class) : 같은 종류(또는 문제 해결을 위한)의 집단에 속하는 속성(attribute)과 행위(behavior)를 정의한 것으로 객체지향 프로그램의 기본적인 사용자 정의 데이터형(user defined data type)이라고 할 수 있습니다.

 

- 객체(Object) : 클래스의 인스턴스(실제로 메모리상에 할당된 것)으로, 객체는 자신 고유의 속성(attribute)을 가지며 클래스에서 정의한 행위(behavior)를 수행할 수 있습니다. 

 +) 객체(object) = 속성 (Attribute) + 기능(Method)

 

- 메서드(Method) : 클래스로부터 생성된 객체를 사용하는 방법으로서 객체에 명령을 내리는 메시지라 할 수 있습니다. 

 

속성 vs 기능 

속성 : 유형/무형의 특징 - > 변수 

기능 : 유형/무형의 특징적인 동작 -> 함수(메서드) 

 

클래스 vs  객체

클래스 : 자료형
객체 : 변수

 

 

 

1. 클래스 정의

 

기본 형태

class 클래스이름:
    def 메서드(self):
        코드

- 생성자의 이름 동일 : __init__(self) 

- 생성자 안에서 필드 선언(self.변수 = x)

 

클래스 메서드에 사용되는 self
- 메소드가 소속되어 있는 객체 자체 의미
- 클래스 외부에서는 변수명으로 객체를 다룰 수 있지만 내부에서는 객체를 지칭할 이름이 없으므로 self를 사용
- java의 객체 자신을 가리키는 this와 같음

 

 

< Car 자료형 선언 > 

1) 자료형 선언 : class 이름: 

2) 생성자 선언 : def __init__(self): 

3) 생성자 안에서 필드 선언 : self.변수 = x 

4) 매서드 정의 : def 변수 이름(self): 

 

if __name__=='__main__': # 시작 지점

: 마지막에 들어가 있어도 문제가 없습니다. 자료형이 선언만 되어 있기 때문입니다. 

 

 

< 메모리 할당 > 

< ( . ) 사용하여 접근 > 

 

< car 멤버변수 접근 출력  > 

{:02x} => 정수를 2자리의 16진수로 출력하되, 2자리 안되면 빈자리를 0으로 채워서 출력하라는 의미입니다. 

 

< car 멤버 메서드 접근 > 

 

- 생성자 안에 매개변수를 넣어서 사용 

결과 ( console ) 

 

 

2. 클래스 생성자 호출 

: 생성자가 호출 되는 순가 메모리에 할당 되는 것이 아니라, 프로그램이 시작하면  메모리에 할당 되어 있는 생성자 입니다. 데이터 속성을 초기화 메소드(__init__())가 아닌 클래스에 직접 정의한다면 객체가 정의되기 이전에 존재합니다. 해당 클래스의 모든 인스턴스가 공유됩니다. 

 

< class 생성자 생성 > 

클래식 생성자 생성

- 생성자 함수 안에서 선언 x, (self)x
- 변수를 바로 선언 = 클래스 생성자(클래스 멤버), [] : 리스트의 자료형으로 선언(리스트로 자료형 관리)
- 인스턴스가 공유하는 멤버로 사용

 

인스턴스 멤버

- self.변수이름 (내부에서 사용될 때는 self. 이 무조건 들어가야 합니다.)

- append(text) : 입력으로 가져오는 데이터를 내가 가지고 있는 데이터 마지막에 추가

 

< 출력 >

결과 ( console ) 

 

 < 비교 > 

 

- 기본적 class 선언

< 출력 > 

결과 ( console ) 

 

 

3. 정적 메서드(Static Method)

: 클래스를 통해 호출 가능한 메서드


- @staticmethod 데코레이터로 수식
- self 매개변수 없이 정의(self 매개변수를 전달받을 방법이 없음)

- 기본 형태 

class 클래스이름:

    @staticmethod
    def 메서드이름(매개변수):
        pass

결과 ( console ) 

- 데코레이션의 형태로 staticmethod를 사용할 수 있도록 합니다. 

 

- static 메서드는 self를 사용하지 않습니다. 

: 왜냐하면 static은 미리 메서드에 할당되어야하고 , self 는 인스턴스 생성이 되어야 메모리에 할당이 되어야 하기 때문에 사용하지 않습니다. 

 

 

 

4. 클래스 메서드(Class Method)

: 클래스를 통해 호출 가능한 메서드

 

- @classmethod 데코레이터와 cls(= class) 매개변수가 필수

 

- 기본 형태

class 클래스이름:
	@classmethod
	def 메서드이름(cls):
		pass

결과 ( console ) 

정적 메서드(Static method)와 클라스 메서드(Class method)는 cls 를 통해서 class를 전달 해주는 차이점을 가집니다. 

 

 

5. private member 

: 클래스의 안에서만 접근이 가능한 멤버.
- 작명법(Naming)으로 private/public 멤버 구분.

 

- private 멤버의 명명 규칙
두 개의 밑줄 __이 접두사여야 함. 예) __number
접미사는 밑줄이 한 개까지만 허용. 예) __number_
접미사의 밑줄이 두 개 이상이면 public 멤버로 간주함 
예) __number__

 

주의 )  앞에 __ 가 있어도 변수 이름 뒤에 _ 2개 이상 오면 public이 됩니다. 

 

결과 ( console ) - method 호출 

 

 

< private 변수 호출 > 

결과 ( console ) - method 호출 

private - error , 자동완성 기능도 수행되지 않습니다. 

 

'Anaconda > Python' 카테고리의 다른 글

[Python] 파일 입출력  (0) 2020.07.30
[Python] 상속(inheritance)  (0) 2020.07.29
[Python] 파이참(PyCharm) 다운로드  (0) 2020.07.28
[Python] 모듈(Module) & 패키지(Package) - in PyCharm  (0) 2020.07.28
[Python] 함수  (0) 2020.07.27