All Articles

Python Class

클래스란?

함수블로그에서도 말한바와 같이 함수형 프로그래밍이나 반응형 프로그래밍이 프로그램 패러다임으로 극부상으로 하고 있지만 아직까진 객체지향형 프로그래밍이 각광받고 있다.(각광받고 있는 이유는 GUI가 등장하면서부터 라고 함)
그래서 클라스라는게 뭐냐면, 데이터 처리를 추상화 하고 실체화 하기 위해 보다 더 많은 데이터를 처리해야 되다 보니 함수와 변수만으로 사용하기엔 어려움을 겪었고, 그로인해 어떤 공통된 특징을 가진 함수나 변수들을 모아서 클래스라는 틀을 추상화해서 코딩을 하는 시간을 최소화하려고 만들었다고 한다.
또한 클래스 안의 함수(클래스안의 함수는 메소드라고 함)와 변수는 클래스가 실행될 때만 메모리에 저장되었다가 클래스가 끝나는 시점에 데이터를 삭제하여 메모리를 효율적으로 사용할 수 있도록 하게 해준다고 한다.
위에서도 언급했듯이 함수형 프로그래밍이 점점 부각되고 있기 때문에, 객체지향 프로그래밍과 함수형 프로그래밍을 혼합되어 사용되기도 한다.

요약: 어떤 문제나 데이터처리를 위해 추상화를 거쳐 집단에 속하는 속성(attribute)과 행위(behavior)를 통한 변수와 메서드로 정의한 집합체이다.

고차함수나 클로저같은 고급 개념이 도입되면서 프로그램의 복잡도가 증가했고, 클래스를 정의하는건 쉽지 않은 일이지만 한번 잘 정의된 클래스는 많은 편의성을 제공해주기 때문에 꼭 개념을 잡고 언제든지 응용할 수 있도록 하는 것이 중요해보인다.

**클래스를 생성할 땐(혹은 코딩을 할 때) 복잡한 코드를 구조화 하기 위해 디자인패턴이 생겼고, 파이썬공식문서나 구글링을 통해서도 다양한 정보를 볼 수 있으니 한번쯤은 보는게 좋을 듯 하다.

사용법

용어정리

캡슐화, 상속, 다형성, 추상화


사용법

기본적으로 클래스 정의로 인해 만들어진 지역스코프에 여러 함수 및 변수를 담아서 사용

  1. CamelCase를 통해 단어의 첫 문자를 대문자로 구분을 해서 사용
  2. 다른 함수(def)나 if문 처럼 먼저 클래스에 대해 정의를 해야 함.
  3. 클래스의 내부 문장들은 보통 함수들로 정의되어 있지만, 다른 문장들도 사용할 수 있음(내부 함수들이 받는 parameter는 무조건 ‘self’이며, 이는 클래스 외부에서 호출한 인자를 받는다는 의미인 듯 하다.)
  4. 들여쓰기를 통한 지역스코프를 활용하여 환경변수 중 지역변수로 사용
  5. 클래스 정의가 다 되었다면, 클래스 객체가 만들어 진 것임
  6. 사용하고 싶은 위치에서 인자를 활용해서 사용(인자가 없을 수도 있음)

예시)

class Dog:
    
    kind = 'canine'

    def __init__(self, name):
        self.name = name

d = Dog('Fibo')
e = Dog('Buddy')
d.kind           # 'canine'
e.kind           # 'canine'
d.name           # 'Fido'
e.name           # 'Buddy'

용어 정리

면접 때 많이들 물어본다고 하니 꼭 알아두자.

객체지향프로그래밍이란?

컴퓨터 프로그램밍 패러다임 중 하나로, 프로그래밍에서 필요한 데이터를 추상화시켜 상태와 행위를 가진 객체를 만들고, 그 객체들 간의 유기적인 상호작용을 통해 로직을 구성하는 프로그래밍 방법

객체(인스턴스)란?

클래스에서 정의한 것을 토대로 실제 메모리상에 할당된 것으로 실제 프로그램에서 사용되는 데이터(실체화 된 데이터)

객체지향 프로그래밍에서의 추상화(자료의 추상화)

불필요한 정보는 놔두고, 중요하거나 필요한 정보만을 표현하여 공통의 속성이나 기능을 묶어 이름을 붙이는 것(클래스를 정의하는 것)

캡슐화란?

목적: 코드를 재수정없이 재활용하는 것
프로그램 코드에서 변수와 함수를 재활용하기에는 데이터가 분산되어 있어서 재활용이 어려웠으나 캡슐화를 통해 관련된 기능과 특성을 한곳에 모아 분류하기 때문에 재활용이 원활해짐
(기능과 특성의 모음을 “클래스”라는 “캡슐”에 분류해서 넣는 것)

상속이란?

라이브러리(다른사람이 작성한 소스코드를 사용하기 위한 참조하여 사용하는 모임)의 코드를 수정하게 되면 다른 라이브러리가 되고, 버전에 따라 동작하지 않을 수 있고, 불필요한 코드의 수정작업을 해야 할 때가 있다. 이러한 문제를 해결하기 위해 상속이라는 것을 도입

부모클래스의 속성과 기능을 그대로 이어받아 사용할 수 있게하고, 기능의 일부분을 변경해야 할 경우 상속받은 자식 클래스에서 해당 기능만 수정(정의)하여 사용할 수 있게 하는 것

다중상속을 하게 될 경우 상속관계에서 혼란을 줄 수 있어서 하나만 가능하고, 필요에 따라 인터페이스를 사용할 수 있게 했다.

다형성이란?

하나의 변수명, 함수명 등이 상황에 따라 다른 의미로 해석될 수 있는 것

오버라이딩: 부모클래스의 메스드와 같은 이름, 매개변수를 재정의 하는 것(값을 업데이트)
오버로딩: 같은 이름의 함수를 여러개 정의하고, 매개변수의 타입과 개수를 다르게 하여 매개변수에 따라 다르게 호출할 수 하는 것

참고
파이썬 공식문서
기본기를 쌓는 정아마추어 코딩블로그
파이썬 공식문서
객체지향프로그래밍