어떤 자료와 그 자료에 대한 연산(동작)들의 수학적인 정의를 의미한다. 그리고 그 정의를 구현하는 방법은 명시되어 있지 않다.
ex) 어떤 역을 타고 어디서 내려서 출퇴근을 한다 X
출퇴근을 한다 O - 추상적
즉,
추상적 자료형 : 자료들과, 그 자료들에 대한 연산들을 개념적으로 정의만 한 것
자료구조 : 자료를 저장하는 방법과 자료에 적용할 수 있는 연산을 구체적으로 제공한 것
추상적 자료형을 구체적으로 구현한 결과가 자료구조
여기서 리스트라는 개념은 Python에서의 리스트와 완전히 다른 개념.
그래서 기존의 파이썬에서의 리스트를 "배열"이라고 표기
리스트가 담는 자료에 적용되는 연산
리스트라는 추상적 자료형을 구현한 대표적인 예시가 바로 "배열" !
(파이썬에서의 리스트 = 배열(Array))
자료는 저장하는 값 자체를 의미하고, 포인터는 자신의 다음 순서의 노드를 가리킨다.
배열은 찾는 자료의 위치와 관계없이 항상 단번에 값을 찾을 수 있지만, 연결 리스트는 찾는 자료의 위치가 시작점으로부터 멀수록 연산 횟수가 많아진다.
인덱스를 이용하여 절대적인 순서를 표현하는 배열과는 달리,
연결 리스트는 자신의 다음 노드를 가리키는 상대적인 순서를 표현한다. ⇒ 장점
배열 - 조회에 유리 / 연결 리스트 - 삽입, 삭제에 유리
객체지향 프로그래밍에서 추상적 자료형은 인터페이스, 자료구조는 클래스로 생각할 수 있다.
즉, '리스트'라는 인터페이스에는 "삽입과 삭제를 지원해야 한다"라는 명세만 주어지고
실제 동작 부분은 리스트를 상속받은 배열 클래스, 연결 리스트 클래스에서 구현해야 한다.
자료구조를 만드는 데에는 클래스가 좋다.
클래스가 가지고 있는 필드가 자료에 해당하고 메서드가 자료에 적용할 수 있는 연산이다.
__init__ : 초기화 함수
'''
maxMachine 클래스를 완성하세요.
'''
class maxMachine :
def __init__(self) :
self.myData = []
def addNumber(self, n) :
self.myData.append(n)
def removeNumber(self, n) :
self.myData.remove(n)
def getMax(self) :
return max(self.myData)
좋은 해법인지 판단하는 기준은 여러 가지가 있다.
(코드가 간결한가? 얼마나 빠른가? 리소스를 얼마나 차지하는가? 구현 시간이 짧은가?…)
⇒ "얼마나 빠른가" 가 가장 중요!!!⭐⭐