Python/개요 및 문법

객체지향과 클래스

Bambi97 2024. 9. 27. 17:41

1. 객체지향 프로그래밍 (Object Oriented Programming, OOP)

* 객체란?

뚜렷한 경계를 가지며 식별이 가능하고 상태행동을 가지고 있는 추상체

(예 : 강아지, 사람, 자동차, 은행)

 

2. 클래스 (Class)

객체를 만드는 설계도를 의미한다.

class 클래스이름:
    # 클래스 속성(멤버 변수) 정의
    속성1 = 초기값1
    속성2 = 초기값2

    # 생성자 메서드 (생략 가능)
    def __init__(self, 매개변수1, 매개변수2, ...):
        # 인스턴스 속성 초기화
        self.속성1 = 매개변수1
        self.속성2 = 매개변수2

    # 메서드(멤버 함수) 정의
    def 메서드1(self, 매개변수1, 매개변수2, ...):
        # 메서드 동작 정의
        pass

    def 메서드2(self, 매개변수1, 매개변수2, ...):
        # 메서드 동작 정의
        pass

객체지향 설명에서 말한 객체의 구성요소

상태(field) : 그 객체를 표현하는 명사들 (멤버변수, 속성이라고도 함)

행동(method) : 해당 객체만이 사용할 수 있는 전용 함수라고 보면 된다.

 

*클래스와 비슷한 개념인데 '인스턴스'라는 말을 쓰던데 그건 뭘까?

객체 = 설계도

인스턴스 = 설계도대로 만든 결과물

 

3. 객체 생성

 

4. 생성자 (Constructor)

인스턴스 생성시 자동 실행되는 메소드

class 클래스이름:
    def __init__(self, 매개변수1, 매개변수2):
        self.속성1 = 매개변수1
        self.속성2 = 매개변수2

def __init__(self, 매개변수1, 매개변수2, ...)

위 언더바(_) 2개를 쓰는 방식을 '스페셜 메소드'라고 하는데 몇개가 더 있지만 아직은 이것만 배웠다.

생성자 형태는 관례가 아니라 '__init__' 고정이다.

 

 

5. 메소드 (Method)

객체지향 설명에서 '행동'에 해당하는 클래스 내부에 정의되어 해당 객체만 가지는 전용 함수

 

6. 클래스 변수와 인스턴스 변수

 

7. 메소드 타입

 

인스턴스 메서드(Instance Method): 객체의 상태를 조작하거나 객체에 특정 작업을 수행하는 메서드입니다. 대부분의 클래스 메서드는 인스턴스 메서드입니다. 위의 예제에서 보여진 __init__ 메서드도 인스턴스 메서드입니다.

 

클래스 메서드(Class Method): 클래스 레벨에서 동작하며, 모든 인스턴스가 공유하는 메서드입니다. 클래스 메서드는 @classmethod 데코레이터를 사용하여 정의

첫 번째 매개변수 = cls (관례)

classmethod는 호출 방법은 staticmethod와 같지만 클래스 변수를 사용할 수 있다.

 

정적 메서드(Static Method)

특정 클래스에 국한되지 않은 독립적, 공통적으로 사용하는 메소드

@staticmethod 데코레이터를 사용하여 정의

staticmethod는 classmethod와 달리 클래스 변수를 사용할 수 없음

 

*미리 배우기 (random 모듈)

# 가위 바위 보
def rockSeasorPaper(integer):
  if integer == 1:
    return '가위'
  elif integer == 2:
    return '바위'
  elif integer == 3:
    return '보'
  else:
    return '1,2,3이 아닌 숫자'


while(True):
  person_lsp = int(input('1,2,3 중에서 입력해주세요. (1.가위, 2.바위, 3.보)').strip())
  computer_lsp = int((random.random() * 3) + 1)

  print('사용자가 낸 수 : ', rockSeasorPaper(person_lsp))
  print('컴퓨터가 낸 수 : ', rockSeasorPaper(computer_lsp))

  # 비기는 경우
  if(person_lsp == computer_lsp):
    print('비겼습니다. 이길때까지 반복돼요.')
    print()

  # 지는 경우
  elif((person_lsp == 1 and computer_lsp == 2) or (person_lsp == 2 and computer_lsp == 3) or (person_lsp == 3 and computer_lsp == 1)):
    print('졌습니다. 이길때까지 반복돼요.')
    print()

  # 이기는 경우
  elif((person_lsp == 2 and computer_lsp == 1) or (person_lsp == 3 and computer_lsp == 2) or (person_lsp == 1 and computer_lsp == 3)):
    print('이겼습니다. 종료합니다.')
    break;
class Lotto:
  list = []

  @classmethod
  def getNumber(cls):
    while True:
      # 새 번호 생성
      newNumber = int((random.random() * 44)+1)

      # 동일 비교
      flag = False
      for i in cls.list:
        if i == newNumber:
          flag = True

      # 동일값이 있으면 번호 생성 다시
      if flag == True:
        continue
      else:
        cls.list.append(newNumber)
        if len(cls.list) >= 6:
          break
    cls.list.sort()
    return cls.list

print(Lotto.getNumber())

'Python > 개요 및 문법' 카테고리의 다른 글

콜백함수와 람다함수  (0) 2024.09.26
사용자 정의 함수  (0) 2024.09.26
컬렉션과 반복문  (0) 2024.09.26
제어문 - 반복문  (0) 2024.09.25
제어문 - 조건문  (1) 2024.09.25