Today's Trigger
우리 얼레벌레조의 SA문서 중 기능상세 부분을 작성하기 위해 ERD를 알아보던 중 클래스에 대한 조금 더 깊은 이해가 필요했다
그래서 오늘은 클래스에 대해 작성하려고 한다!
class 기본
클래스는 객체를 표현하기 위한 문법으로 데이터와 기능을 함께 묶어준다
그래서 클래스는 속성(attribute)과 메소드(method)를 포함하는 것이 일반적이다
예를 들어 자동차라는 클래스가 있다면
이 클래스의 속성으로는 종류, 색깔, 속도 등의 속성(attribute)등을 가질 수 있고
앞으로 이동, 뒤로 이동, 운행 종료 등의 동작 즉 메소드를 가질 수 있을 것이다
class Car:
def __init__(self, color,speed, distance=0):
self.color = color
self.speed = speed
self.distance = distance
def go_forward(self, move):
self.distance += move
def go_back(self, move):
if self.distance-move <= 0:
print(f"현재 뒤로 이동 가능한 거리는 {max(self.distance-move,0)}입니다. 다시 입력해주세요.")
else:
self.distance -= move
def check_distance(self):
print(f"현재 이동한 거리는 {self.distance}입니다.")
내가 만든 Car라는 클래스는 color, speed, distance라는 속성(attribute)를 가지도록 만들었다
그리고 Car의 메소드로 go_forward(앞으로 이동), go_back(뒤로 이동), check_distance(이동 거리 확인)의 세 가지 메소드를 가진다
c = Car("white", 50)
그리고 c라는 흰색이고 50의 스피드를 가진 객체(instance)를 만들었다
이제 c라는 자동차를 이동시켜보자!
c.go_forward(100) # 앞으로 100 이동
c.check_distance() # 현재 이동 거리 출력
c.go_back(200) # 뒤로 200 이동
c.check_distance() # 현재 이동 거리 출력
c.go_back(50) # 뒤로 50 이동
c.check_distance() # 현재 이동 거리 출력
이렇게 자동차를 이동시키면
다음과 같은 결과를 얻을 수 있다
class 심화
다이어그램을 작성 할 때 접근제어자라는 것을 적어주어야 했는데
global, private, protected가 있었는데
1. global
파이썬에서는 기본적으로 global로 작성이 된다고 한다
global로 정의된 변수들은 외부로부터의 모든 접근이 허용된다
2. protected
protected는 보호된 속성으로 변수 앞에 _(언더바 1개)를 붙여 사용한다.
protected로 정의된 변수는 해당 클래스의 서브클래스에서 접근이 가능하지만 외부 클래스에서는 접근을 하면 안된다는 의미를 가진다
파이썬에서는 접근 가능하지만 관례적으로 하지 않아야 한다고 한다
3. private
private는 비공개 속성으로 변수 앞에 __(언더바 2개)를 붙여 사용한다.
private로 정의된 변수는 외부에서 접근이 불가능하다. (물론 완전히 접근이 불가능 한 것은 아니다! 접근할 방법이 있기는 하나 여기서 다루지는 않겠다...!)
위에서 만든 Car 클래스의 speed를 self.__speed = speed 로 바꾸어 private 속성으로 만들어 준 후에 실행해 보았다
print("색깔 :", c.color)
print("==========================")
print("속도 :",c.__speed)
글로벌 속성인 color와 비공개 속성인 __speed를 각각 출력해 보았다
결과는 이렇게 color만 출력되고 __speed는 오류가 발생하는 것을 알 수 있다!
이렇게 protected와 private 속성을 이용하여 코드의 안정성과 유지보수성을 높일 수 있다고 한다!
그냥 정말 백지에 내가 생각해서 새로운 클래스를 작성한다는 일이 쉽지만은 않았다.
가이드가 있는 것도 아니었고
여기저기서 찾아본 것을 기억을 더듬어가며 작성했더니 많이 부족하다는 것을 느꼈다
오늘 클래스에 대해 공부하면서 기존에 만들어져 있는 클래스를 사용하는 것에 대한 이해를 좀 한 것 같다!
이후에는 상속이나 오버라이딩에 대해서도 공부를 해 보아야겠다!
'[내일배움캠프]스파르타코딩클럽 AI 웹개발 > Today I Learned' 카테고리의 다른 글
[내일배움캠프 11일차 TIL] 자료구조 - 연결리스트(Linked list)/스택(Stack) (0) | 2024.07.08 |
---|---|
[내일배움캠프 10일차 TIL] 이중리스트 풀기 with python (0) | 2024.07.05 |
[내일배움캠프 08일차 TIL] ASCII(아스키코드) with python (0) | 2024.07.03 |
[내일배움캠프 07일차 TIL]무한루프 반복문 (1) | 2024.07.02 |
[내일배움캠프 06일차 TIL] 비밀번호 해싱 with hashlib in python (0) | 2024.07.01 |