Post

데이터 위클리 페이퍼 1 - 클래스와 인스턴스, 정적 메소드

클래스와 인스턴스에 대해 설명해주세요


  1. 클래스
    • 변수와 함수를 묶어 놓은 것
    • 어떤 객체를 만들기 위한 설계도
    • 객체의 속성(데이터)과 메소드(동작)을 정의함
      • 속성 : 클래스안의 변수
      • 메서드 : 클래스안의 함수
    • 예시1) 자동차 클래스
      • 속성 : 디자인, 엔진, 속력 등
      • 메서드 : 속도 증감, 방향 전환, 시동on/off기능 등
    • 예시2) 집 클래스
      • 속성 : 방의 개수, 창문, 문 등
      • 메서드 : 입주상태, 집의 가격변동, 방의 개수 변동 등
  2. 객체
    • 클래스가 설계도라면, 객체는 설계도를 바탕으로 만들어진 물건
    • 클래스에 정의된 속성(데이터)과 메소드(동작)을 가짐
    • 프로그램 내에서 사용되는 구체적인 속성과 동작을 가진 실체
    • 예시) 자동차 클래스
      • 객체1 : 가속력이 뛰어난 빨강 모터스포츠용 자동차
      • 객체2 : 안정성이 높은 하얀 도로주행용 자동차
  3. 인스턴스
    • 특정 클래스의 구조를 가지는 객체
    • 객체가 특정 클래스의 구조와 행동을 따를 때, 객체 A는 클래스 B의 인스턴스라고 표현
    • 객체와 인스턴스는 거의 동일한 의미로 사용됨
      • 객체는 프로그램 내에서 사용되는 구체적인 속성과 동작을 가진 것
      • 인스턴스는 특정 클래스의 구조를 가지는 객체
    • 클래스의 구조를 가진 객체를 실체화 한 것
    • 실체화된 인스턴스는 메모리에 할당됨

[인스턴스와 객체의 표현]

  • 인스턴스는 어떤 객체가 어떤 클래스에서 생성되었는지 표현할 때 사용
  • 클래스와 객체의 관계를 설명하는 ~로 만든으로 이해하면 좀 더 와닿는다.
    • 객체A는 클래스B의 인스턴스이다. → 객체A는 클래스B로 만든 객체다.
  • 여담으로 구글링을 해본 결과, 객체와 인스턴스 구분없이 혼용해서 사용하는 것으로 보임
  • 초기 번역과정에서 명확하게 정리되지 않은것으로 추정됨.


정적 메소드는 무엇이고, 어떻게 호출하나요?


  1. 정적 메소드(static method)
    • 객체의 유무와 상관없이 독립적으로 호출이 가능한 메소드
      • 인스턴스 메소드 : 객체가 있어야만 호출 가능. 데코레이터 없이 메소드를 선언
      • 정적 메소드 : 객체가 없어도 호출 가능. 데코레이터를 사용하여 메소드를 선언
  2. 정적 메소드 정의와 호출
    • 클래스안에 @staticmethod 데코레이터를 사용하여 정의
    • 정적 메소드는 클래스 이름을 통해 직접 호출할 수 있으며, 첫 번째 매개변수로 self를 받지 않음
  3. 정적 메소드의 특징
    • 객체의 유무와 상관없이 접근이 가능함
    • 첫 번째 매개변수 self를 받지 않아 클래스의 인스턴스의 접근하는 작업을 수행할 수 없다 → 객체에 접근할 필요가 없는 기능을 구현할 때 사용
    • 클래스 이름을 통해 직접 호출하여 인스턴스를 생성할 필요가 없다
    • 객체의 상태와 상관없이 동작하는 유틸리티 함수에 사용
  4. 정적 메소드와 클래스 메소드 비교
    • 정적 메소드(@staticmethod) : 첫 번째 매개변수로 클래스나 객체를 받지 않으며, 클래스와 인스턴스에 접근하지 않는 독립적인 메소드
    • 클래스 메소드(@classmethod) : 첫 번째 매개변수로 클래스를 받으며, 클래스를 통해 호출될 때 클래스의 상태에 접근할 수 있음


This post is licensed under CC BY 4.0 by the author.