:프로그램을 구성하는 변수와 함수들에서 서로 연관성 있는 것 끼리 묶어서 모듈화 하는 개발하는 언어들을 객체 지향 프로그래밍 언어
모든 프로그램: 절차 지향적인 방식
(결국 모든 프로그램은 변수에 따른 함수를 만드는 것이다)
→ 내용이 많아지면 유지&보수가 어려워 짐
(절차 지향 방식 ⇒ 유지 보수의 의 편의성 )
: 연관성 있는 값들과 그 값들을 처리하는 함수(메소드)들을 묶어서 가지고 있는 것(값)
→ 속성(Attribute)
⇒ 객체의 데이터/상태로 객체를 구성하는 값들.
→ 메소드(method) (= operator)
⇒ 객체가 제공하는 기능으로 주로 Attribute들을 처리한다.
python은 모든 값들이 instance type이다
(객체의 type)
: 동일한 형태의 객체들이 가져야 하는 Attribute와 Method들을 정의 한 것
class 로부터 객체(instance)를 생성한 뒤 사용한다.
class 클래스이름: # 선언부
# 클래스 구현
# 메소드들을 정의
클래스 이름의 관례: 파스칼 표기법-각 단어의 첫 글자는 대문자 나머진 소문자로 정의한다.
ex) Person, Student, HighSchoolStudent
→ 카멜 표기법과는 첫 글자가 대문자로 시작하는지 소문자로 시작하는 지의 차이가 있음
: instance의 데이터, instance가 가지는 값, instance의 상태
📍 객체에 속성을 추가, 조회Tip> x.y 의 의미 ⇒ 내가 쓰려하는 거는 y 인데 이 y는 x안에 있다는 의미
: instance를 생성 할 떄 호출되는 특수method → attribute를 초기화 하는 코드 구현
- 구문
def __init__(self [,매개변수들 선언]): #[ ] 옵션. # 구현 -> attribute(instance변수) 초기화 self.속성명= 값
변수 초기화: 처음 변수 만들어서 처음 값 대입.
self : 현재 만들어지고 있는 객체
첫 번째 parameter 는 self로 받는다
- 메소드는 반드시 한 개 이상의 parameter를 선언해야 함
→ self는 그 중 첫 번째 parameter
- 메소드 호출 시 그 메소드를 소유한 instance가 self parameter에 할당
- Initializer의 self : 현재 만들어 지고 있는 객체를 받는다.
- 메소드의 self : 메소드를 소유한 객체를 받는다.
- Caller에서 생성자/메소드에 전달된 argument들을 받을 parameter는 두 번째 변수부터 선언한다.
: 객체가 제공하는 기능
객체의 attribute값을 처리하는 기능을 구현한다.
구문
def 이름(self [, 매개변수들 선언]): # 구현 # attribute 사용(조회/대입) self.attribute
self (첫번째 매개변수)
- method를 소유한 객체를 받는 변수
- 호출할 때 전달하는 argument를 받는 매개변수는 두번째 부터 선언한다
ex)
p.(set_info(”홍길동”, 20, “서울") #이 두개가 연결 → p ⇒ self ”홍길동” ⇒ name 20 ⇒ age ”서울” ⇒ address def set_info(self, name, age, address)
Attribute의 값을 caller(객체 외부)가 마음대로 바꾸지 못하게 하기 위해
→ 직접 호출을 막고 setter/getter 메소드를 통해 값을 변경/조회 하도록
(필요성 있음)
→ 그냥 내용을 조회 할 수 없게 가려버림 (데이터 보호가 주 목적)
⇒ mehtod 통해 접근 할 수 있게 한다 (getter로 조회)
📍 Attribute 직접 호출 막기setter
- Attribute의 값을 변경하는 메소드. 관례상 set 으로 시작
getter
- Attribute의 값을 조회하는 메소드. 관례상 get 으로 시작
ex) 객체의 값 외부에서 변경
p = Person("홍길동", 20, "서울")
print(p.name, p.age, p.address)
p.print_info()
p.age = 30
p.print_info() # age가 변경 됨
[person class에 정보 은닉 적용]
1. attribute 변수들을 외부에서 호출 할 수 없도록 만들어 줌
→ self.__변수명 = 초기값 (*이때 뒤에도 _붙이면 다시 풀어짐
2. attribute변수들을 조회(getter), 변경 (setter) 하는 메소드를 정의
ex)
class Person:
def __init__(self, name, age, address):
self.name = name
self.__age = age
self.address = address
self.email = None
# age 값을 조회하는 메소드
def get_age(self):
return self.__age # 같은 class에서는 __age(원래이름)로 호출 가능.
# age값을 변경하는 메소드
def set_age(self, age):
if 0 <= age <=100:
self.__age = age
else:
print(f"{age}는 나이에 넣을 수 없습니다. 0 ~ 100 사이 정수를 넣어주세요.")
구현
- getter/setter 메소드를 만든다.
- 변수 = property(getter, setter) 를 등록한다.
- 호출
→ 값조회: 변수를 사용 => getter가 호출 된다.
→ 값변경: 변수 = 변경할 값 => setter가 호출 된다
(예시 제시)
(예시 제시)