본문 바로가기
Programming/Python

파이썬 코딩 따라하기(기본) - 클래스

by Deongeun 2020. 12. 30.

 

[ 클래스 Class ]

 

계산기는 수를 계속해서 계산하려면 이전에 계산된 결과값을 기억하고 있어야한다.

1-2개의 계산기가 필요할때는 각각의 함수를 만들 수 있겠지만

만약 여러개의 계산기가 필요한 상황이라면 많은 함수를 만드는 것이 힘들다.

이때 필요한 것이 클래스이다. 하나의 클래스만 만들어 놓으면 수많은 계산기가 필요해도 각각의 함수를 모두 만들지 않아도된다.

 

붕어빵을 만들때는 반죽을 붕어빵 틀안에 넣고 구워내면 붕어빵이 만들어진다.

클래스도 이와 같은 원리라고 보면 되는데, 클래스라는 틀 안에 뭔가를 넣으면 그 틀의 모양대로 생성된다.

그리고 틀에서 생성된 객체(붕어빵)인스턴스라고 한다.

 

- 다음과 같이 order라는 클래스를 생성했을 때

order라는 클래스에 속하는 order1 order2라는 객체를 만들어주면 아래와 같이 결과가 나온다.

더보기

Tim님 주문하신 커피가 완성되었습니다
가격은 4000, 칼로리는 350입니다.
Jamie님 주문하신 커피가 완성되었습니다
가격은 4500, 칼로리는 550입니다.

이때 order1과 order2는 order라는 클래스의 인스턴스라고 할 수 있다.

 

 

apple = A( ) 

A는 클래스, apple은 객체 일때 apple이라는 객체 A의 인스턴스이다.

인스턴스는 특정 객체가 어떤 클래스의 객체인지 관계위주로 설명할때 사용된다.


멤버변수

: 클래스 안에서 정의된 변수

위 예시에서 보자면 self.name

                                    self.price

                                    self.calories 에 해당한다.

 

더보기

Wendy님, 내야할 돈 : 3500

- (인스턴스 이름.변수) 형태로 사용하면 멤버변수를 외부에서도 사용 가능하다.

 

 

더보기

Lisa님 주문하신 커피가 완성되었습니다
가격은 2500, 칼로리는 400입니다.
Lisa님 할인 적용되었습니다

- 클래스 내부에는 없는 vip라는 변수를 추가로 할당했다

- 클래스외부에서 원하는 변수를 확장 가능

   확장한 변수는 특정 객체에서만 적용되고 기존에 있던 다른 객체에서는 적용이 안된다.

 

 

 

 

메소드

클래스 내에 함수를 다른말로 메소드(method)라고도 한다.

더보기

Lisa님 주문하신 커피가 완성되었습니다
가격은 4100, 칼로리는 20입니다.
Lisa님이 Americano을 주문했습니다, 가격은 4100입니다
Lisa님이 4000을 냈습니다
Lisa님 돈이 모자랍니다

- make, pay라는 메소드를 만들어주었다.

 

- 메소드를 만들때, 첫번째 입력인수 self라는 변수를 통해 첫번째 인수에는 자동으로 자기자신을 의미하는 인스턴스

  입력(self)으로 들어간다. /  위의 예시에서 self로 들어가는 입력값은 order1

 

- 메소드에서 'self.name, self.price' / 'menu' 와 같이 앞에 self의 존재여부가 다른데,

'self.변수' : 클래스에 있는 멤버변수의 값을 출력하는 것이고 'self가 없는 변수' : 전달받은 값을 사용하는 것이다.

 

 


클래스의 상속

: 어떤 클래스를 만들때 다른 클래스의 기능을 물려받을 수 있게 만드는 것

class 상속받을 클래스명 (상속할 클래스명)

- 상속할 클래스: order

  상속받을 클래스: easyorder

 

- order에 있는 name, price 속성을 가져오고, calories는 easyorder내에서 정의내린다. 

   order.__init__(self, name, price)
   self.calores = calories

 

 

 

다중상속

: 다중의 부모 클래스를 상속받는것

- 위의 클래스들에 이어서 다음과 같은 클래스들을 추가해주었다.

 

- onlineorder라는 클래스를 생성하고 delivery라는 함수를 만들었다.

 

- class onlineeasyorder(easyorder, onlineorder): 는 클래스 easyorderonlineorder를 상속받겠다는 뜻이다.

  사용할 변수들을 __init__으로 불러오고,

  easyorder에서 (self, name, price, calories)를 받아오고

  onlineorder에서 (self, website)를 받아온다.

 

- order1에 onlineeasyorder라는 클래스를 적용시키고 delivery 함수를 줬을때, 다음과 같이 출력한다.

더보기

Danny님의 주소는 Newyork 7st입니다. 주문지 정보는 배달의민족입니다

 

 

 

 

소드 오버로딩

: 부모클래스에서 상속받을 대상인 클래스의 메소드와 이름은 같지만 다르게 실행되어야할 때,

  메소드를 새롭게 정의해서 사용하는 것

 

- > 일반주문은 할인이 안되고, 온라인주문은 할인이 가능하며 할인율을 말해주는 결과값을 출력할 것이다.

- 새롭게 discout라는 변수를 만들어주었다.

self. discount = discount를 추가해준다

- sale이라는 함수를 만들었다.

 

- 상속받는 클래스에도 discount라는 변수를 추가해줘야한다.

- 위에서 만든 sale 함수를 onlineeasyorder 클래스에서 새롭게 정의해준다.

- 위처럼 입력값을 줬을때 결과는 아래와 같이 도출된다.

더보기

[일반주문]
Jenny님 주문은 할인 x입니다.
[온라인주문]
Tom님 주문은 할인 o입니다. 할인율은 15%입니다

 

 

pass

: 아무것도 수행하지 않는 문법

  임시로 코드를 작성할때 주로 사용한다.

더보기

가게를 오픈했습니다

 

 

 

super

클래스에서 상속받는 부모클래스의 정보를 초기화할때 super를 이용할 수 있다.

ex) class onlineeasyorder(easyorder, onlineorder):
     def __init__(self,name,price, calories, website):
          easyorder.__init__(self, name, price, 0, calories)

     ->  super().__init__(name, price, 0, calories)

 

 

 * 단, 2개 이상의 부모클래스를 상속받을때는 첫번째로 상속받는 클래스만 인식하게 된다.

 따라서, 다중상속시에는 각각의 부모클래스를 적어줘야한다.

더보기

부모클래스1