본문 바로가기

프로그래밍 언어/AI & 파이썬_Python

파이썬 Python 코딩_11_Class클래스

클래스(Class)와 오브젝트(Object)는 객체지향 프로그래밍에서 사용하는 용어들이다.

클래스는 함수와 변수로 이루어져 있는 틀이다.

오브젝트는 클래스(틀)를 이용해서 만든 객체(물체)라고 할 수 있다.

이렇게 클래스에 의해 만들어지는 객체를 파이썬에서는 instance(인스턴스)라고 부른다.

코틀린에서 클래스와 오브젝트를 빵틀과 빵으로 설명 했으므로 코틀린 쌩초보 기초22를 참고하기 바란다.

 

클래스 만들기

 

클래스를 하나 만들어 보자.

 

Person(펄슨; 사람, 개인)이라는 클래스를 만들려면 다음과 같이 작성한다.

 

 

클래스 이름(명)은 변수와 구분하기 위해 대문자로 시작한다.

2개 이상의 단어라면 각 단어의 첫글자를 대문자로 하고 붙여서 적는다.

(예: GoodPerson)

 

함수 만들기

 

그 다음에 함수를 하나 만들어 보자.

함수명은 say_hello (안녕이라고 말하다) 라고 하자.

 

 

say_hello라는 함수를 정의하고 괄호 안에는 매개변수 self(자기 자신)를 만들었다.

함수가 실행하는 내용은 "안녕"이라고 출력(print)하는 것이다.

 

매개변수(parameter; 파라미터) 함수에 전달할 '외부의 인자(데이터)'를 가리킨다.

파이썬에서는 클래스 안에 만드는 함수의 첫번째 매개변수 이름은 self로 하는 것을 원칙(약속)으로 한다.

self는 자기자신을 가리킨다.

매개변수는 코틀린 쌩초보02를 참고한다.

 

인스턴스(객체) 만들기

 

이렇게 만들어진 클래스로 인스턴스(객체)를 만들어 보자.

인스턴스 (객체) 이름을 p라고 하면 다음과 같이 작성한다.

 

 

위 코드는 p라는 인스턴스 변수에 Person클래스 함수를 저장하라는 뜻이다.

이렇게 클래스명으로 만들어진 함수를 생성자(Constructor) 함수라고 부른다.

결국 p에는 Person클래스가 들어있는 셈이다.

 

이렇게 만들어진 객체p를 이용해서 클래스에 있는 함수 say_hello를 실행하려면 다음과 같이 한다.

 

 

그러면 함수의 내용이 실행되는 것을 확인할 수 있다.

 

변수 만들기

 

say_hello 함수를 실행하면 "안녕, 나는 ㅇㅇ야!"라고 출력하도록 만들고 싶다면 어떻게 해야 할까?

ㅇㅇ자리에 들어갈 사람 이름이 바뀔 수 있다. 

이런 경우에 사용하는 것이 변수이다.

 

클래스에 name(이름) 이라는 변수를 하나 만들자.

 

 

name이라는 변수에 이름으로 문자열 백오를 저장했다.

이제 이 변수를 사용해서 함수를 수정한다.

 

 

위 코드와 같이 함수 밖에 있는 변수를 불러올 때 매개변수(여기서는 self)를 사용한다.

그러므로 self.name 은 self라는 매개변수를 통해서 name이라는 변수의 값을 가져오라는 뜻이다.

 

초기화 함수

 

 

 

만약 위와 같이 객체q를 하나 더 만들고 q로 say_hello함수를 실행할 때 "백오" 말고 다른 이름을 사용하려면 어떻게 해야 하는가?

 

함수를 하나 더 만들어서 표현해 보자.

파이썬에는 객체가 만들어질 때 (즉, 생성자 함수가 만들어질 때) 자동으로 호출하는 함수가 있다.

이것을 초기화 함수( __init__) 라고 한다.

 

init(인잍)은 initialization(이니셜라이제이션; 초기값 설정)의 약자이다.

init 앞과 뒤에 있는 밑줄은 _ (언더스코어; Shift+ -)를 2개 붙인 것이다.

 

어떻게 사용하는 지 아래 코드로 수정하자.

 

 

def __init__(self, name): 은 초기화 함수이며 클래스가 호출될 때 자동으로 실행된다고 했다.

첫번째 매개변수 이름은 반드시 self를 사용하고 그 뒤에 여기서 사용할 매개변수 name(이름)을 하나 더 만들었다. 

그 다음줄에 이 초기화 함수의 실행 내용을 적었다.

self.name 에 매개변수name을 저장하라는 코드다.

 

이제 name에 들어갈 값을 각 인스턴스의 생성자 함수의 매개변수에 적어주면 된다.

 

 

 

위 코드가 순서대로 실행하면서 어떤 작업을 하는지 생각해 보면 어떻게 저런 결과가 나타났는지 알 수 있다.

p.say_hello() 코드는 인스턴스p를 이용해서 say_hello()함수를 실행하라는 코드다.

인스턴스p에는 매개변수 "백오"를 가진 Person() 생성자 함수가 저장된다.

 

실행하는 경로는 다음과 같다.

  1. say_hello함수를 실행한다.

  2. self.name을 찾는다.

  3. 초기화 함수에서 name 매개변수를 가져오면 된다.

  4. name 매개변수를 Person()생성자 함수에서 가져온다.

  5. 안녕, 나는 백오야!를 출력한다.

 

변수 추가

만약 인사하는 대상의 이름을 부르고 싶다면 어떻게 해야 할까?

예를 들어 "안녕, 나는 백오야"를 "안녕, 철수, 나는 백오야"

 

say_hello()함수에 매개변수를 하나 더 추가하면 된다.

 

 

매개변수를 어떻게 사용하는 지 이해할 수 있을 것이다.

 

매개변수에 age(나이)를 추가해서 다음과 같은 출력이 나오도록 만들어 보자.

 

안녕!철수, 내 이름은 백오(이)고 55살이야.

 

 

오늘은 여기까지.

 

Wraven...