참고자료 : 데이터과학을 위한 파이썬 프로그래밍
객체 지향 프로그래밍
학습목표
- 객체 지향 프로그래밍을 배우는 이유에 대해 알아본다.
- 객체와 클래스의 개념에 대해 학습한다.
- 클래스를 구현하고 인스턴스를 사용하는 방법을 이해한다.
- 객체 지향 프로그래밍의 특징인 상속. 다형성, 가시성에 대해 학습한다.
01 객체 지향 프로그래밍을 배우는 이유
- 객체 지향 프로그래밍
⇒ 내가 아니라 남이 만든 코드를 재사용하고 싶을 때 사용하는 대표적인 방법
함수처럼 어떤 기능을 함수 코드로 묶어 두는 것이 아니라,
하나의 단일 프로그램을 객체라고 하는 코드로 만들어 다른 프로그래머가 재사용할 수 있도록 함
- 객체와 클래스
- 객체(object): 실생활에 존재하는 실제적인 물건 또는 개념
- 속성(attribute) : 객체가 가지고 있는 변수(variable)
- 행동(action) - 객체가 실제로 작동시키는 함수(fuction), 메서드
- 객체(object): 실생활에 존재하는 실제적인 물건 또는 개념
02 파이썬의 객체 지향 프로그래밍
- 클래스 구현하기
파이썬에서 클래스를 선언하기 위한 기본 코드 템플릿:
먼저 예약어인 class를 코드의 맨 앞에 입력하고, 만들고자 하는 클래스 이름을 작성한다. 그다음으로 상속받아야 하는 다른 클래스의 이름을 괄호 안에 넣는다.
🙌 파이썬에서 자주 사용하는 작명 기법
가존과 다르게 첫 글자와 중간 글자가 대문자
파이썬뿐만 아니라 모든 컴퓨터 프로그래밍 언어에서 변수, 클래스, 함수명을 짓는 작명 기법이 있다.
- 속성의 선언
속성에 대한 정보를 선언하기 위해서는 _ init_()라는 예약 함수를 사용한다.
파이썬 클래스에서는 몇 개의 예약 함수가 있는데. 대표적인 것이 iinit()가 있다.
이러한 함수들은 약속된 형태의 작업을 수행시켜 준다.
class SoccerPlayer(object):
def__init__(self, name, position, back_number):
self .name = name
self.position = position
self .back_number = back_number
→ init() 함수는 이 클래스에서 사용할 변수를 정의하는 함수이다.
init() 함수의 첫 번째 매개변수는 반드시 self 변수를 사용해야 한다.
self 변수는 클래스에서 생성된 인스턴스에 접근하는 예약어이다. (인스턴스를 지정하는 변수)
self 뒤의 매개변수들은 실제로 클래스가 가진 속성(축구 선수의 이름, 포지션, 등번호 등)이다.
이 값들은 실제로 생성되는 인스턴스에 할당된다. (할당되는 코드: self.name = name)
생성된 인스턴스에 있는 name 변수에 매개변수로 입력된 name이라는 값을 할당한다는 뜻이다.
클래스의 변수는 ‘self.변수이름’으로 init() 함수에서 자유롭게 생성할 수 있다.
- 함수의 선언
함수는 이 클래스가 할 수 있는 다양한 동작을 정의할 수 있다.
class SoccerPlayer(object):
def change_back_number(self, new_number):
print("선수의 등번호를 변경한다: From %d to %d" % (self .back_number, new_number))
self.back_number = new_number
→ 함수의 이름을 쓰고 매개변수를 사용
여기서 가장 큰 차이점은 self를 매개변수에 반드시 넣어야 한다는 것이다.
self가 있어야만 실제로 인스턴스가 사용할 수 있는 함수로 선언된다.
그 외에는 일반적인 함수의 사용 방법과 같다.
- _의 쓰임
일반적으로 파이썬에서 _의 쓰임은 개수에 따라 여러 가지로 나눌 수 있다.
for _ in range(10):
printC’Hello, World")
→ _ 1개는 이후로 쓰이지 않을 변수에 특별한 이름을 부여하고 싶지 않을 때 사용
또 다른 용도로 _ 2개를 사용하면 특수한 예약 함수나 변수를 의미한다.
다양한 용도가 있으니 _의 특수한 용도에 대해서도 인지해두는 것이 좋음
- 인스턴스 사용하기
생성된 클래스를 인스턴스로 호출해 사용하는 방법
인스턴스: 클래스에서 실제적인 데이터가 입력되어 사용할 수 있는 형태의 객체
먼저 클래스 이름을 호출하고, 앞에서 정의했던 __init_() 함수의 매개변수에 맞추어 값을 입력한다.
여기서 self 변수에는 아무런 값도 할당하지 않는다. (함수에서 배운 초깃값 지정과 같은 개념 )
# 전체 SoccerPlayer 코드
class SoccerPlayer(object):
def __init__(self, name, position, back_number):
self.name = name
self.position =position
self.back_number = back_number
def change_back_number(self, new_number):
print("선수의 등번호를 변경한다: From %d to %d" % (self.back_number, new_number))
self.back_number = new_number
def __str__(self):
return "Hello, My name is %s. I play in %s in center." % (self .name, self.position)
# SoccerPlayer를 사용하는 instance 코드
jinhyun = SoccerPlayerC’Jinhyun", "MF", 10)
print("현재 선수의 등번호는:,\\ j inhyun .back_number)
jinhyun.change_back_number(5)
print("현재 선수의 등번호는:", jinhyun.ba아c_number)
- 클래스를 사용하는 이유
자신이 만든 코드가 데이터 저장뿐 아니라 다른 역할을 해야 할 때 자신의 코드를 다른 사람이 손쉽게 사용할 수 있도록 설계하기 위함이다.
-> 데이터를 변환하거나 데이터베이스에 저장하는 등의 역할이 필요할 때가 있다.
이것을 리스트와 함수로 각각 만들어 공유하는 것보다 하나의 객체로 생성해 다른 사람들에게 배포한다면 작업이 훨씬 더 쉬워진다.
++ 코드를 좀 더 손쉽게 선언할 수 있다는 장점도 있다.
단순히 이차원 리스트로 선언할 수 있는 것을 객체 지향 프로그래밍의 개념을 적용시켜 좀 더 명확하 게 저장된 데이터를 확인할 수 있다. 특히 다른 사람들이 결과를 사용할 때 이 데이터가 무엇을 위한 데이터인지를 명확히 알 수 있다.
03 객체 지향 프로그래밍의 특징
- 상속
이름 그대로 무엇인가를 내려받는 것을 뜻한다.
→ 부모 클래스로부터 값과 메서드를 물려받아 자식 클래스를 생성한다는 뜻이다.
즉, 자식이 부모의 특성을 그대로 포함한 채 생성되는 것이다.
class Person(object):
pass
→ class라는 예약어 다음에 클래스명으로 Person을 쓰고 () 안에 object를 입력하였다.
여기서 object가 Person 클래스의 부모 클래스이다.
사실 object는 파이썬에서 사용하는 가장 기본 객체이며. 파이썬 언어가 객체 지향 프로그래밍이므로 모든 변수는 객체이다.
- 다형성
같은 이름의 메서드가 다른 기능을 하는 것을 말한다. 다형성을 사용하는 이유 : 해당 클래스의 사용자 입장에서는 함수의 이름만 알면 같은 형태로 사용할 수 있지만. 클래스 의 개발자 입장에서는 내부적인 구현을 각 클래스별 다르게 개발할 필요가 있다. 이를 다형성 이라고 하는데, 다형성을 사용하면 프로그램을 작성할 때 사용자가 좀 더 쉽게 클래스를 사용 할 수 있다.
- 가시성
객체의 정보를 볼 수 있는 레벨을 조절하여 객체의 정보 접근을 숨기는 것
좀 더 중요한 핵심 개념은 **캡슐화(encapsulation)**와 **정보 은닉 (information hiding)**이다. 파이썬객체의 매개변수 인터페이스만 명확히 알면 사용할 수 있다.
- 캡슐화 : 객체의 세부 내용은 모른 채 객체의 사용법만 알고 사용한다.
- → 클래스를 설계할 때 클래스 간 간섭 및 정보 공유를 최소화하여 개별 클래스가 단독으로도 잘 동작할 수 있도록 하기 위해 사용
- 정보 은닉 : 외부에서 코드 내부를 볼 수 없게 하기 위해 내부의 정보를 숨긴다.
⇒ 둘 다 외부에서 쉽게 사용하게 하고, 코드의 세부적인 내용은 모르게 한다
가시성이라는 이름으로 적용시키고. 정보 은닉을 어떻게 할 것인가를 코드에서 조절
'스터디 > 파이썬 스터디 강의자료' 카테고리의 다른 글
[2팀/김세연] 9차시 파이썬 스터디 - 모듈과 패키지 (0) | 2023.05.24 |
---|---|
[3팀/김경은] 8주차 파이썬 스터디 - 객체 지향 프로그래밍 (2) | 2023.05.19 |
[2팀/김세연] 8차시 파이썬 스터디-객체지향프로그래밍 (1) | 2023.05.18 |
[1팀/한규림] 8차시 파이썬 스터디 - 객체 지향 프로그래밍 (0) | 2023.05.18 |
[3팀/김규리] 8차시 파이썬 스터디 - 객체 지향 프로그래밍 (0) | 2023.05.18 |