[카테고리:] <span>미래실험실 pYTHON</span>

안녕하세요. 언휴예요.

이번 강의에서는 Python에서의 캡슐화를 다룰 거예요. 캡슐화는 여러 멤버를 하나의 형식 안에 정의하는 과정을 말합니다. Python에서 캡슐화 도구는 클래스이며 캡슐화 대상에는 멤버 필드와 멤버 메서드가 있어요.

클래스는 데이터와 행위를 포함하고 있는 형식입니다. 클래스에 정의한 데이터를 멤버 필드라 부르며 행위를 멤버 메서드라고 부릅니다. 그리고 실제 프로그램에 클래스 형식이 메모리에 생긴 것을 개체(인스턴스)라고 말합니다.

번호와 이름을 갖는 학생을 클래스로 정의하면서 설명하기로 할게요. 먼저 클래스를 정의할 때는 class 키워드 뒤에 클래스 이름과 콜론(:)을 명시합니다. 그리고 다음 라인부터 클래스의 멤버를 캡슐화합니다.

class 클래스명:

     [멤버 정의]

class Student:

클래스를 정의할 때 내부에는 클래스 변수와 메서드를 정의할 수 있어요. 클래스 변수는 해당 클래스에 고유한 변수로 개체마다 부여하지 않습니다. 예를 들어 학생 개체를 생성할 때마다 학생 번호를 순차적으로 부여한다고 가정합시다. 이를 위해 학생 클래스에서는 가장 최근에 부여한 학생 번호를 기억하고 있어야 새로 생성하는 학생 번호를 부여할 수 있습니다. 이처럼 가장 최근에 부여한 학생 번호는 학생 개체마다 가져야 할 데이터가 아니라 학생 클래스에 고유한 변수가 기억하고 있어야겠죠.

class Student:
    last_num=0 #클래스 변수

클래스를 정의할 때 개체가 생성하면서 수행할 코드가 있다면 초기화 메서드를 캡슐화하세요. 초기화 메서드는 __init__(앞 뒤로 언더바 두 개)이 메서드 이름입니다. 특히 멤버 메서드에 self 키워드를 사용하면 현재 수행하고 있는 개체 자기 자신을 의미합니다.

다음 코드는 초기화 메서드에서 학생 번호를 순차적으로 부여하고 학생 이름을 빈 문자열로 설정하고 있습니다. 입력 인자로 self를 명시하고 있고 클래스 변수 last_num에 접근하기 위해 클래스 이름을 사용하고 있음에 집중하시기 바랍니다. 그리고 Python은 동적 언어이기 때문에 self.num 처럼 표현하면 학생 개체에 멤버 필드로 num을 의미합니다.

def __init__(self):  #초기화(생성자)
        Student.last_num+=1
        self.num=Student.last_num
        self.name = ""

일반적으로 많은 개발자들은 멤버 필드에 접근할 때 get멤버필드명, 설정할 때 set멤버필드명 형태로 정의하고 있어요. 접근자 메서드에는 특별한 입력 인자가 없고(Python에서 자기 자신을 의미하는 self를 제외) 설정자 메서드에서는 설정할 데이터를 입력 인자로 받습니다.

def getNum(self):    #번호 접근자
        return self.num
    def getName(self):   #이름 접근자
        return self.name
    def setName(self,name):  #이름 설정자
        self.name = name

다음은 이제까지 설명한 Student 클래스를 정의하고 이를 사용하는 간단한 예제 코드입니다.

#캡슐화 개요


class Student:
    last_num=0 #클래스 변수
    def __init__(self):  #초기화(생성자)
        Student.last_num+=1
        self.num=Student.last_num
        self.name = ""
    def getNum(self):    #번호 접근자
        return self.num
    def getName(self):   #이름 접근자
        return self.name
    def setName(self,name):  #이름 설정자
        self.name = name


stu = Student() #학생 개체 생성
stu.setName("홍길동")
print("번호:",stu.getNum()," 이름:",stu.getName())
[그림 1] 캡슐화 개요
[그림 1] 캡슐화 개요

미래실험실 pYTHON