본문 바로가기

python

[Python] 객체에 대한 이해, 기본 사용법

객체에 대한 이해

파이썬에서는 객채라 불리우는 클래스를 정의할 수 있다. 이전 포스팅에서 데이터들에 대한 단어 선택을 객체로 명명 하였는데, 파이썬은 모든 데이터형들을 객체에서 만들기 때문이다. 객체란 무엇일까? 객체란 의미 있는 단위라고 생각 하면 된다. 기존에 C언어 문법과 같은 경우(몰라도 이해만 하면 된다.) 단순히 데이터형들(int, float, double 등등..) 을 선언해주고 메모리를 할당하여 데이터를 넣는 방식으로 사용해 왔다. 그리고 이러한 데이터들을 이용해 함수를 만들고, 함수에서 다시 다른 함수를 호출하는 방식으로 프로그램이 이루어지며, 프로그램이 순서대로 실행되는 절차지향의 방식을 따른다. 그러나 객체는 하나의 의미있는 단위를 정의하는 것이다. 철수가 학교에 간다는 문장을 프로그램한다고 생각해보자. C언어와 같은 절차 지향 언어에서는

int 학교에가다(철수이름,사는곳,학교이름); // 함수 호출 형태

로 이해해볼 수 있을 것 같다. 그러나 객체의 형식은 다음과 같다.

class 학생
{
   // 학생의 정보를 기술
   이름 : 철수
   나이 : 20
   사는곳 : 서울
   학교이름 : 서울대
   
   // 학생이 할 수 있는 동작을 정의
   가는동작()
}

위와 같이 객체는 여러 의미있는 데이터형들을 가지고 있을 뿐만 아니라 의미 있는 동작도 가지고 있다. 위의 경우 학생 이라는 객체형태의 철수를 선언하고 값을 넣은 상태를 대략적으로 보여주는 것이다. 위만 봐서는 이해가 잘 안갈수도 있다. 객체가 어떤 것인지 다음 사용법을 보며 이해해보도록 하자.

객체의 사용법

다음 예제 코드를 보며 이해해보자.

class student(object):
    """ 이름과 학교 나이 정보를 포함 """
    def __init__(self, name, school, age):
        self.name = name
        self.school = school
        self.age = age
    
    def set_name(self, name):
        self.name = name
    
    def get_name(self):
        return self.name
    
    def set_school(self, school):
        self.school = school
    
    def get_school(self):
        return self.school
    
    def get_age(self):
        return self.age
    
    def introduce(self):
        print("제이름은"+ self.name + "입니다")
        print("학교는" + self.school + "입니다")
        print("제 나이는" + self.age + "살 입니다")

 class 라는 예약어를 통해 클래스를 선언해 줄 수 있다. 클래스 선언은 위 코드와 같이 class 클래스명(object): 와 같이 선언해준다. 그리고 보통 바로 밑의 줄에 """ 주석 """ 을 통해 클래스 객체에 대한 설명을 간략하게 기록해 준다. 주석에 대해 많이 간과 하지만, 향후 산업계에서 다른사람들과 협업을 할 때 불려가는(?) 일을 조금이나마 줄일 수 있다. 그만큼 주석은 중요한 역할을 하게 된다. 그리고 다음엔 def 예약어를 통해 클래스 자체를 정의해준다. def 는 함수를 선언해줄때 사용 했었다. 여기서도 마찬가지이다. 내가 선언해주는 객체만 사용하는 함수를 선언해주는 셈이다. 이러한 객체만이 사용하는 함수를 메서드라고 한다. 여기서 __init__ 이라는 메서드가 존재하는데 이 메서는 특이하다. __init__ 메서드는 객체를 선언할 때 무조건 불리게 되며 __init__ 메서드에 인자를 받아 클래스가 가지는 프로퍼티(데이터형 이라고 이해하자) 들을 초기화해줄 수 있다. 이는 정의하기 나름이다. 

여기서 self 라는 예약어가 나온다. self 라는 예약어도 어떠한 역할을 하는데, 선언해주는 클래스가 가지는 프로퍼티들을 나타낸다. self.name 이라고 하는 순간 student 객체는 name 이라는 프로퍼티를 가지게 되고 이에 name 이라는 파라미터를 받아 대입해주게 된다. 쉽게 말해 self.name 은 student 가 가지는 프로퍼티가 되고 name 은 객체 선언시 받아오는 값이다. 따라서 대입을 해주게 되면 초기화가 되는 것이다. school 과 age 도 마찬가지이다.

다음으로 set_name, get_name 등등의 메서드들이 나오게 된다. 이는 student 객체만 가진 메서드 들이며, student 가 가진 프로퍼티의 값을 설정하고 불러오는 역할을 한다. 내부 구조는 함수와 같으며 set_name 에서는 set_name 에 name 을 대입 하므로써 name 프로퍼티의 값을 바꿀 수 있다. get_name 에서는 student 객체가 가진 name 을 단순이 리턴해주어 객체로 부터 프로퍼티를 읽어올 수 있다.

마지막 introduce 는 프로퍼티 값을 바꿔주는 동작은 없으며, print 동작을 하고 있다. 이로서 객체의 정의는 끝이 난다.

객체의 사용(마침표 표기법)

객체를 정의하는데서 끝나면 안된다. 위에서는 객체를 정의만 했을 뿐이지 선언은 해주지 않았다. 객체의 사용법을 보자.

(이전 코드)


a = student("민수","서울대","21")

print(a.get_name())
print(a.get_age())
print(a.get_school())

a.set_name("철수")
a.set_school("고려대")

a.introduce()

 객체의 선언은 위 처럼 변수 = 객체명( ) 의 형식으로 해준다. 객체명뒤의 괄호에는 위 __init__ 메서드의 형식에 따라 선언해주어야 한다. 다음 get_name 메서드를 실행하기 위해서는 객체 (마침표) (메서드) 형식으로 호출해 준다. 그러나 a.get_name() 만 입력하면 아무것도 출력되지 않는다. get_name() 은 값을 return 만 해주므로 print( ) 함수로 실행해 주어야 한다. set_name 과 set_school 로 프로퍼티들을 바꿔줄 수 있고, a 객체의 메서드인 introduce( ) 를 실행해주면 다음과 같은 결과를 얻을 수 있다.

 

'python' 카테고리의 다른 글

[Python] 라이브러리 사용하기(import 사용)  (0) 2020.04.13
[Python] 기본적인 사전 사용법  (0) 2020.04.01
[Python] list 다루기  (0) 2020.03.30
[Python] 함수 작성하기  (0) 2020.03.23
[Python] 반복문(for, while)  (0) 2020.03.20