딩굴댕굴

Python - 16.클래스

by jennysgap

BOX

클래스


16.1 클래스와 객체

클래스란 객체를 만들어내는 공장과도 같다. 

이 객체를 어떻게 사용할 수 있는지를 알려면 클래스의 구조를 보면 된다. 

즉, 클래스는 해당 객체의 청사진(설계도)이라고 할 수 있다.


쉽게 말하면

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

객체란 클래스에 의해서 만들어진 피조물(별 또는 하트가 찍힌 뽑기)을 뜻한다.


16.2 객체와 인스턴스의 차이

클래스에 의해서 만들어진 객체를 인스턴스라고도 한다. 그렇다면 객체와 인스턴스의 차이는 무엇일까? 

이렇게 생각해 보자. kim = Programmer() 이렇게 만들어진 kim은 객체이다. 

그리고 kim이라는 객체는 Programmer의 인스턴스이다. 

즉, 인스턴스라는 말은 특정 객체(kim)가 어떤 클래스(Programmer)의 객체인지를 관계 위주로 설명할 때 사용된다. 

즉, "kim은 인스턴스" 보다는 "kim은 객체"라는 표현이 어울리며, 

"kim은 Programmer의 객체" 보다는 "kim은 Programmer의 인스턴스"라는 표현이 훨씬 잘 어울린다.


16.3 클래스 변수

클래스 변수는 객체간 서로 공유되는 변수로 보통 클래스에 의해 생성되는 객체들이 공통적으로 사용할 목적으로 쓰인다. 

따라서 Service클래스에 의해 만들어진 아이디(객체)는 모두 secret이라는 클래스변수를 사용할 수 있게 되는 것이다.

클래스 변수는 객체를 통한 접근(예:pey.secret)방법 외에 클래스를 통한 접근도 가능하다. 

클래스를 통해 직접 클래스변수에 접근하는 방법은 다음과 같다.

Service.secret


16.4 클래스 함수

클래스 함수는 우리가 앞서 공부했던 함수가 클래스내에 포함된 형태이다. 

함수가 클래스내에 종속되어져 있다는 점만 제외하면 기존 함수와 크게 다를 바가 없다.

클래스 함수는 다른말로 메서드(Method)라고 부른다.

파이썬 메서드의 첫번째 파라미터명은 관례적으로 self라는 이름을 사용한다. 

호출 시 호출한 객체 자신이 전달되기 때문에 self라는 이름을 사용하게 된 것이다. 

물론 self말고 다른 이름을 사용해도 상관은 없다.

(참고. 메서드의 첫번째 파라미터 self를 명시적으로 구현해야 하는 것은 파이썬만의 독특한 특징이다. 

예를들어 자바같은 언어는 첫번째 파라미터인 self가 필요없다.)


16.5 객체 변수

클래스 변수가 객체간 서로 공유되는 변수라면 객체 변수는 객체별로 고유한 값이 저장되는 변수이다.


16.6 __init__ 이란 무엇인가?

위의 Service 클래스를 이전의 클래스와 비교해 보면 바뀐 부분은 딱 한 가지이다. 

바로 setname 함수의 이름인 setname이 __init__으로 바뀐 것이다. 

클래스에서 이 __init__이라는 함수는 특별한 의미를 갖는다. 그 의미는 다음과 같다.

"객체를 만들 때 항상 실행된다."

즉, 아이디를 부여받을 때 항상 실행된다는 말이다. 따라서 이제는 이 서비스 업체에 가입하려면 다음처럼 입력해야 한다.

이전에는 pey = Service()라고만 입력하면 되었지만 이제는 __init__ 함수 때문에 

pey = Service("홍길동")처럼 아이디를 부여받을 때 이름까지 함께 입력해야 한다.


16.7 사칙연산 클래스 만들기

클래스 구조 만들기

제일 먼저 할 일은 a = FourCal()처럼 객체를 만들 수 있게 하는 것이다.

class FourCal: pass

* pass는 아무것도 수행하지 않는 문법이다. 임시로 코드를 작성할 때 주로 사용한다.


객체에 숫자를 지정할 수 있게 만들기

우선적으로 a라는 객체에 사칙연산을 할 때 사용할 2개의 숫자를 먼저 알려주어야 한다.

class FourCal: def setdata(self, first, second):        # 메서드의 입력 인수 self.first = first                             # 메서드의 수행문 self.second = second                   # 메서드의 수행문

setdata라는 메서드를 만들었다. 


더하기 기능 만들기

2개의 숫자값을 설정해 주었으니 2개의 숫자를 더하는 기능을 방금 만든 클래스에 추가해 보자.

class FourCal:
    def setdata(self, first, second):
        self.first = first
        self.second = second
    def sum(self):
        result = self.first + self.second
        return result


이 다음 곱하기, 빼기, 나누기 기능을 만들자 (사칙연산 기능을 가진 클래스 완성)

class FourCal:
    def setdata(self, first, second):
        self.first = first
        self.second = second
    def sum(self):
        result = self.first + self.second
        return result
    def mul(self):
        result = self.first * self.second
        return result
    def sub(self):
        result = self.first - self.second
        return result
    def div(self):
        result = self.first / self.second
        return result

16.8 "박씨네 집" 클래스 만들기

클래스 구상하기

1. 클래스 이름은 HousePark으로 하자. 다음처럼 pey라는 객체를 만든다.

pey = HousePark()

2. pey.lastname을 출력하면 "박씨네 집"이라는 클래스에 걸맞게 "박"이라는 성을 출력하게 만들기로 하자.

print(pey.lastname)

3. 이름을 설정하면 pey.fullname이 성을 포함한 값을 가지도록 만든다.

pey.setname("응용")
print(pey.fullname)

4. 여행 가고 싶은 장소를 입력으로 주면 다음과 같이 출력해 주는 travel 함수도 만들어 보자.

pey.travel("부산")

우선 여기까지만 만들어 보겠다. 



클래스 기능 만들기

class HousePark():
    lastname = "박"
    def setname(self, name):
        self.fullname = self.lastname + name
    def travel(self, where):
        print("%s, %s여행을 가다." % (self.fullname, where))
















출처 - https://wikidocs.net/28

반응형

'BOX' 카테고리의 다른 글

취약점 유형 (OWASP, 국정원, SANS)  (0) 2017.02.24
직무 분석  (0) 2017.02.21
Python - 15.파일 읽고 쓰기  (0) 2017.02.17
모의해킹 관련 사이트  (0) 2017.02.11
Information Security Research  (0) 2017.02.11

블로그의 정보

jennysgap

jennysgap

활동하기