📋 충북대학교 공동훈련센터 IoT기반 스마트솔루션 개발자 양성과정
[ 파이썬 기초 마지막날(?) ]
언제부턴가 프로그래밍을 배우지 않을때부터
객체지향~ 객체지향~ 하는 이야기가 많이 들려왔다
나만의 착각일 수도 있지만 객체를 지양하는게 아닌 지향한다는건
최대한 객체로 만들라는 뜻 아닐까? 라는 생각을 했다
솔직히 정확한 뜻은 모른다
얼추 짐작해서 이런것을 말하는구나~ 싶긴한데
자료를 찾아봐도 대부분이 대답이 같은 것은 없고
두루뭉술한 수준인 것 같다
그런데 클래스를 배우면서 객체지향에 대한 단어의 이해를
확연하게 키울 수 있는것 같다
먼저 클래스의 코드 구조를 살펴보자
파이썬에서의 클래스는 앞에 class 자가 붙는다
이것으로 다음 문구들이 class 인지 아닌지 구분할 수 있고
바로 첫번째 문단에 생성자가 올 수 있도록 한다
이 구조만 봤을때 느껴지는 건
클래스 안에 def 로 함수들이 오는구나 하는것인데
이를 보고 객체지향이라고 한다면
어느정도 느낌이 올지도 모르겠다
지금까지 활용해보면서 느껴본 객체지향이라 함은
한가지로 분류된 코드에 줄줄이 여러 기능을 넣고 쓰는게 아닌
중요한 기능, 세부적인 기능 등 여러 기능들에 있어
각각의 객체로 만들어주고
그 객체들을 적재적소에 불러와서 이용할 수 있게끔
구성을 해주는 것이 객체지향이라고 느끼고 있다
물론 정확한 표현은 아니지만
대략적으로 이렇게 이해하면 쉽지 않을까~ 하는 개인적인 생각이다
📋 생성자와 접근제어자
클래스의 가장 앞 부분에 나오는 __init__ 이 함수가 생성자다
생성자는 클래스를 호출할 때 초기값들을 설정해주는 역할이다
간혹 밑줄이 한개처럼 보일 때도 있지만 꼭 앞뒤로 두개씩을 붙여줘야 하고
init 글자가 생성자 역할을 하기 때문에
해당 함수는 생성자로 활용될 때 변함이 없다 ( __init__ )
클래스 사용에 앞서 인수를 넘겨주면
해당 인수를 매개변수로 받고
매개변수에 해당하는 내용에 대한 초기값을 생성자에서 줄 수가 있다
class Television:
def __init__(self, channel, volume, on):
self.channel = channel
self.volume = volume
self.on = on
def show(self):
print(self.channel, self.volume, self.on)
def setChannel(self, channel):
self.channel = channel
def getChannel(self):
return self.channel
Television 이라는 클래스가 존재를 하고
생성자에 매개변수로 self, channel, volume, on 을 받아들일 때
아래와 같은 코드로 어떻게 변화하는지 볼 수 있다
t = Television(9, 10, True)
t.show()
t.setChannel(11)
t.show()
9 10 True 로 인자를 넘기고
생성자에서 전역변수를 활용하기 위해 self. 을 필수로 붙여준다
그리고 self가 붙은 전역변수들의 값을
생성자에서 받아오는 매개변수들의 값과 동일화 시켜주고
그대로 프린트를 하게 되면 매개변수로 받은 9 10 True를 다시 출력한다
setChannel 함수를 통해 채널만 바꾸고
다시 show 를 통해 출력하면
채널만 변경된 것을 볼 수 있다
이처럼 생성자는 매개변수로 받아들이는 인수들의
초기값을 설정할 수 있도록 할 수 있다
접근제어자는 클래스 안에서 쓰이는데
양쪽이 밑줄 두개가 아닌 이상 클래스 내에서 한정적으로 쓰인다
즉 지역변수와 동일하게 클래스 내에서만 살아서 기능한다
이정도만 알아도 클래스 사용에는 큰 무리가 없는 것으로 판단되고,
새로운 지식이 있다면 추가적으로 넣도록 하겠다
마지막으로 수업을 들으면서 만들었던
버스카드 충전 및 잔액 표시 등의 기능을 넣었던
코드를 공유하고 마치도록 하겠다
[ 버스카드 클래스 연습 ]
1) 버스 충전 카드 클래스 생성
2) 충전할 금액 입력
3) 버스 탑승 여부 질문 (Y/N)
3-1) 탑승시 1200원씩 차감 및 몇회째 탑승인지 카운트 + 잔액 표시
3-2) 미탑승시 몇회 탑승했는지 카운트 표시 및 잔액 표시
3-3) 잔액 부족시 메시지 출력과 함께 종료
아래는 내가 작성한 코드이며
미탑승시 재충전 여부를 묻는 기능과
재충전시 기존에 남아있던 금액 + 재충전한 금액까지 포함하여 진행,
앞으로 남은 잔액으로 몇회 탑승할 수 있는지까지 제시하는 기능을 포함하였다
class BusCard :
def __init__(self) :
self.__balance = 0
def withDraw(self, amount) :
self.__balance -= amount
return self.__balance
def deposit(self, amount) :
self.__balance += amount
return self.__balance
def main() :
fCharge = int(input("충전금액 입력 : "))
global bus
bus = BusCard()
bus.deposit(fCharge)
count = 0
while True:
getIn = str(input("☞ 승차 하시겠습니까?(Y/N) : "))
if ((getIn == str("Y")) or (getIn == str("y"))) :
count += 1
print("\n<< %d 회 탑승 >>" % count)
change = bus.withDraw(1200)
print("『 잔액 』 : %d" % change)
print("")
if (change < 1200):
print("=== 잔액이 부족합니다 ===")
break
elif ((getIn == str("N")) or (getIn == str("n"))):
print("\n=== 승차 의사 없음 ===")
print("\n『 잔액 』 : %d" % change)
print("남은 탑승가능 횟수 : %d\n" % (change // 1200))
choice()
continue
else :
print("\n▣ Y 혹은 N 으로 답변해주세요 ▣\n")
continue
def choice() :
choice = int(input("1) 재시작\t2) 프로그램 종료 : "))
if choice == 1 :
fCharge = int(input("\n재충전금액 입력 : "))
global bus
bus.deposit(fCharge)
else :
print("\n=== 프로그램 종료 ===\n")
err
main()
'Python' 카테고리의 다른 글
python으로 DB 파일 출력 및 수정 (0) | 2022.10.27 |
---|---|
Python 과 File (0) | 2022.09.07 |
파이썬 딕셔너리(Python Dictionary) (0) | 2022.09.06 |
튜플(Tuple) (0) | 2022.09.06 |