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 (관례)
정적 메서드(Static Method)
특정 클래스에 국한되지 않은 독립적, 공통적으로 사용하는 메소드
@staticmethod 데코레이터를 사용하여 정의
*미리 배우기 (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())