파이썬의 프로그래밍 언어는 객체지향 프로그래밍 언어(Object Oriented Programming)이다. 객체 지향 프로그래밍이란 객체를 우선으로 생각해서 프로그래밍 한다는 의미이다. 클래스 기반의 객체 지향 프로그래밍 언어는 클래스(class)라는 것을 기반으로 객체(object)를 만들고, 그러한 객체를 우선으로 생각해서 프로그래밍해야 한다.
객체
프로그램을 만들 때는 우선 '우리가 어떤 데이터를 활용하는가?'를 생각하게 된다. 학생 성적 관리 프로그램을 만든다면 학생 이름, 학번, 과목별 성적 등이 필요하다. 딕셔너리로 학생을 표현하고 이를 리스트로 묶어 학생들을 표현한다. 이처럼 여러가지 속성을 가질 수 있는 대상을 객체(object)라고 부른다. 그런데 딕셔너리로 객체를 하나하나 만드니 조금 복잡하고 귀찮다. 딕셔너리를 만들 때 키를 잘못 입력하는 실수 등이 일어날 가능성도 있다. 딕셔너리를 생성하는 코드를 다음과 같은 경태의 함수로 만들면 어떨까? 딕셔너리를 입력할 때보다 쉽고, 키를 잘못 입력하는 실수도 하지 않게 된다.
이처럼 객체와 관련된 코드를 분리할 수 있게 하는 것이 객체 지향 프로그래밍의 핵심이다. 그런데 이런 코드가 너무 자주 사용되다 보니, 개발자들은 클래스(class)라는 구조를 만들게 되었다. 위와 같은 형태의 코드를 조금 더 효율적으로 만들기 위한 기능이라고 생각하면 된다.
클래스 선언하기
클래스는 객체를 조금 더 효율적으로 생성하기 위해서 만들어진 구문이다.
클래스는 다음과 같은 구문으로 생성한다.
class 클래스 이름:
클래스 내용
이렇게 만들어진 클래스는 클래스 이름과 같은 함수(생성자)를 사용해서 객체를 만든다.단순하게 생각하면 위 코드의 create_student() 함수와 같은 것이다.
인스턴스 이름(변수 이름) = 클래스 이름() -> 생성자 함수라고 부른다.
이러한 클래스를 기반으로 만들어진 객체를 인스턴스(instance)라고 부른다.
생성자
클래스 이름과 같은 함수를 생성자(constructor)라고 부른다. 클래스 내부에 __init__ 라는 함수를 만들면 객체를 생성할 때 처리할 내용을 작성할 수 있다.
class 클래스 이름:
def __init__(self, 추가적인 매개변수):
pass
클래스 내부의 함수는 첫 번째 매개변수로 반드시 self를 입력해야 한다. 이때 self는 '자기 자신'을 나타내는 딕셔너리 라고 생각하면 된다. 다만 self가 가지고 있는 속성과 기능에 접근할 때는 self.<식별자>형태로 접근한다.
메소드
클래스가 가지고 있는 함수를 메소드(method)라고 부른다. 클래스 내부에 메소드를 만들 때는 다음과 같이 사용한다. 생성자를 선언하는 방법과 똑같다. 다만 첫 번째 매개변수로 self를 넣어야 한다는것을 기억하자.
class 클래스 이름:
def 메소드 이름(self, 추가적인 매개변수):
pass
위에서 만들었던 student_get_sum(), student_get_average(), student_to_string() 함수를 클래스 내부에 구현해 보겠다. 앞에서는 매개변수로 student를 받았었는데, 이번에는 함수를 생성할 때 self를 입력한다.
클래스의 추가적인 구문
클래스를 사용하는 것은 작정하고 속성과 기능을 가진 객체를 만들겠다는 의미이다. 그래서 파이썬은 그에 따른 부가적인 기능을 지원한다. 예를 들어 어떤 클래스를 기반으로 그 속성과 기능을 물려받아 새로운 클래스를 만드는 상속, 이러한 상속 관계에 따라서 객체가 어떤 클래스를 기반으로 만들었는지 확인할 수 있게 해주는 isinstance()함수, 파이썬이 기본적으로 제공하는 str() 함수 혹은 연산자를 사용해서 클래스의 특정 함수를 호출할 수 있게 해주는 기능등이 대표적인 예이다.
'Python' 카테고리의 다른 글
파이썬 함수 (0) | 2023.07.30 |
---|---|
파이썬 문자열, 리스트, 딕셔너리와 관련된 기본 함수 (0) | 2023.07.30 |
파이썬 범위 자료형과 while 반복문 (0) | 2023.07.30 |
파이썬 딕셔너리와 반복문 (0) | 2023.07.30 |
파이썬 반복문 (0) | 2023.07.29 |