Python/Basics

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 체크 리스트

  1. 프로그래밍이란, 어떤 것인지 정확히 이해하고 있는가?
  2. 클래스에 함수를 제외하면, 변수, 리스트, 튜플, 딕셔너리와 차이가 없음을 이해하고 있는가?
  3. 클래스 정의, 선언, 사용 단계를 구분 하고 있는가?
  4. 객체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

 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.