학습 내용 요약
- 클래스
- 상속
1) 정의
클래스는 객체를 생성하는 문법이다. 객체는 검사, 간호사, 프로그래머, 자동차, 체크박스 등의 특정 개념이나 모양으로 존재하는 것이다. 이런 객체를 생성하는 틀이 바로 클래스다.
클래스로 만든 객체는 중요한 특징이 있다. 객체마다 고유한 성격을 가지기 때문에 서로 다른 객체에 영향을 주지 않는다는 것이다. 그렇기 때문에 독립적인 값을 저장할 수 있고, 이를 조합해서 활용할 수 있는 것이다.
위와 같은 프로그래밍 방법을 객체지향형 프로그래밍이라고 한다. 다양하고 복잡한 문제를 잘게 나눠 객체를 만들고, 여러 객체를 조합해 문제를 해결하는 방식이다.
2) 기본 구조
클래스는 갖고 있는 특징인 속성과 동작과 같은 기능인 메서드를 내부에 가진다.
class Warrior:
def __init__(self,name,hp):
self.name = name
self.hp = hp
def attack(self,damage,target):
self.damage = damage
w = Warrior('전사',100)
w.attack(20,'멧돼지')
위 예시에서 name, hp가 바로 속성에 해당하고, attack이 메서드에 해당한다. 위 코드에 나오는 용어에 대해 조금 설명하자면 아래와 같다.
3) 객체 변수, 클래스 변수
객체 내에 정의한 변수는 객체 변수, 클래스 내에 만든 변수는 클래스 변수라고 한다. 객체 변수는 객체의 특성대로 다른 객체 변수에 영향을 주지 않고 독립적인 상태를 유지한다. 하지만, 클래스 변수는 클래스로 만든 모든 객체가 공유하기 때문에, 변경하면 동일한 이름의 각 객체 변수도 변경된다. 따라서, 클래스 변수보다 객체 변수를 더 신경쓰고 사용해야 할 것이다.
1) 정의
상속은 물려받는다는 의미다. 즉, 해당 클래스의 상위 클래스의 특성을 물려받아 만든다는 것을 의미한다. 상속을 표현하기 위해서는 아래처럼 작성하면 된다.
class Warrior(Job):
상속을 받으면 상위 클래스의 속성을 그대로 가져와서 사용할 수 있고, 메서드를 해당 클래스에 맞게 수정해서 쓸 수도 있다. 동일한 이름으로 메서드를 받아와 새로 작성하는 것을 메서드 오버라이딩이라 한다.
2) 이유
기존 클래스를 변경하지 않고 기능을 추가 또는 변경할 때 사용한다. 특히, 기존 클래스가 라이브러리 형태로 제공되거나 수정이 불가능한 상황에서 상속을 사용해야 하는 것이다.
어렵거나 완전히 이해 못한 내용
클래스를 사용해서 상속, 메서드 오버라이딩을 하고 여러 객체를 생성해 보기도 했다. 하지만, 종종 메서드로 받는 매개변수를 어떻게 넣고 활용하는지 헷갈리는 경우가 있었다. 특히, self를 넣는 부분과 아닌 부분을 헷갈려 했는데, 내용을 정리하면서 어느 정도 감을 잡고 있는 중이다. 좀 더 익숙해지도록 연습을 해야겠다.