일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 파이토치
- DP
- 머신러닝 기초
- 정렬
- loss
- AI
- 스택
- 백준
- 딥러닝
- 머신러닝
- 강의자료
- 알고리즘
- 자연어처리
- rnn
- BAEKJOON
- Softmax
- tensorflow
- 홍콩과기대김성훈교수
- DynamicProgramming
- pytorch
- machine learning
- Deep learning
- 파이썬
- Hypothesis
- MSE
- Cross entropy
- 강의정리
- classifier
- Natural Language Processing with PyTorch
- Python
- Today
- Total
개발자의시작
파이썬 클래스(class) 이해하기 1 본문
파이썬은 객체 지향 프로그래밍(Object Oriented Programming) 언어로써 클래스(class)를 지원합니다.
클래스는 일종의 새로운 자료형을 의미합니다. 기존에 알고 있던(int, float, double 같은) 자료형 외에 사용자가 원하는 형태의 자료형을 만들어서 쓸 수 있도록 한 것이 클래스입니다. 객체 지향 프로그래밍을 위해서는 객체를 정의하여야 합니다. 이러한 객체들이 서로 상호작용하여 객체의 상태가 바뀌어 원하는 결과를 얻는 프로그램 방식이 바로 객체 지향 프로그래밍입니다.
- 용어 정리
※클래스(class)
- 클래스는 프로그램이 실행되었을 때 생성되는 객체가 어떤 멤버 변수와 메서드를 갖는지 정의해둔 것을 말합니다.
*개념
- 객체를 만들어 내기 위한 설계도 혹은 틀
- 연관되어 있는 변수와 메서드의 집합
※객체(object)
- 객체는 멤버 변수(데이터)와 멤버 메서드(자신의 데이터(상태)를 변경하는 함수)로 구성이 됩니다.
*개념
- 소프트웨어 세계에 구현할 대상
- 클래스에 선언된 모양 그대로 생성된 실체
*특징
- 클래스의 인스턴스 라고도 부른다.
- 객체는 모든 인스턴스를 대표하는 포괄적인 의미를 갖는다.
- oop의 관점에서 클래스의 타입으로 선언되었을 때 '객체'라고 부른다.
※인스턴스(instance)
- 인스턴스(instance)는 클래스 정의로부터 생성된 것을 인스턴스라고 합니다.
*개념
- 설계도(클래스)를 바탕으로 소프트웨어 세계에 구현된 구체적인 실체.
- 즉, 객체를 소프트웨어에 실체화 하면 그것을 '인스턴스'라고 부른다.
- 실체화된 인스턴스는 메모리에 할당된다.
*특징
- 인스턴스는 객체에 포함된다고 볼 수 있다.
- oop의 관점에서 객체가 메모리에 할당되어 실제 사용될 때 '인스턴스'라고 부른다.
클래스, 객체, 인스턴스의 차이
클래스(class) vs 객체(object)
- 클래스는 '설계도', 객체는 "설계도로 구현한 모든 대상"을 의미한다.
객체(object) vs 인스턴스(instance)
- 클래스의 타입으로 선언되었을때 객체라고 부르고, 그 객체가 메모리에 할당되어 실제 사용될때 인스턴스라고 부른다.
- 객체는 현실세계에 가깝고 인스턴스는 소프트웨어에 가깝다.
클래스의 선언은 class로 시작해서 이름과 함께 콜론(:)을 사용합니다.. 메서드는 함수와 같은 형식으로 작성하는데, 차이점으로 함수의 첫번째 인자는 반드시 self 를 사용해야합니다. self의 의미는 클래스 자신을 가리키는 것 입니다. 메소드 호출 시 파이썬이 내부적으로 클래스 자체의 참조를 넘기게 됩니다.
※ __init__()
클래스의 속성들을 초기화할 때 사용하며 초기자라고 한다.
1
2
3
4
5
6
7
8
9
10
|
class Person:
def __init__(self):
self.name="홍길동"
self.age=25
p=Person()
print(p.name)
print(p.age)
|
위의 예는 Person()이라는 클래스를 정의하고 변수로 정의한 것입니다. 위의 코드로 살펴보면 Person 클래스는 self를 사용하여 자기 자신의 객체를 "홍길동"과 25를 가집니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
|
class Person:
def __init__(self,name,age):
self.name=name
self.age=age
p1=Person("홍길동",25)
p2=Person("김철수",34)
print(p1.name)
print(p1.age)
print(p2.name)
print(p2.age)
|
위의 코드를 살펴보면 클래스를 호출하는 것과 동시에 매개변수를 전달하는 코드입니다. p1과 p2는 객체를 인스턴스화(객체 생성)한 변수가 됩니다. 객체를 생성할 때 초기자에 self 뿐 아니라 name과 age를 전달받아 객체의 값으로 사용합니다. 여기서 self.name과 name은 다른 것이며 name은 앞서 말한 것과 같이 전달받은 매개변수이고 self.name은 객체가 갖는 변수입니다. 실행결과는 홍길동,25 김철수 34를 갖는 P1과 p2 객체를 나타냅니다.
위의 예들은 속성에 접근하여 출력을 하는 코드였습니다. 이번에는 메서드를 정의하여 클래스에서 출력을 해봅니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
class Person:
def __init__(self,name,age):
self.name=name
self.age=age
def disp(self):
print(self.name,self.age)
p1=Person("홍길동",25)
p1=Person("김철수",34)
p1.disp()
p2.disp()
|
위와 같이 초기화 외에도 disp 메서드를 정의하여 클래스 내에서 출력을 정의할 수도 있습니다.
- 클래스 접근 제한자
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
class Score:
def __init__(self):
self.kor=90
self.__eng=70
self.math=50
def disp(self):
print(self.__eng)
s1=Score()
print(s1.eng)
s1.disp()
|
위와 같이 __을 사용하고 print() 함수를 사용하여 eng를 출력하면 실행 에러가 발생합니다. 이러한 것을 접근 제한자라고 하며 이를 출력하기 위해서는 disp()와 같이 메서드를 통해서 출력할 수 있습니다. 이와 같은 접근 제한자를 사용하는 이유는 무분별하게 속성 값을 변경하는 것을 방지하기 위해 사용합니다.
'프로그램언어 > python' 카테고리의 다른 글
파이썬(python) 메모리 관리 2 (0) | 2021.04.30 |
---|---|
파이썬(python) 메모리 관리 1 (0) | 2021.04.30 |
파이썬 클래스(class) 이해하기 2 (0) | 2020.06.17 |