2019/01/29 - [Language/Python] - [Python 따라하기]1. Python 설치하기
2019/02/05 - [Language/Python] - [Python 따라하기]2. 자료형_part 1(String, Int,Float, List)
2019/02/12 - [Language/Python] - [Python 따라하기]3. 자료형_part2(Tuple,Set,Dictionary)
2019/02/19 - [Language/Python] - [Python 따라하기]4.조건문
2019/02/26 - [Language/Python] - [Python 따라하기]5. 반복문(For, While, break, continue)
2019/03/05 - [Language/Python] - [Python 따라하기]6. 함수만들기(def, print, format)
2019/03/12 - [Algorithm/Python] - [Python 따라하기]7.파일 입출력 (File I/O)
클래스를 사용하는 이유
클래스를 사용하지 못하면 프로그램을 만들지 못하는 것은 아니다. 클래스를 사용하지 않더라도 충분히 좋은 프로그램을 만들 수 있다.
하지만 클래스를 사용할 수 있다면 조금 더 편한 프로그램을 만들 수 있을 뿐이다.
예를 들어 계산기가 있다고 하자. 계산기에서 연산을 할 때 값들을 계속 누적해서 진행해야 한다. 그러기 위해서는 계산기당 하나의 전역변수와 하나의 함수가 필요하다. 하나의 계산기가 있는 것이라면 문제가 없지만 만약 여러 개의 계산기를 동시에 사용을 해야 한다면 어떻게 해야할까? 계산기가 늘어날 수록 전역변수와 함수가 계속 추가되어야 한다. 그러면 추가될수록 메모리를 많이 차지하게 될 것이다.
하지만 클래스를 사용한다면 하나의 변수와 함수만으로도 독립적인 값들을 유지할 수 있다.
클래스와 객체
클래스와 객체의 관계는 다음과 같이 설명 할 수 있다.
* 신입생 -> 클래스(class)
* 학생1,학생2, .... -> 객체(object)
클래스란 똑같은 무엇인가를 계속해서 만들어낼 수 있는 하나의 틀 같은 것이고(신입생), 객체란 클래스에 의해서 만들어진 것을 뜻한다.
클래스에 의해서 만들어진 객체는 서로 독립적인 성격을 가진다. 하나의 학생의 학적사항이 변동되더라도 다른 학생들에겐 영향을 주지 못하는 것과 같다. 다음은 하나의 간단한 클래스 예시이다.
위의 클래스는 아무런 기능을 가지고 있지 않다. 그래도 이 클래스는 객체를 생성할 수 있다. 다음은 객체를 만드는 방법이다.
학생정보 클래스 만들기
본격적으로 신입생들을 위한 학생정보를 만들어보도록 하자.
학생정보에 들어갈 수 있는 변수로는 이름, 학번, 성별 그리고 듣는 과목들이 있을 것이다. 학생정보에 들어갈 수 있는 함수들로는 각 변수를 설정하는 함수와 총 듣는 과목의 수를 반환해주는 함수, 과목을 추가해주는 함수가 있다고 하자. 다음은 학생정보를 담고 있는 Student 클래스이다.
위의 클래스를 하나씩 뜯어서 확인해보자.
__init__(생성자)
클래스 부분에서 __int__이 있다. 여기서 init 앞 뒤에 있는 것은 '_' 두 개씩 있는 것이다.
클래스에서 이 함수를 생성자라고 부른다. 생성자란 객체가 생성될 때 자동으로 호출되는 메소드이다. 객체의 초기값의 설정을 해줘야 할 때 사용을 한다.
Student의 클래스는 name, s_id, gender ,course라는 변수를 받고 이를 객체의 정보에 저장을 한다. 이 때 self를 사용하는데 지금 생성된 객체에 작용하는 작업이라고 생각하면 된다. 만약 기본 초기값이 설정되어 있지 않으면 변수들중 하나의 값이라도 넣지 않는다면 TypeError가 발생한다.
__str__(출력)
클래스 부분에서 __str__이 있다. 이것을 문자열화 함수라고 한다. 객체를 출력할 때의 형식을 지정해주는 함수이다.
__eq__(비교자)
클래스 부분에서 __eq__가 있다. 이것을 비교 함수라고 한다. 객체간의 값을 비교(==)할 때 사용을 한다.
클래스 내장 함수
일반적으로 string이나 list에서 제공해주는 함수처럼 이 클래스에서 제공해주는 함수이다.
상속
여기서 상속은 "재산을 상속받다" 라고 할 때의 상속과 같은 의미이다. 어떤 클래스를 만들 때 다른 클래스의 기능을 물려받을 수 있는 것이다. 이 상속의 개념을 이용해서 각 학과 별로 신입생에게 기능을 추가할 수 있다. 예를 들어 컴퓨터공학과 학생들에게는 파이썬을 할 수 있는지 물어보는 함수가 있다고 하자. 그러면 다음과 같이 Student 클래스를 상속받아 기능을 추가 할 수 있다. 그리고 상속 클래스를 만들 때는 다음과 같은 형식을 가진다.
class <<자식 클래스 이름>>(<<부모 클래스 이름>>):
<<내용>>
Computer_Student에서 구현을 하지 않았지만 Student의 내용들을 상속받았으므로 Student의 생성자, 문자열화 함수등의 내용들을 사용할 수 있다.
그리고 또한 Computer_Student에서만 구현된 canDoPython도 사용이 가능하다.
메소드 오버라이딩
메소드 오버라이딩은 상속받은 클래스에서 부모 클래스에 정의된 함수를 상속받은 클래스에서 재정의함으로써 사용을 하는 것이다. 컴퓨터 공학과 학생들은 수강신청을 할 때 6과목이 넘는다면 신청을 할 수 없다는 기능을 추가해주고 싶다. 그러면 동일한 이름으로 재정의를 해서 부모클래스의 함수를 덮어버리는 것이다.