[Python] 클래스 기초 복습
12 Greedy Algorithm
[Python] 클래스 기초 복습
  • 클래스는 C++, Java 등의 객체지향언어의 핵심 개념임.
  • 클래스는 C의 구조체(struct)와 관련 함수로 묶어 놓은 사용자가 정의할 수 있는 타입
    1. 클래스(class) = 틀(template) = 멤버 변수들 + 함수들
    2. 인스턴스(instance) = 틀에서 찍어 나온 실제 변수(variable)
잠금 영역
실행 언어: py3
실행 결과를 확인해보세요!
  • 위 코드는 point라는 클래스를 정의한 것.
    • point는 점을 표현하기 때문에, x-좌표와 y-좌표를 위한 변수 x, y가 멤버로 존재해야 함.
  • 함수 __init__(self, x, y): C++에서의 생성자 역할 (멤버 선언 + 초기화 목적)
    • init 이름 앞과 뒤에 underscore _ 2개를 사용해 감싼 형태
    • 클래스의 함수의 첫 매개변수는 항상 self 임. self는 이 클래스의 인스턴스 자체를 의미함
  • 선언된 클래스의 변수(인스턴스)는 변수_이름 = 클래스_이름(매개변수) 형식으로 생성함
    • p1 = point(3, 2)p1 변수를 class point 타입의 변수로 선언하고
    • x = 3, y = 2 값으로 멤버 x, y를 각각 초기화 함. (self는 매개변수로 보내지 않음에 주의!)
  • 원점과의 거리를 계산하는 dist 멤버 함수를 아래와 같이 추가해보자.
잠금 영역
실행 언어: py3
실행 결과를 확인해보세요!
  • 원점 (0, 0)에서 점 p1까지 거리를 계산하고 싶다면, 변수.멤버함수 형식으로 호출하면 됨.
    • p1.dist() 형식으로 호출하면 dist 함수에 p1self로 전달된다.
  • 이제 두 점 사이의 거리를 계산하는 dist2 멤버함수를 작성해보자.
    • 이 경우엔 self 매개변수 이외에 두 번째 점을 매개변수로 받아야 함.
잠금 영역
실행 언어: py3
실행 결과를 확인해보세요!
  • 두 번째 점 p2를 생성하고, p1과의 거리를 계산하기 위해, p1.dist2(p2) 또는 p2.dist2(p1)으로 호출하면 됨.
    • p1.dist2(p2)라면, p1self, p2q로 전달됨.
  • 이제 점의 두 좌표를 print하려면 어떻게 해야 할까?
    • 쉬운 방법은 두 좌표를 출력하는 용도의 멤버 함수를 선언하는 것이다.
    • python에서는 __repr__() 내장 함수를 이용해 간단하게 처리할 수 있다.
  • repr(object): object를 공식(official) string형식으로 변환해주는 함수.
    • 만약, repr(p1)을 하면 어떻게 될까?
      • p1point 타입으로 python이 아닌 우리가 정의한 타입이므로 repr(p1)의 처리 과정을 우리가 함수로 정의해줘야 한다.
    • repr(p1)이 호출되면, point class__repr__ 멤버 함수를 대신 호출한다.
    • 그래서 __repr(self)__ 멤버 함수에 point정보를 string으로 표현해 리턴하는 부분을 작성해주면 된다.
    • 아래 코드 참조
      • "({0:.3f}, {1:.3f})".format(self.x, self.y)에서 {0:.3f}라는 뜻은 format의 0번째 매개변수를 실수(f) 형식으로 소수점 아래 3자리만 출력하라는 의미임.
잠금 영역
실행 언어: py3
실행 결과를 확인해보세요!
  • 이제 n개의 점들을 입력받아 list에 저장해보자.
    1. n을 먼저 입력받는다. (점의 갯수)
    2. n개 점에 대한 x좌표 정수 값, y좌표 정수 값을 다음 n 줄에 걸쳐 입력받는다.
  • 이 점들을 y-좌표 값 순서대로 정렬해보자.
    1. 정렬 함수를 직접 만들어 호출하는 방법: quick, merge, heap 정렬 함수를 만들어 리스트를 전달해 정렬
    2. Python에서 제공하는 정렬함수를 호출하는 방법: sort( )를 이용해 정렬
      • sort(key = func) 형식으로 호출 가능. func은 리스트의 각 아이템을 매개변수로 받고, 비교할 key 값을 리턴해야 함.
      • 예를 들어, 점의 y-좌표 값을 key 값으로 정렬하고 싶다면, funcy-좌표 값을 리턴하면 됨
  • 아래 예제 참조!
잠금 영역
실행 언어: py3
실행 결과를 확인해보세요!
  • 정렬을 더 간단하게 하는 방법은 lambda 함수 기능을 사용하는 것이다. lambda 함수란 한 줄짜리 함수를 의미한다.
>>> def sum(x,y):
...     return x + y
... 
>>> sum(3,4)
7
>>>
  • sum 함수와 완전히 같은 결과를 주는 lambda 함수는 아래와 같다.
    • 형식: lambda parameters: expression
>>> sum = lambda x, y : x + y
>>> sum(3,4)
7
>>> 
  • 이 기능을 이용해 아래와 같이 정렬함수를 호출할 수 있다.
잠금 영역
실행 언어: py3
실행 결과를 확인해보세요!
질문하기
추가 자료
no files uploaded

추가 자료가 없습니다

여기서 새로운 학습 자료를 확인하세요!
선생님이 추가한 자료들을 바로 확인할 수 있어요.