블로그 이미지
조이키트 블로그
아두이노, 라즈베리파이, 반도체 센서/모듈 활용

calendar

1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

Notice

250x250
2023. 8. 7. 13:10 파이썬
728x90
반응형

추상 데이터 타입은 일련의 객체들과 그 객체들에게 적용할 작업을 뜻한다. 이 두가지가 묶여 있는 이유는 프로그램의 한 지점에서 다른 지점으로 객체를 넘길 때 그 객체의 데이터 속성을 접근할 뿐만 아니라 그 데이터를 쉽게 조작할 수 있는 작업까지도 넘길 수 있기 때문이다.

파이썬에서는 클래스를 사용하여 데이터 추상화를 구현한다. 클래스 정의는 type이라는 타입을 가진 객체를 생성하고 그 객체를 instancemethod이라는 타입을 가진 일련의 객체들과 연결시켜 준다. 예를 들어 IntSet.insert는 IntSet이라는 클래스에 정의된 insert라는 메소드를 뜻하는 것이다.

# IntSet 클래스
class IntSet(object):
    def __init__(self):
        self.vals = []

    def insert(self, e):
        if not e in self.vals:
            self.vals.append(e)

    def member(self, e):
        return e in self.vals
    
    def remove(self, e):
        try:
            self.vals.remove(e)
        except:
            raise ValueError(str(e) + 'not found')
        
    def getMembers(self):
        return self.vals[:]
    
    def __str__(self):
        self.vals.sort()
        result = ''
        for e in self.vals:
            result = result + str(e) + ','
        return '{' + result[:-1] + '}' #-1 omits trailing comma
    
print(type(IntSet), type(IntSet.insert))

위의 코드를 실행하면 다음과 같은 결과가 나온다.

출력 결과

<class 'type'> <class 'function'>

클래스는 다음 두 가지 작업을 지원한다.

인스턴스 생성은 새로운 클래스의 인스턴스를 만들 때 사용된다. 예를 들어 s = IntSet()은 IntSet 타입의 새로운 객체를 생성한다. 이 객체를 IntSet의 인스턴스라고 부른다.

속성 레퍼런스는 점 표기법을 사용하여 클래스의 속성에 접근한다. 예를 들어 s.member는 IntSet 타입의 인스턴스인 s에 연관된 메소드 member를 의미한다. 

여기 기술된 InSet 클래스 정의의 첫 줄은 IntSet이 object의 하위 클래스라는 것을 명시하고 있다. 파이썬은 두 개의 밑줄 표시로 시작하고 끝나는 특별한 메소드들이 몇 개 있다. 클래스의 인스턴스를 생성할 때마다 클래스에 정의된 __init__ 메소드를 호출하게 된다. 그러면 인터프리터는 IntSet 타입의 새로운 인스턴스를 생성하고 IntSet.__init__ 메소드를 호출한다. 클래스의 인스턴스와 연결된 메소드는 점 표기법을 사용해 호출한다.

s = IntSet()
s.insert(3)
print(s.member(3))

위의 코드는 IntSet의 새로운 인스턴스를 생성한 후 int형 3을 IntSet에 삽입한다. 출력 결과는 True이다.

클래스에서 가장 마지막으로 정의된 메소드 __str__은 또 다른 특별한 메소드이다. print문을 사용하면 print를 하려는 객체와 연관된 __str__ 함수가 자동으로 호출된다.

s = IntSet()
s.insert(3)
s.insert(5)
print('OUTPUT : ', s)

출력 결과

OUTPUT :  {3,5}
728x90
반응형

'파이썬' 카테고리의 다른 글

(파이썬) 상속/Inheritance  (0) 2023.08.09
(파이썬) Person 클래스  (0) 2023.08.09
(파이썬) 예외 처리하기  (0) 2023.08.06
(파이썬) 문자 번역하기  (0) 2023.08.05
(파이썬) 딕셔너리(Dictionary)  (1) 2023.08.04
posted by 조이키트 블로그