DINO NET
(23.02.02) 객체 지향 프로그래밍 기본 개념 1. 추상화(Abstraction) 본문
추상화(Abastraction)
특정 코드를 사용할 때, 필수적인 정보만 드러내고 나머지 세부사항은 감추는 것.
변수, 함수, 클래스 또한 추상화의 개념이다.
example)
#원의 넓이를 계산하는 함수
def Circle(radius):
PI = 3.1415926535
area = 2 * PI * radius * radius
print(round(area, 2))
Circle(2)
Circle(4)
Circle(7)
#[]를 이용해 빈 리스트 인스턴스 정의
ex_list = []
ex_list.append(5)
ex_list.append(3)
ex_list.append(8)
print(ex_list[0])
print(ex_list[1])
print(ex_list[2])
- PI는 원주율을 대신해주며, 사용자는 PI의 정확한 값을 알지 못해도 원주율이라는 개념으로 사용한다.
- 함수 Circle은 파라미터 radius만 채워주면 매커니즘을 알지 못해도 원의 넓이를 계산한 값을 얻을 수 있다.
- list는 파이썬 개발자들이 만들어놓은 클래스 중 하나이다. 우리는 리스트가 어떻게 생성되는지 알지 못해도, 리스트를 생성하는 방법, append라는 메소드가 무슨 작용을 하는지만 알고 사용을 하고 있다.
추상화 잘 적용하기
1. 클래스, 변수, 함수(메소드)명 직관적으로 짓기
: 이름만 보고도 쓰임새를 유추 할 수 있도록 의미가 담기게 짓는 것이 중요하다.
2. 문서화(docstring)하기
: 이름만으로 충분히 유추하기 힘드므로 docstring을 이용해 클래스, 변수, 함수를 설명할 수 있다.
"""
설명하고자 하는 내용을 적으면 된다.
"""
파이썬을 이용한 docstring은 크게 세가지 스타일로 나뉜다.
1. Google docstring
2. reStructuredText (파이썬 공식 문서화 기준)
3. NumPy/SciPy(통계, 과학 분야에서 쓰이는 Python 라이브러리)
아래 예제는 Google docstring을 이용해본 docstring이다. (정확하지는 않음)
example
class User:
""" User 클래스
SNS의 유저를 나타내는 클래스
Attributes:
count(int): SNS 유저 수
"""
count = 0
def __init__(self, name, email, pw):
"""__init__ 메소드
User 인스턴스의 기본 정보를 저장
Args:
name(str): 유저의 이름
email(str): 유저의 이메일
pw(str): 유저의 비밀번호
count(int): SNS의 유저 수. 인스턴스가 생성될 때마다 1씩 증가
"""
self.name = name
self.email = email
self.pw = pw
User.count += 1
def say_hello(self):
"""say_hello 메소드
유저의 이름을 포함한 인사 메세지를 출력한다.
"""
print("안녕하세요! 저는 {}입니다!".format(self.name))
def __str__(self):
"""__str__ 메소드
유저 정보를 정의된 문자열 형태로 리턴한다.
Returns:
str: 유저의 기본정보 리턴
"""
return "사용자: {}, 이메일: {}, 비밀번호: ******".format(self.name, self.email)
@classmethod
def number_of_users(cls):
"""number_of_users 메소드
총 유저 수를 출력하는 클래스 메소드
"""
print("총 유저 수는: {}입니다".format(cls.count))
help(User)
* help()는 클래스, 함수 등의 docstring을 포함한 정보를 확인할 수 있는 함수이다.
+) type hinting
정적 타입 언어: 변수의 타입을 미리 설정해야하는 언어. ex) java, C
# c 언어 예시
int a = 0;
float b = 3.5;
#a는 int 타입을 b는 float 타입을 갖는 변수이다. 타입 외의 값을 할당 할 수 없다.
int add(int x, int y){
return x + y;
}
#int는 함수의 rtype. 파라미터 또한 타입이 정해져있다.
동적 타입 언어: 변수에 할당되는 값에 따라 타입이 정해진다. 파이썬이 이에 해당한다.
a = 0 #int
b = 3.5 #float
def add(x, y):
return x + y
#위 함수는 파라미터의 값도, return의 값도 그때 그때 달라진다.
동적 타입 언어는 코드의 길이를 줄여주지만, 해당 클래스나, 함수에 필요한 파라미터 혹은 그 안에서 쓰이는 변수들의 타입을 한 눈에 알아보기 힘들다. type hinting은 그 점을 보안하기 위한 기능이다. (ver 3.5 이후)
class User:
count: int = 0
#변수: 타입
def __init__(self, name: str, email: str, pw: str) -> None:
#메소드(함수) 옆 -> 표시는 return type __init__ method는 return 값이 없으므로 None type
self.name = name
self.email = email
self.pw = pw
count += 1
def __str__(self) -> str:
#str 타입이 리턴되므로
return "{}님! 환영합니다!".format(self.name)
type hinting은 강제되는 값이 아닌 권고 값이므로 표시된 타입과 다른 타입을 할당하더라도 오류가 발생하지 않는다.
대신 팝업으로 경고창이 뜨거나 전혀 다른 결과값을 얻을 가능성이 있다.

'program() > 파이썬' 카테고리의 다른 글
| (23.02.06) 객체 지향 프로그래밍 기본 개념 4. 다형성(Polymorphism) (0) | 2023.02.06 |
|---|---|
| (23.02.03) 객체 지향 프로그래밍 기본 개념 3. 상속(Inheritance) (0) | 2023.02.03 |
| (23.02.03) 객체 지향 프로그래밍 기본 개념 2. 캡슐화(Encapsulation) (0) | 2023.02.03 |
| (23.02.01) 실습 (0) | 2023.02.02 |
| (23.01.08) 객체 타입, 객체 지향 / 절차 지향 (0) | 2023.01.18 |