객체지향 class python - hjh

객 체 지 향 프로그래밍과 클래스


기존까지 어려웠던 코딩방식은 컴퓨터 사고 위주라 코딩이우리 사고와 맞지 않는 부분이 생기는데요, 사람의 사고에 맞는 코딩을 해보자 하고 만들어진게  객체지향 언어입니다. 예를 들어 사람이 사물을인식할땐 눈으로 사물의 겉모양을 인식하고 기능을 인지합니다.

, 사람은사물을 보고 쟤가 무엇인지 쟤가 무엇을 할 수 있는지로 판단합니다. 이를 코딩에 빗대어보면 사물을 인식하는것은 변수라고 할 수 있고 속성이라고 합니다. 

Ex ) 높이는 얼마더라 단단함은 얼마더라  >> 속성

사물의 기능을 아는 것을 함수라고 할 수 있습니다.

Ex ) 쟤는 무엇에 쓰이는 물건이더라, 무엇을 할 수 있더라

객체 = 변수(속성) + 함수(기능)

기존의 코딩방식은 컴퓨터 사고 방식이라 변수와 함수를따로 분리하여 관리하였는데, 객체같은경우엔 변수와 함수를 함께 묶어서 관리하는데요. 이를 class라고 합니다.

 

그렇다면 Class 내부엔 함수와 변수가있는 것을 알 수 있는데요, 특별히 class 내부의 함수를 메서드(method)라고 부릅니다. 메서드는 이함수의 기능파트를 담당하고있으므로 메서드는 class를 사용할 방법이라고 생각하면 편합니다. 코드로 표현하자면 (클래스이름).(메소드) .을이용해 사용합니다.

 

예를 들어 펜을 class로 표현하자면

Class pen :


변수로는 색, 재질이있을 수 있겠고
메소드로는 쓰기라는 것이 있을 수 있습니다. 이렇게 정의내리면  규정된 것을 본딴 내가만든 예시를 instance라고 합니다. 쉽게 풀어내자면,  내가 정의한 당시에는 pen은 존재하지 않습니다. Pen의 설계도만이 존재할 뿐입니다. 제가 따로 만들라고 명령을 내려야 pen이 생깁니다 이때 pen이 생길 때 이 peninstance라고 합니다.  코드로는 myPen = pen() 으로 표현 할 수 있고 pen()은 설계도,  myPen은 설계도로 만든 결과물(instance)라고 할 수 있습니다
.

                                                                                                                                                  

Q.
정수에 대한 규정 = class 에 맞는 데이터 123,456을 만들어냈다.메모리에 저장을 하게 되면 메모리에 할당이 되고  그메모리는 num1의 이름을 갖고 있고 123의 정수를 포함하고있다.

 

여기서 123 456은 정수의 인스턴스라고 합니다. 컴퓨터에서  저장된 곳의 위치가 다르므로

다른 인스턴스라고 할 수 있습니다.

변 수

메모리

L1

L2

 

100 번지

100번지

100번지

 

1

2

3

 

 

Ex ) L1 = [1,2,3]  l2=l1 은 같은 리스트에 대한 참조이고같은 리스트

    

 

 

 

 

 

정의하는법

Class (class 이름) :

클래스의 이름은 첫글자를 대문자로 하며 띄어쓰기대신대문자를 쓰는게 관례입니다.
class
를 인스턴스로 만들 때 메모리에 할당됩니다. 인스턴스가 만들어질 떄 함수의 호출이된다고 생각하면 됩니다.

 

)

 

 

 

 

실습

Car라는 (color, size, disp변수와 메서드를 가진) class 를 만들고 Mycaryourcar라는 인스턴스를 만든다.

인스턴스

메모리

Mycar

 

 

yourcar

Color

Size

Disp

Color

Size

Disp

 

 

 

 

 

 

 

 

 

Mycar yourcar는 동시에 같은 변수와 메서드를 가지게되는데 바로 메모리에입력되는 변수와는 달리 메서드는 주소값으로 가지고 있으므로  중복이 되어  따로 관리합니다. 

__init__

F >> 어느 인스턴스에서 실행될 메소드인가? 알수 없음

Back

Left

Right

 

 

<< myCar yourCar가 공유하는 메소드 메모리 >>

 

--init-- : 해당 인스턴스를 초기화하는 특수 메소드

 

 

 

 

 

 

 

 

 

여러 인스턴스에서 공유되는 메소드 메모리에서 실행될때 고려해야 하는점이 어느 인스턴스에서 실행되야하는 것인가 입니다. 여기서 사용되는 매개변수가 self인데요

매개변수인 Self 는이 인스턴스에 대한 참조입니다. 한 인스턴스에서 self를통해 메소드 메모리에게 내가 이 메소드를 사용할게!! 라고 신호를 보내면 메소드 메모리에서 그 self 매개변수를 받아 어느 인스턴스에서 메소드를 사용해야 되는지 파악할 수 있습니다. Java C++에선 this와같은 의미로 사용됩니다.

Class cal

Def add(self, txt):
   ….

.
.
.

self.add()  ##  Cal 클래스에서 add를 사용하려면 인스턴스를 만들어야 하지만 class 내부에 add가 있기 때문에 self를 이용해 add메서드를 이용합니다.

 

여러 인스턴스를 만들다보면 원본에 해당하는 데이터를조금만 변경해서 생성하고 싶을 때가 있습니다.

그런경우에는 변수를 직접 변경하는 게 편할 수 있지만프로그램이 방대해질수록 이러한 작업이 힘들어지기 때문에 따로 이러한 기능을 하는 메서드를 만들어서 객체로 접근하여 변경하는 습관이 필요합니다.

A 라는 class b()메서드가 값을 변경시키는 역할을 할 때

C class 에서 변수를 조정하기위해선

From A import b

Class C:

## set_A는 인스턴스

Set_A = A()

Set_A.b() ## 인스턴스화 했기 떄문에 set_A가 A()클래스의 권한을 얻습니다.

의 형태로 만들면 됩니다. Set_A는 붕어빵(인스턴스)이고 A는 붕어빵모양 틀(실제 클래스) 로 생각하면 됩니다.

 


덧글

댓글 입력 영역