[Udemy] JavaScript 알고리즘 & 자료구조 마스터클래스_Section 18 본문

내 생각/강의

[Udemy] JavaScript 알고리즘 & 자료구조 마스터클래스_Section 18

호랑구야 2023. 7. 24. 09:00

* 수업은 JS 기반이지만 Python으로 구현

Section 18

자료구조란 무엇인가

  • 자료구조란 값들의 모음으로 해당 데이터에 적용되는 값들 및 기능 혹은 작업들 사이의 관계를 포함한다.

ES2015 클래스 구문 개요

  • 클래스: 사전에 정의된 속성 및 메소드들을 이용해 객체를 생성하기 위한 청사진
  • 새로운 어레이가 먼저 인스턴스화되어야 하고, 그 후에야 모든 것들에 접근할 수 있다.
  • 자바 스크립트는 기술적으로 진정한 객체 지향 프로그래밍을 지원하지 않지만, 구현해낼 수 있다.

자료구조: 클래스 키워드

  • class를 정의하는 것 자체로는 어떤 일도 발생하지 않으며, 해당 class의 인스턴스를 생성해야 한다.
  • class는 패턴을 정하는 것이다.
  • JS에서 class 내부에 constructor 부분 
    • python에서 def __init__(self): 로 활용할 수 있다.
    • 생성자(constructor)란 객체가 생성될 때 자동으로 호출되는 메서드로, self는 생성되는 instance 객체 자신을 나타낸다. 이후 매개변수를 더 추가하여 self.객체변수 = 매개변수로 표현할 수 있다.
    • class를 이용하여 instance를 생성할 때 활용하는 것은 매개변수이고, class 내에서 특성을 활용하는 것은 객체변수이다.
  • JS에서 class 내부에 this 부분
    • python에서 self로 활용할 수 있다.
    • 생성되는 각 객체를 가리키는데 사용한다.
  • JS에서 객체를 생성할 때, let 객체이름 = new 클래스이름(매개변수들 ... )
    • python에서 객체이름 = 클래스이름(매개변수들)
  • class 선언과 객체선언에 활용하는 함수 이름이 달라 블로그를 참고하였다.
# class 선언
class Student:
	# constructor
    def __init__(self, firstName, lastName, year):
        self.firstName = firstName
        self.lastName = lastName
        self.grade = year

# a 객체 생성
a = Student('Julia', 'Kim', 3)

# a 객체변수의 값을 확인하기
a.firstName
a.lastName
a.grade

# a 객체의 값 수정하기
a.grade = 4
a.grade

자료구조: instance method 추가하기

  • instance method는 특정한 단일 인스턴스에 적용되는 기능을 제공한다.
  • JS에서 class 내부에 instance method인 함수 부분 
    • python에서 def 함수명(self): 로 활용할 수 있다.
  • 파이썬에 사용되는 instance class 사용법은 블로그에서 참고하였다.
  • reduce 함수 사용법은 블로그에서 참고하였다.
    • iterable 객체의 요소를 차례대로 누적 적용하여 이 객체를 하나의 값으로 줄이는 함수이다.
    • reduce(사용함수, iterable 객체, 초기값) 으로 초기값은 생략이 가능하다.
    • 사용함수를 따로 지정해도 되지만, lambda를 이용하면 lambda 매개변수: 표현식과 같이 사용할 수 있다. 코드의 간결함과 메모리의 절약때문에 사용한다고 한다.
class Student:
    # constructor
    def __init__(self, firstName, lastName, year):
        self.firstName = firstName
        self.lastName = lastName
        self.grade = year
        self.tardies = 0
        self.scores = []

    # instance method
    def fullName(self):
        return 'Your full name is {} {}.'.format(self.firstName, self.lastName)

    # instance method  
    def markLate(self):
        self.tardies += 1
        if self.tardies >=3:
            return 'YOU ARE EXPELLED!!!!!'
        return '{} {} has been late {} times.'.format(self.firstName, self.lastName, self.tardies)

    # instance method
    def addScore(self, score):
        self.scores.append(score)
        return self.scores

    # instance method
    def calculateAverage(self):
        from functools import reduce
        sum = reduce(lambda x, y: x + y, self.scores, 0)
        return sum / len(self.scores)
        
# instance 선언
a = Student('Julia', 'Kim', 3)
# instance method 수행
a.fullName()
# instance method 수행
a.markLate()
# instance method 수행
a.addScore(50)
# instance의 속성 확인
a.scores
# instance method 수행
a.calculateAverage()

자료구조: class method 추가하기

  • static method는 클래스에 종속되는 반면, 클래스의 개별 instance method에 반드시 종속적일 필요가 없는 method 혹은 기능들을 생성하도록 해주며 자주 사용되지는 않는다.
  • 일반적인 종합 기능 혹은 유틸리티 펑션 등과 같이 클래스에 필요한 한 부분이다.
  • JS에서 class 내부에 static method인 함수 부분 
    • python에서 @staticmethod 라는 데코레이터를 붙인다.
    • 데코레이터는 함수를 수정하지 않은 상태에서 추가 기능을 구현할 때 사용한다. 블로그 참조
# class 선언
class Point:
    #constructor
    def __init__(self, x, y):
        self.x = x
        self.y = y

	# static method
    @staticmethod
    def distance(a, b):
        import math
        dx = a.x - b.x
        dy = a.y - b.y

        return math.hypot(dx, dy)
        
# instance 선언
p1 = Point(5, 5)
p2 = Point(10, 10)

# static method 활용
Point.distance(p1, p2)
반응형
Comments