본문 바로가기
Python

17. 파이썬 클래스1(class)

by To올라운더 2023. 7. 10.
반응형

드디어 길었던 1차 교육과정의 마지막인 클래스(class)를 배워볼 시간이 되었다.

 

우리는 앞선 과정에서 반복되거나 여러개의 기능을 관리(또는 처리)해야 할 때 

리스트나 딕셔너리 같은 별도의 자료유형을 사용하거나,

반복문 등을 통해 반복되는 작업을 단순화하는 등의 방법으로 효율적으로 처리했다.

 

클래스 또한 이런 효율적인 작업을 위한 가장 큰 틀이라고 생각하고 접근을 하면 된다.

 

1. 클래스(class)

 - 객체라는 단어는 일상생활에서는 거의 사용하지 않아서 듣기 힘든 용어이다.

그러나 프로그래밍에서의 객체는 한 언어의 핵심적인 사고를 다룰 정도로 기본이 되고 중요한 요소라,

조금 철학적이고 사고적인 부분이기도 하다.

그래서 오늘은 깊이 있는 내용보다는 가장 간단하게 핵심적인 부분만 전달하고자 한다.

 

1) 기성복과 맞춤복

먼저 프로그래밍을 떠나 우리가 이미 알고 있는 맞춤복과 기성복에 대해 잠깐 생각을 해보려한다.

옷을 구매할 때 장인이 직접 소품(단추,로고 등)를 하나씩 만들고,

재단부터 박음질까지 모든 업무를 진행하는 맞춤복을 구매하면

기성복과 대비했을 때 품질과 만족도가 더 높을 수 있지만, 더 많은 시간과 더 많은 금액이 필요할 것이다.

그런데 옷을 구매한 뒤 2, 3일이 지나 처음 구매했을  때와 같은 옷을 한벌 더 구매하려 한다면, 어떨까?

맞춤복의 경우, 처음 2주가 걸렸다면, 또 다시 2주를 기다려야 한다.

하지만 기성복은 만들어 놓은 소품들로 다시 한벌을 금방 만들수가 있는데

이런 차이가 생기는 이유는 맞춤복의 경우, 

기성복과 달리 공장에서 같은 공정으로 옷을 찍어내기 때문인데,

많은 옷을 만들 때 훨씬 유리한 방식이다.

 

프로그래밍에서도 기성복을 만들듯이 공장에서 같은 공정을 통해 옷을 만드는 과정이 있는데, 이것을 클래스라고 한다.

그리고 클래스를 통해 생성된 객체(개별의 옷)들을 인스턴스라고 부른다.

그리고 가장 중요한 사실은 각각의 인스턴스들은 동일한 클래스를 통해 생성되더라도 서로가 영향을 미치지 않는다는 것이다.

만들어진 옷 한벌에 그림을 그리더라도 나머지는 그대로 인것 처럼 말이다.

 

2. 객체

그럼 객체는 무엇일까? 눈에 보이는 것, 생각할 수 있는 것들 모두가 객체이다.

프로그래밍에서 객체가 현실에 있는 사물들을 구현하기 위한 목적인만큼

이번 강의에서는 객체에 대해 깊이 있는 부분을 제외하고 선언할 수 있으면 객체라고 부를 수 있다는 것만 기억하자.

예를 들어 a='강아지' 라는 변수가 있으면 a는 문자형 객체라고도 볼 수 있는데, 이것은 문자형 클래스를 통해 생성된 객체 이기 때문이다.

더 깊이 있고 세부적인 부분을 알고 싶다면 OOP(object oriented programing) 을 찾아보면 된다.

 

객체는 속성과 행동으로 구성되며, 속성은 객체의 특징이나 상태, 행동은 동작이나 기능 등을 말한다.

예를 들어 옷이라는 객체가 있다면 옷의 색상, 소재, 패턴, 디자인과 같은 부분은 속성(눈에 보이는 것)에 해당하며,

방수, 통기성 등은 행동(눈에 보이지 않는 기능과 같은 것)에 해당한다.

 

3. 클래스 구조 및 사용 방법

  - 클래스는 함수와 유사한 구조로 'class 클래스명():' 형태로 이루어지는데,

    유의할 부분은 꼭 지켜야 하는 부분은 아니지만, 암묵적으로 클래스명의 첫글자는 대문자로 표기한다.

    (*소문자로 하여도 문법상의 오류는 없으나, 소문자로 작성할 경우 특정 코드를 보았을 때 해당 항목이 클래스인지 함수인지 알 수 없기 때문에 가독성을 높히기 위해 대문자를 사용한다.)

 

4. 메서드(method) 입력하기

 - 메서드라는 낯선 용어가 나타났지만, 메서드는 우리가 이미 배웠던 함수와 동일하다. 차이점이 있다면 클래스 내부에 있는 함수라는 것 뿐인데, 파라미터 부분에 최소 1개(self)는 꼭 입력되어야한다.

 

4-1. __init__

  - __init__은 생성자라고도 부르는 메서드인데, 해당 클래스가 호출(실행)될 때 실행되는 함수이다.

   (* 기억을 할지 모르겠지만, 언더바 2개 '__' 의 경우 내부에서 사용하는 함수라는 의미로 서로간의 약속이 되어 있다.)

 - self 

  : self를 통해 입력 받은 파라미터들을 인스턴스에 할당하게 되는데, 그 과정이 아래와 같다.

  (* 첫번째 매개변수는 반드시 self가 입력되어야 한다.)

   : 클래스 내에서 self 를 포함하여 선언된 변수를 멤버변수라고 하는데, self를 포함하였을 떄에는 각각의 객체의 고유한 변수로써 사용되지만, 클래스 내에서 self가 없이 선언된 변수를 클래스변수라고 부르며, 접근을 할 때에도 '클래스명.변수명'으로 접근 가능하다.(클래스2강에서 다시 다룰 예정)

class Clothes: # 암묵적인 약속으로 클래스명의 첫글자는 대문자를 사용한다.
    
    def __init__(self, meterial, size, color, model_no):
        self.meterial = meterial
        self.size = size
        self.color = color
        self.model_no = model_no


a = Clothes('솜', '100', '검정', '22') # a 인스턴스 생성
print('a 객체 속성 값')
print(a.meterial)
print(a.color)
print(a.size)
print(a.model_no)

b = Clothes('나일론','105','아이보리','30') # b 인스턴스 생성
print('b 객체 속성 값')
print(b.meterial)
print(b.color)
print(b.size)
print(b.model_no)

 - Clothes의 인스턴스인 a 객체는 meterial, color, size 등 각각의 속성 값을 가지고 있고, b 객체와는 별개의 객체임을 알 수 있다.

 - 각 속성값을 확인하기 위해서는 '객체명.속성값' 을 통해 확인할 수 있다.

 

4-2. 메서드 추가하기

  - 사용하게 될 기능에 대한 메서드를 추가할 수 있고 실행은 '객체명.메서드명()'로 실행할 수 있다.

   : 해당 메서드 실행 후, None 이 출력되는 것은 해당 메서드의 return 값이 정의되지 않았기 때문에 나타난다.

class Clothes: # 암묵적인 약속으로 클래스명의 첫글자는 대문자를 사용한다.
    
    def __init__(self, meterial, size, color, model_no):
        self.meterial = meterial
        self.size = size
        self.color = color
        self.model_no = model_no

    def beautiful(self):
        print(f'옷이 날개. model_no{self.model_no}만 입어도 연예인')
        


a = Clothes('솜', '100', '검정', '22') # a 인스턴스 생성
print('a 메서드 실행')
print(a.beautiful())

b = Clothes('나일론','105','아이보리','30') # b 인스턴스 생성
print('b 메서드 실행')
print(b.beautiful())

 - 만약 현재 실행되는 print문을 return 값으로 넣어주면 좀 더 우리가 원하는 결과와 동일하게 출력할 수 있다.

 - 아래의 실행 결과를 확인해보면 None 이 사라졌음을 확인할 수 있다.

class Clothes: # 암묵적인 약속으로 클래스명의 첫글자는 대문자를 사용한다.
    
    def __init__(self, meterial, size, color, model_no):
        self.meterial = meterial
        self.size = size
        self.color = color
        self.model_no = model_no

    def beautiful(self):
        result = f'옷이 날개. model_no{self.model_no}만 입어도 연예인'
        #print(result)
        return result
        


a = Clothes('솜', '100', '검정', '22') # a 인스턴스 생성
print('a 메서드 실행')
print(a.beautiful())

b = Clothes('나일론','105','아이보리','30') # b 인스턴스 생성
print('b 메서드 실행')
print(b.beautiful())

 

 

다음 시간에는 위에서 한번 언급된 클래스변수와 멤버변수, 클래스의 상속과 오버라이딩를 끝으로 기초 과정을 마치도록 하겠다.

반응형

'Python' 카테고리의 다른 글

19. 파이썬 API 연동하기  (0) 2023.07.12
18. 파이썬 클래스2(class)  (0) 2023.07.11
16. 예외 처리(try, exception)  (0) 2023.07.05
15. 파이썬 함수  (0) 2023.07.04
14. 파이썬 반복문(while)  (0) 2023.07.03