파이썬 기초 2 - 04 객체의 세계로

핏자·2023년 4월 7일
0

인공지능사관학교

목록 보기
8/31
post-thumbnail
  • 객체지향 프로그래밍

- 지금까지의 이야기

반복문으로 같은 작업하는 명령 여러 개를 묶기

함수로 특정 명령 묶기

모듈로 함수 묶기

....


이들이 도입된 이유는?


이들은 모두 효율적인 "코드"를 위한 노력이다!

print("Hi!")
print("Hi!")
print("Hi!")
print("Hi!")
print("Hi!")
for i in range(5):
	print("Hi!")
def solve():
	...
solve()
solve()

- 문제점 발생!

더 큰 프로젝트를 진행 해야 하는데

코드가 너무 길어저...


지금까지의 아이디어로는

해결할 수 없는 문제들이 발생

- 발상의 전환

코드를 짜는 방법을 바꿔보자!


컴퓨터 프로그램이

객체객체상호작용이라면?

- 객체

성질할 수 있는 행동이 담긴 자료

이름: 성진, 나이: 21, 사는 곳: 서울, 취미: 코딩 /// 밥 먹기, 운동하기, 잠자기, 취미활동하기




  • 클래스와 인스턴스

- 클래스(class)

객체를 만들 수 있는

- 클래스 생성

class 클래스 이름:

class Hunam:

- 필드(Field)

객체가 가지고 있는 성질

= 객체가 가지고 있는 변수

class Hunam:
	name = "Bob"
    age = 10

- 메서드(Method)

객체가 할 수 있는 행동

= 객체가 할 수 있는 함수

class Hunam:
	def exercise(self):
    	print("스쿼시!")

- self

메서드라면 가져야하는 첫번째 매개변수

class Hunam:
	def exercise(self):
    	print("스쿼시!")

- 인스턴스(Instance)

객체를 만들 수 있는 틀(클래스)로 찍어낸 객체

- 인스턴스 만들기

인스턴스 이름 = 클래스이름()

bobby = Human()

- 인스턴스의 변수

인스턴스.변수

bobby = Human()
bobby.name # Bob
bobby.age # 10

- 인스턴스의 메서드

인스턴스.메서드()

bobby = Human()
bobby.exercise() # 스쿼시!



  • 왜 객체지향 프로그래밍인가?

이런 상황을 프로그램으로?

치O리타구O에게 '울음소리' 기술10의 데미지를 입혔다


우리가 지금까지 배운 내용으로 이를 구현할 수 있을까? No!


하지만, 객체지향 프로그래밍이 출동한다면?

- 포O몬 클래스 생성

- 포O몬 이라면 가져야할 특징은?

이름, 체력, 타입 등


- 포O몬이라면 할 수 있는 능력은?

각 포O몬의 기술


클래스 선언, 변수메서드 추가

class Poxxmon:
	p_name = ""
    P_hp = 0
    P_type = ""
    
    def skill(self):
    	pass

- 피O츄 클래스 생성

피O츄 특징은? '피O츄','체력:50','전기'

피O츄의 능력은? 10만 볼트

poxxmon 클래스를 상속하는 Pixxchu 클래스 생성

class Pixxchu(Poxxmon):
	p_name = "Pixxchu"
    P_hp = 50
    P_type = "Electric"
    
    def skill(self):
    	print("10만 볼트!")

- 피O츄 인스턴스 생성

Pixxchu 클래스로 찍어 낸 Pixx 인스턴스

pixx = Pixxchu()
pixx.skill() # 10만 볼트!
print(pixx.p_hp) # 50

- 왜 객체지향 프로그래밍인가?

상속, 다형성, 캡슐화를 통해

코드의 재사용이 쉽고

우리의 실생활을

더 잘나타낼 수 있기 때문이다!








  • 실습문제1. 붕어빵 만들기

    클래스 Bbread(붕어빵)을 만들어봅시다.
    Bbread의 필드 taste를 생성하고, "밀가루"를 대입해봅시다.
    Bbread의 메서드 eat()를 생성해봅시다. 이 메서드는 taste, "맛이 나요!"를 출력합니다.
    taste의 값이 "밀가루"라면 "밀가루 맛이 나요!" 가 출력됩니다.

# 클래스 Bbread(붕어빵)을 만들어봅시다.
# Bbread의 필드 taste를 생성하고, "밀가루"를 대입해봅시다.
# Bbread의 메서드 eat()를 생성해봅시다. 이 메서드는 taste, "맛이 나요!"를 출력합니다.
# taste의 값이 "밀가루"라면 "밀가루 맛이 나요!" 가 출력됩니다.
class Bbread:
    taste = "밀가루"
    def eat(self):
        print(self.taste, "맛이 나요!")
# 클래스 Bbread의 인스턴스 redBean과 choux를 만들어봅시다.
redBean = Bbread()
choux = Bbread()

# 객체 redBean의 필드 taste를 "팥"으로 바꿔줍시다
redBean.taste = "팥"

# 객체 choux의 필드 taste를 "슈크림"으로 바꿔줍시다
choux.taste = "슈크림"

# 객체 redBean의 메서드 eat()를 실행해봅시다
redBean.eat()

# 객체 choux의 메서드 eat()를 실행해봅시다
choux.eat()

>>> 팥 맛이 나요!
>>> 슈크림 맛이 나요!
profile
개발자 핏자의 로그들

0개의 댓글