티스토리 뷰

지난 시간까지 개발 환경을 준비하고 본격 개발에 들어가려고 했다가 이 포스트들의 정체성을 잠시 고민하게 되었다.

내가 곳곳에서 던져대는 어려운 단어들의 개념도 제대로 정리하지 않고 너무 달린 것이 아닌지 생각했다. 이 포스팅의 타겟이 프로그래밍을 처음 접하는 사람들인데 용어정리를 하지 않고 진행하면 고구마 먹은 것같은 느낌으로 계속 이 글을 읽어야 하는 것이 아닌가 하고 말이다.

 

사실 내가 이야기하는 용어들은 최대한 설명하면서 진행하긴 하겠지만 오늘 이야기할 "클래스"라는 것은 하나의 챕터로 분리하여 이야기 해야할 만큼 내용이 많다. 그리고 앞으로 많이 나올 것이고 클래스라는 개념을 이해 못해도 사실 코딩을 하는데 많은 문제가 생기는 것은 아니지만 우리가 "지구는 둥글다"라는 상식을 당연하게 알고 있는 것처럼 개발에서 클래스란 "당연히 알고 있는 개념"처럼 받아들여지고 있는 만큼 이번 포스팅에서 다뤄보려고 한다.

 

클래스(Class)가 무엇인가요?

사실 코딩을 하면 클래스라는 말을 엄청 들을 수 있는데 사실 클래스를 설명하라면 뭐라 콕 집어서 설명하기가 어렵다. 그도 그럴 것이 이 클래스란 개념이 데이터의 모양이나 형태를 이야기 하면서도 다른 클래스의 구성원으로 동작하기도 하고 이것이 또 상속받아서 서브 클래스라는 개념으로 만들수도 있는데 또 어떤 클래스는 인터페이스라고 해서 클래스의 형태만 선언해놓고 실제로 기능은 만들지 않는 클래스가 있는가 하면 추상화 클래스라고 해서 이건 또 아무런 기능도 없는 실물을 만들어 놓는 것도 있다. 

 

뭔 소리를 들은 것인가요?

한마디로 클래스라는 개념은 개념으로써 이해해야지 갑을(甲乙)관계처럼 누가 위에 있고 누가 밑에 있는 개념으로 접근하면 이해하기 어렵다. 일단 클래스에 대한 사전적 의미로 접근해보도록 하자.

 

네이버 지식백과에서 설명하는 클래스에 대한 사전적 의미 中

일단 표면적으로는 위의 이미지 처럼 어떤 공통되는 것들(객체)을 모아서 하나의 카테고리(클래스)로 잡아주는 것이라고 접근하면 일단 1차원적인 접근으로는 맞다고 생각하면 된다. 예를 들어서 클래스의 이름이 "Account"라고 하자. Account를 "계정"이라는 의미로 사용한다고 했을 때 계정에 포함될 구성 요소들에는 어떤 것들이 있을까.

 

  • 사용자 번호(id) : 숫자(Integer)
  • 이메일(email) : 문자(String)
  • 비밀번호(password) : 문자(String)
  • 계정 생성일(created_at) : 날짜시간(Datetime)
  • 계정 수정일(updated_at) : 날짜시간(Datetime)

내 생각에는 이정도면 Account 구성요소로 괜찮은것 같다. 그러면 앞으로 Account 객체라고 하면 그 안에 사용자 번호와 이메일 주소, 비밀번호, 생성일, 수정일이 들어있을 거라는 것을 알 수 있을 것이다. 그래서 아래처럼 코딩해볼 수도 있을 거다.

 

from datetime import datetime

class Account():
    id = -1
    email = ''
    password = ''
    created_at = datetime.now()
    updated_at = datetime.now()

자, 이렇게 1차적인 클래스의 의미를 이해했다면 이번엔 상속에 대해서 이해해보자.

예를 들어 부모로 부터 유산을 상속받았다고 생각해보자. 유산을 상속하면 부모의 유산과 나의 자산이 더해진다고 생각하면 매우 간편하다.

 

예를 들어 Account클래스를 상속받은 PermitAccount라는 클래스를 만들었다고 생각해보자. 이 PermitAccount에 추가된 항목이 예를 들어 권한을 저장하는 요소가 추가되었다면 아래와 같이 코딩할 수 있을 것이다.

from datetime import datetime

class Account():
    id = -1
    email = ''
    password = ''
    created_at = datetime.now()
    updated_at = datetime.now()
    
class PermitAccount(Account):
    auth = []

이렇게 코딩하면 PermitAccount라는 클래스는 Account의 구성요소를 모두 사용할 수 있으면서 PermitAccount의 auth 구성요소를 사용할 수 있게 된다. 이런 관계를 "상속"이라고 한다.

 

이 외에도 인터페이스나 추상화와 같은 개념들이 더 있지만 Python에서는 잘 다루지 않는 영역이니 더 어렵게 접근하지말도록 하자.

 

오늘은 클래스의 구성요소로 변수(Variable) 위주로 설명을 했는데 사실 함수(Function) 또한 구성요소로 포함할 수 있다. 점점 이 시리즈를 더해갈 때마다 이런 내용을 더해가며 자연스럽게 코딩을 배워갈 수 있도록 노력하겠다.

 

혹시라도 포스팅을 보면서 궁금한 점이 있다면 댓글을 남겨주길 바라며 오늘은 이만 정리하려고 한다.

부족한 설명이었지만 끝까지 읽어준 여러분 고맙다.

 

 

댓글
댓글쓰기 폼