21. class - 변수
2024. 2. 3. 04:51
- -
전문 용어
*Class를 배우는 단계부터는, 개발자 입장에서 전문 지식을 바라보기 시작해야한다.
클래스 필수 용어 : Class, Object객체, Abstraction추상화
참고 : attribute속성, function함수, instance인스턴스, 실행, 메모리, OOP, POP
1. 용어를 배워야 하는 이유
'용어' 모든 지식의 '이정표'다.
개발자는 평생 공부해야 하는 '직업'으로, 과거의 지식이 아닌, 발전된 미래의 지식을 받아들일 준비가 되어 있어야 살아남을 수 있다. 이때, 모든 지식 습득의 기준점은 '용어'다.
2. 용어를 공부해야 하는 이유
2.1 같은 의미라도 시점에 따라 다른 용어를 사용한다.
- 클래스와 객체
- 함수와 메서드
- 매개변수와 인수
2.2 컴퓨터는 다양한 분야에서 같은 의미라도, 전문 분야에 따라 별도의 용어를 사용한다.
- 파일(File) 엔티티(Entity) 테이블(Table)
2.3 같은 용어라도, 전문 분야에 따라 다른 의미로 사용된다.
2.4 한국어로 번역(직역)이 잘못되어 문제가 생긴다.
- abstraction(추상화)는 한국어로 직역될 때 추상화라는 단어를 인지하는데 문제가 있다.
* 용어
사전적 의미 : 추상화(抽象化) 抽 뽑을 추 象 코끼리 상 化 될 화
개발적 의미 : Abstraction "현실의 어떤 것"의 코드 구현에 필요한 부분 간추리는 것이다.
: "추상적이다." 라는 문장은 , "구체적이지 않다"는 의미다.
모호한, 추상적인, 몇몇 속성만으로 대상이 식별 가능하다는 의미다.
1 체크 리스트
- 프로그래밍이란, 어떤 것인지 정확히 이해하고 있는가?
- 클래스에 함수를 제외하면, 변수, 리스트, 튜플, 딕셔너리와 차이가 없음을 이해하고 있는가?
- 클래스 정의, 선언, 사용 단계를 구분 하고 있는가?
- 객체object 개념를 이해하고 설명할 수 있는가?
2 프로그래밍이란?
: "현실의 어떤 대상"을 소스 코드로 구현하는 것이다.
"현실의 어떤 대상"은 수많은 속성( = 소스 코드로 표현 가능한 특징)을 가진다.
프로그래밍은, 프로그램에 필요한 속성만 소스 코드로 만드는 작업으로 시작한다.
* 도서의 속성을 뽑고, 소스 코드로 구현 예시
도서의 속성은 [제목, 크기, 무게, 재질, 출판사, 발행일, 두께, 페이지, 지은이, 편집자, ISBN 등 ] 수백, 수만가지가 될 수 있다. 프로그래밍은, 이 수많은 속성 중에서 프로그램에 필요한 일부 속성을 추려내는 작업을 가장 먼저 하게된다.
# 1
# 도서의 속성을 변수 10개로 표현해보세요
# tip
# 제목, 발행일, 크기, 무게, 재질, 출판사, 두께, 페이지, 지은이, 편집자, ISBN 등
b_title = "파이썬 프로그래밍"
b_dttm = "2023-01-01"
b_size = "600 x 400 x 40"
# 현실의 모든 것은, 소스 코드로 변경 가능하다. 는 것을 이해해야한다.
# 그리고 수많은 속성 중 프로그램에 필요한 것만 뽑아내는 과정이 프로그래밍의 시작점임을 이해해야 한다.
# 2
# 자기 자신을 속성(특성)을 변수 5개로 표현해보세요
# tip
# 이름, 성, 생일, 고향, 전화번호, 혈액형, 키, 몸무게, 국적, mbti,
# 배고픔 상태, 현재 기분, 최대 체력, 최대 의지, 필요 집중력, 열정 정도
fname = "상문"
lname = "최"
htown = "포항"
btype = 'B'
hlevel = "굶주림"
feeling = "예민"
hp = "10/100"
# 3
# 음료 속성(특성)을 변수 5개로 표현해보세요
# tip
# 음료 이름, 음료 가격, 음료 브랜드, 음료 용량, 음료 맛, 음료 유통기한, 음료 생산일 등
# 4
# 옷 속성(특성)을 변수 5개로 표현해보세요
# tip
# 옷 코드, 옷 가격, 옷 브랜드, 옷 사이즈, 옷 재질, 옷 용도, 옷 생산일 등
3 클래스를 만들고 사용하는 방법
3.1 정의(definition) → 선언(declaration) → 사용
# 클래스 정의
class 클래스이름:
변수
함수()
# 객체 선언, 클래스이름 뒤에 ()괄호 필수, 없으면 다른 의미 입니다.
객체이름 = 클래스이름()
# 객체 사용
print(객체이름.클래스변수)
객체이름.클래스변수
객체이름.클래스함수()
3.2 사용법 비교
- 1)클래스(class)는 정의(definition) → 2)객체이름에 선언(declaration) 후, 객체이름을 사용하다.
- 변수, 리스트, 튜플, 딕셔너리는 어떻게 사용하는지 비교하자
정의(definition)를 별도로 진행하지 않는다.
# 변수 정의 & 선언
변수이름 = 값
#변수 사용
print(변수이름)
# 리스트 정의 & 선언
리스트이름 = [값, 값, 값, 값]
# 리스트 사용
print(리스트이름)
print(리스트이름[0])
# 튜플 정의 & 선언
튜플이름 = (값, 값, 값, 값)
# 튜플 사용
print(튜플이름)
print(튜플이름[2])
# 딕셔너리 정의 & 선언
딕셔너리이름 = {'키1':값1,'키2':값}
# 딕셔너리 사용
print(딕셔너리이름['키1'])
# 클래스 정의
class 클래스이름:
변수
함수()
# 클래스 정의를 객체이름에 선언
객체이름 = 클래스이름()
# 객체사용
객체이름.클래스변수
객체이름.클래스함수()
3.3 함수를 제외한 클래스
클래스는 "데이터의 묶음"에 "함수"를 포함한 것, 그 이상도 이하도 아니다.
클래스에 함수를 제외한다면, 변수, 리스트, 튜플, 딕셔너리와 크게 다를 것 없는 데이터의 사용 방법 중 하나다.
# 변수 정의 & 선언
# 변수이름 = 값
title2 = "파이썬"
dttm2 = "20000101"
writer2 = "홍길동"
title3 = "JAVA"
dttm3 = "20020202"
writer3 = "이순신"
title4 = "C++"
dttm4 = "20230303"
writer4 = "김철수"
print(title4)
# 리스트 정의 & 선언
# 리스트이름 = [값, 값, 값, 값]
lst2 = ["파이썬", "20000101", "홍길동"]
lst3 = ["JAVA" , "20020202", "이순신"]
lst4 = ["C++" , "20230303", "김철수"]
print(lst4[0])
# 딕셔너리 정의 & 선언
# 딕셔너리이름 = {'키1':값1,'키2':값}
dic2 ={ "title":"파이썬", "dttm":"20000101", "writer":"홍길동"}
dic3 ={ "title":"JAVA" , "dttm":"20020202", "writer":"이순신"}
dic4 ={ "title":"C++" , "dttm":"20230303", "writer":"김철수"}
print(dic4["name"])
# 클래스 정의
# class 클래스이름:
# 변수
# 함수()
class cls2:
title = "파이썬"
dttm = "20000101"
writer = "홍길동"
class cls3:
title = "JAVA"
dttm = "20020202"
writer = "이순신"
class cls4:
title = "C++"
dttm = "20230303"
writer = "김철수"
# 클래스 선언
# 객체이름 = 클래스이름
obj2 = cls2()
obj3 = cls3()
obj4 = cls4()
# 객체 사용
print(obj4.title)
1) 연습대상 : 도서
*변수
"도서" 라는 현실의 대상을, 소스 코드로 표현해보자.
"도서" 가 가지고 있는 속성(=특성)을 변수 10개로 표현해보자.
# 1. 도서에 관련된 정보를 변수를 만들고 출력하세요.
# tip
# 도서 관리번호
# 도서 이름
# 도서 발행일
# 도서 지은이
book_no = "BO_123456"
title = "파이썬"
dttm = "2023-02-26"
writer = "홍길동"
print(book_no)
print(title)
print(issue)
print(writter)
*리스트
# 2. 도서의 속성(=특성)을 표현한 10개의 변수를
# book_info_list 라는 리스트에 추가해보세요.
book_info_list = [book_no, title, dttm, writer]
print(book_info_list)
print(book_info_list[0])
print(book_info_list[1])
print(book_info_list[2])
print(book_info_list[3])
*딕셔너리
# 3. 도서의 속성(=특성)을 표현한 10개의 변수를
# bookinfo_dicionary 라는 딕셔너리 변수명으로, 딕셔너리에 추가하세요.
bookinfo_dicionary = {'book_no' : book_no, 'title' : title, 'dttm' : dttm, 'writer' : writer}
print(bookinfo_dicionary)
print(bookinfo_dicionary['book_no'])
print(bookinfo_dicionary['title'])
print(bookinfo_dicionary['dttm'])
print(bookinfo_dicionary['writer'])
*클래스
# 4. 도서의 속성(=특성)을 표현한 10개의 변수를
# book_cls 라는 클래스이름으로, 클래스변수에 추가하세요.
class book_cls:
book_no = "BO_123456"
title = "파이썬"
dttm = "2023-02-26"
writer = "홍길동"
book_obj = book_cls()
print(book_obj)
print(book_obj.book_no)
print(book_obj.title)
print(book_obj.dttm)
print(book_obj.writer)
2) 연습대상 : 도서회원
# 도서관 회원
# 변수의 경우
# 회원 번호, 회원 이름, 회원 전화번호, 회원 주민번호, 회원 등록일을 변수로 만들고 출력하세요.
mmbr_no = "ME_12345"
mmbr_name = "홍길동"
mmbr_ph = "010-0000-0000"
mmbr_id = "abcd"
mmbr_dttm = '2023-02-27'
print(mmbr_no)
print(mmbr_name)
print(mmbr_ph)
print(mmbr_id)
print(mmbr_dttm)
# 리스트의 경우
# 1. 회원 번호, 2. 회원 이름, 3. 회원 전화번호, 4. 회원 주민번호, 5. 회원 등록일 변수를
# 리스트에 추가하세요.
# 딕셔너리의 경우
# 1. 회원 번호, 2. 회원 이름, 3. 회원 전화번호, 4. 회원 주민번호, 5. 회원 등록일 변수를
# 딕셔너리에 추가하세요.
# 클래스의 경우
# 1. 회원 번호, 2. 회원 이름, 3. 회원 전화번호, 4. 회원 주민번호, 5. 회원 등록일 변수를
# 클래스에 추가하세요.
3) 연습대상 : 대여기록
# 변수의 경우
# 도서관 대여기록
# 1대여번호, 2도서번호, 3회원번호, 4대여상태, 5대여일, 6반납예정일, 7반납일, 8지연일을 변수로 만들고 출력하세요.
rent_no = ""
book_no = ""
mmbr_no = ""
rent_status = ""
rent_start = ""
rent_due = ""
rent_end = ""
rent_late = ""
print(rent_no)
print(book_no)
print(mmbr_no)
print(rent_status)
print(rent_start)
print(rent_due)
print(rent_end)
print(rent_late)
# 리스트의 경우
# 1대여번호, 2도서번호, 3회원번호, 4대여상태, 5대여일, 6반납예정일, 7반납일, 8지연일 변수를
# 리스트에 추가하세요.
# 딕셔너리의 경우
# 1대여번호, 2도서번호, 3회원번호, 4대여상태, 5대여일, 6반납예정일, 7반납일, 8지연일 변수를
# 딕셔너리에 추가하세요.
# 클래스의 경우
# 1대여번호, 2도서번호, 3회원번호, 4대여상태, 5대여일, 6반납예정일, 7반납일, 8지연일 변수를
# 클래스에 추가하세요.
4 객체object
클래스의 "정의"란?
: 프로그램에서 "정의"한다는 것은, 구분 가능한 유일한 것을 만드는 것이다.
클래스이름을 정의(변수이름, 리스트이름, 함수이름 등) 하면 중복 할 수 없다.
정수, 실수, 문자열, 리스트, 튜플, 딕셔너리의 정의
① 정수, 실수, 문자열, 리스트, 튜플, 딕셔너리는 파이썬 내부에 자료형이 정의되어 있다.
② 정수, 실수, "문자", [리스트], {딕셔너리} 는 이미 정의된 형태로 할당 값에 따라 자동 적용된다.
③ 변수이름에 선언(할당)하고 사용하기 편리하다.
① 클래스는 좀 더 정확히 말하면 "사용자가 정의한 자료형"이다.
② 클래스는 사용자가 원하는 형태로 정의하고,
③ 객체이름에 선언(할당)해서 사용하는 것이다.
* 클래스, 정수, 실수, 문자열, 리스트, 튜플, 딕셔너리는 데이터를 다루는 하나의 방법임을 이해하고 응용할 수 있어야 한다.
객체란?
: 정의된 것을 사용하는 것이다.
파이썬의 정수형 변수, 리스트, 모든 것들은 객체다. 이미 내부에 클래스처럼 정의되어 있다.
# 변수의 경우
# 변수이름 = 값
var = "변수"
var_no = 3.14
var_obj = var_no
# 리스트의 경우
# 리스트이름 = 값
lst = [var, var_no]
list_copy = lst
list_obj = list_copy
# 딕셔너리의 경우
# 딕셔너리이름 = {키:값}
dic = ['var':var, 'var_no':var_no]
dic_copy = dic
dic_obj = dic_copy
# 클래스의 경우
# 클래스 정의
# 객체이름 = 클래스
class cls:
var = "변수"
var_no = 3.14
cls_copy = cls()
cls_obj = cls_copy # cls_obj = cls