카테고리 없음

인공지능과 미래사회(클래스)

20308박동진 2023. 6. 11. 22:07
클래스(class)란?

이건 따로 개념이라고 할 만한 문장이 없어서 대신 그냥 서술하듯 써보겠습니다.

여러분은 무언가 일상생활에 필요한 것을 만들어 보신적이 있나요? (저는 IOT대회때문에 죽겠습니다;;)

아마 일상생활에 필요한 것은 여러가지 일을 한 번에 해결 할 수 있도록 해 주는 무언가가 가장 필요하다고 느끼실 텐데요, 이를 고안하고 만든 것이 바로 클래스(class)입니다.

 

어렵게 생각하실 게 없습니다.

그냥 여러분이 삼각형을 하나 만들고 싶어요. 파이썬으로, 근데 하나 찍을 때는 뭐 괜찮죠? 근데 이게 2개가 되고 3개가 되고, 4개가 되고... 그렇다면 어떻게 될까요?

(그럼 for문을 쓰면 되는거 아닌가요?)

...

그러면 다른 예를 들어보죠.

저는 일상생활에서 가장 쓸만하고, 가장 잘 만들었다고 생각하는 발명품 중 하나는 단연 계산기라고 생각합니다. 

이는 역시 파이썬에서 구현할 수 있는 쉬운 알고리즘 중에 하나죠? 처음에 값을 저장하기 위해 re1 이라는 전역변수를 만들었다고 생각해봅시다. 그러고 어찌저찌 파이썬으로 원하는 결과를 만들어서 마침내 2 와 +, 4를 입력하면 6을 출력하는 하나의 알고리즘을 만들었다고 생각해봅시다. 근데 갑자기 계산기가 2개가 필요한 상황이 와 버린겁니다. 그래서 여러분은 눈물을 머금고 ctrl+c, v를 해서 하나를 더 만들고 전역변수 re2를 만들었어요, 근데 또 갑자기 계산기가 3개가 필요하고, 4개가 필요하고, 5개가 필요하다면, 여러분은 어떻게 될까요? 아마 돌아버리겠죠? 이런 경우를 대비해서 우리는 클래스라는 것을 사용하여 이런 상황을 쉽게 타파할 겁니다.

 

그러기 위해서는 먼저 개념을 몇 가지 알아야 하는데, 가장 중요한 것이 '객체'와 '인스턴스'입니다.

이를 붕어빵 기계를 빌려 예시를 들어보면 '붕어빵'은 '객체'에 비유할 수 있고, 붕어빵을 만드는 '틀'은 '클래스'에, 붕어빵은 붕어빵 틀의 '인스턴스'다 라고 말 할 수 있습니다.

..라고 하는데 솔직히 이해 안됩니다. 그래서 몇 가지 찾아봤는데, 

클래스(class)란 똑같은 무엇인가를 계속해서 만들어 낼 수 있는 설계 도면이고,

객체(object)란 클래스로 만든 피조물(붕어빵)을 말합니다.

인스턴스()는 붕어빵처럼 특정 객체를 지정해서 말하면 '객체'라고 표현하고, 그 객체를 생성한 클래스와의 관게를 이야기하면 '인스턴스'라고 합니다.

즉,

붕어빵은 객체이며,

객체인 붕어빵은 붕어빵틀의 인스턴스지만,

붕어빵은 붕어빵틀의 객체인건 아니다.

가 성립됩니다.

 

 

객체와 클래스 변수

- 클래스위 다양한 기능들도 클래스 안에서 수행되기 때문에 : 을 사용하여 범위를 명시

- pass는 continue와 비슷한 의미로 내용이 없을 시 지나치라는 의미임

- 클래스로 객체를 생성하기 위해서는 "객체 이름 = 클래스()" 형식으로 생성

class Triangle :
	pass

tri1 = Triangle()
tri2 = Triangle()

 

 

- 클래스 변수와 인스턴스 변수가 존재함

- 클래스 변수는 클래스 안에서 선언된 변수, 객체가 아닌 클래스에 종속된 변수임

- 클래스 변수는 같은 클래스로 만들어진 인스턴스끼리 공유하고 접근이 가능.

- 클래스 변수는 위의 예시처럼만 하면 됩니다. "객체이름.변수이름"형식.

- 객체에서 클래스 변수값을 변경하더라도 클래스에는 영향이 가지 않습니다.(tri1.height의 값을 8로 바꾼다고 해서 height의 값 자체가 변하지 않음)

class Triangle :
	height = 10
	bottom = 4

tri1 = Triangle()
print(tri1.height)
print(tri1.bottom)

tri2 = Triangle()
print(tri2.height)
print(tri2.bottom)

 

 

인스턴스 변수와 메소드(method).

- 메소드(method)는 클래스 안에서 어떠한 기능을 하는 함수로,이를 이용해 객체 정보를 지정할 수 있음

- 메소드(method)는 사용자가 전달 인자를 입력하지 않는 매개변수 self를 사용. 

class Triangle :
    def setData(self, b, h) : #메소드(self == tri1, b == 4, h == 5) 
        self.b = b		// == tri1.b = b, tri1.setData(4, 5)에서 전달받은 값 저장(인스턴스 변수)
        self.h = h		// == tri1.h = h, tri1.setData(4, 5)에서 전달받은 값 저장(인스턴스 변수)

tri1 = Triangle() #객체 생성
tri1.setData(4, 5) #객체 메소드 실행
print(tri1.b, tri1.h)

 

- " def 메소드명(self) :  return 원하는 리턴값 " 을 사용하여 원하는 값을 얻을 수 있습니다.

class Triangle :
    def setData(self, b, h) : #메소드
        self.b = b
        self.h = h
    
    def area(self) : #def area() : 불가능
        return self.b * self.h / 2 #
   
tri1 = Triangle() #객체 생성
tri1.setData(4, 5) #객체 메소드 실행

print(tri1.b, tri1.h, tri1.area())
생성자와 메소드

- 객체 생성과 동시에 초기값을 설정하는 메소드를 '생성자(constructor)'라고 함.

- __init__(self, ,) 형태로 작성하며 그 예시는 아래와 같음.

class Triangle :
    def __init__(self, b, h) : #생성자
        self.b = b
        self.h = h
    
    def area(self) :
        return self.b * self.h / 2

tri1 = Triangle(4, 5) #호출하면서 바로 인자 전달

print(tri1.b, tri1.h, tri1.area())

...추가 예정인 글입니다.