객체지향(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 |