Python 강좌 : 제 27강 - 클래스
클래스(class)
클래스(class)
는 객체 지향 프로그래밍(OOP)에서 특정한 객체를 생성하기 위해서 변수
, 함수
, 메서드
및 이벤트
등을 정의하는 틀입니다.
프로그램을 구성할 때, 동일한 코드나 알고리즘이 반복되거나 함수들을 하나로 묶어주는 공간이 필요하게 됩니다.
클래스를 사용하게 되면 재사용성
, 가독성
, 간결화된 코드
를 구현할 수 있습니다.
예를 들어, 동일한 함수를 사용하더라도 변수를 추가로 더 많이 만들지 않아도 되며 어떤 함수를 실행하기 위해서 선행되어야 하는 함수 등도 중복해서 구문에 포함하지 않아도 됩니다.
- 결과
- 이름은 박XX이고, 나이는 10
이름은 김XX이고, 나이는 30
{‘name’: ‘알 수 없음’, ‘age’: 99}
class 클래스 이름:
을 사용하여 클래스의 이름을 설정할 수 있습니다.
Python의 클래스 이름 표기 방식은 카멜 표기법(CamelCase)
을 따르며, 첫 글자를 대문자로 표기합니다.
def __init__(self)
을 통해 클래스가 생성되었을 때의 변수나 조건 등을 초기화
및 실행
할 수 있습니다.
self
인자는 자기 자신
을 의미합니다. 여기서의 자기 자신은 클래스를 통해 생성된 인스턴스(instance)를 의미합니다.
클래스도 함수처럼 할당해서 사용하게 됩니다. 이때 할당된 변수를 인스턴스라 볼 수 있습니다.
만약 Human
클래스를 두 번 사용해 각자 다른 인스턴스를 생성한다면, 첫 번째로 생성한 인스턴스와 두 번째로 생성한 인스턴스는 서로 영향을 미치지 않습니다.
즉, self
는 인스턴스의 자기 자신을 의미합니다.
self.변수 이름
을 통하여 인스턴스에서 사용될 변수들의 초기값을 할당할 수 있습니다.
name
변수와 age
변수에 아무런 값도 할당되지 않는다면, 알 수 없음
과 99
의 값이 각각 할당됩니다.
man
함수에는 self
, name
과 age
를 매개변수로 사용합니다.
self
는 필수적으로 입력되어야 하는 변수이며, 인스턴스
를 의미합니다.
이 self
의 유/무로도 클래스의 메서드인지, 일반 사용자 정의 함수인지도 구별할 수 있습니다.
또한, self.name
과 name
은 서로 다른 변수입니다.
self.name
은 인스턴스 전반에 걸쳐 영향을 미치며, name
은 함수 내부에서만 영향을 미칩니다.
age
의 값은 10
으로 초기설정이 되어있으므로, age
값을 입력하지 않는다면 10
으로 자동 할당됩니다.
woman
함수에는 name
과 age
를 매개변수로 사용하며 두 개의 변수를 모두 할당해야 오류가 발생하지 않습니다.
만약, 특정 함수에서 self.변수 이름
으로 선언한다면, 인스턴스 내부의 함수에서도 불러와 사용할 수 있습니다.
__init__
에서 초기화하지 않더라도 일반 함수에서도 초기화
, 생성
, 삭제
, 변경
등이 가능합니다.
prt
함수는 출력용 함수이며, 값을 입력하지 않고 호출만으로도 함수가 실행됩니다.
함수에서 어떤 값도 입력받지 않고 싶더라도, self
는 선언해야 사용할 수 있습니다.
클래스 이름
을 변수에 할당하여 클래스의 내부 함수
를 실행시킬 수 있습니다.
변수명.클래스 함수명(매개변수1, 매개변수2)
를 이용하여 a
와 b
변수에 값을 할당할 수 있습니다.
*.prt()
함수는 아무런 인자를 필요로 하지 않으므로, 바로 사용이 가능합니다.
vars(변수이름)
을 사용하여 사전 형식으로 할당된 값을 확인할 수 있습니다.
c
변수에는 __init__(self)
를 통하여 초기화한 값인 알 수 없음
과 99
의 값이 할당되어 있습니다.
상속(inheritance)
상속(inheritance)
은 클래스가 다른 클래스로 부터 생성된 모든 속성을 가져올 수 있는 기능입니다.
부모 클래스(Parent Class, Super Class)
에서 생성된 속성을 자식 클래스(Child Class, Sub Class)
에서 사용할 수 있습니다.
상속을 하더라도, 부모 클래스의 기능을 그대로 사용할 수 있습니다.
상속을 통해 코드를 구성한다면 중복되는 코드가 사라져 더 간결한 코드와 가독성 높은 프로그램을 구성할 수 있습니다.
- Tip : 부모 클래스를 슈퍼 클래스라고도 부르며, 마찬가지로 자식 클래스도 서브 클래스로도 부를 수 있습니다.
- 결과
- Man Class
이름은 김 모 씨이고, 나이는 99
class 클래스 이름(상속 받을 클래스 이름):
을 사용하여 부모 클래스로부터 속성을 상속받을 수 있습니다.
만약 상속 받는 클래스가 여러 개라면, class 클래스 이름(클래스1, 클래스2, ...):
의 형태로 다중으로 상속받을 수 있습니다.
다중 상속시 상속 받을 클래스의 이름이 앞 쪽에 있는 클래스가 우선권을 얻습니다.
즉, 클래스1
과 클래스2
, 클래스3
에 동일한 이름의 메서드가 있다면 클래스1
의 메서드를 상속해옵니다.
부모 클래스에 정의된 내용을 그대로 사용할 수 있으며, 추가적인 기능(prt 메서드)을 포함할 수도 있습니다.
만약 부모 클래스에 정의된 메서드의 이름과 동일한 이름으로 자식 클래스에 생성한다면, 부모 클래스의 메서드는 무시되고 자식 클래스의 메서드가 실행됩니다.
이를 메서드 오버라이딩(Method Overriding)
이라 부릅니다.
즉, 자식 클래스에서 메서드를 재정의해 사용할 수 있습니다.
메서드를 재정의하지 않는다면 부모 클래스의 메서드를 호출합니다.
super().메서드 이름
을 사용해 부모 클래스의 메서드를 호출할 수 있습니다.
또한, super().속성
으로 부모 클래스의 name
이나 age
를 접근할 수도 있습니다.
메서드 오버라이딩을 하더라도, 부모 클래스에 접근해 재정의하기 전의 메서드나 속성을 사용할 수 있습니다.
댓글 남기기