Upstage AI LAB 부트캠프 5기/실시간 공부내용 복습

[2024.09.24] Python 기초 강의 공부 내용 정리

김 도경 2024. 9. 24. 21:23

* 강의를 듣고 필기한 내용일 이후에 따로 정리한 내용입니다.

 

1-1. 파이썬을 사용하는 이유
  • 간결하고 쉽다
    - JAVA나 다른 언어도 IDE(Integrated Development Environment, 통합개발환경)을 사용하기에 쓰는 것 자체가 길진 않다.
    - 하지만 간결하기에 가독성면으로 굉장히 뛰어난편
    - 이 이유로 유지보수와 협업도 유리함
    * 추가 공부 자료
     - http://helloworldcollection.de/
     - https://zdnet.co.kr/view/?no=20201102154809
  • 데이터분석과 머신러닝을 위한 수많은 라이브러리를 가지고 있다.
    - 라이브러리 예시
       - NumPy  (Numerical Python : 산술연산) : 빠른행렬연산을 위한 라이브러리, 딥러닝시 사용
       - pandas  (Panel data & series) 행/열이 있는 엑셀 파일(정형데이터) 핸들링을 위한 라이브러리 : 엑셀데이터 사용에 용이
       - matplotlib (matrix plotting library) : 데이터 시각화를 위한 라이브러리
       - SciPy, scikit, TensorFlow 등 많은 라이브러리가 있음 
  • 다양한 확장이 용이하다
    - R, Spss, Matlab, Excel, 등과 비교해서도 엄청나게 확장이 용이함
    - 업무자동화의 경우, 이메일, SMS, 엑셀, CSV, 슬랙, 카카오톡 모두 가능할정도로 용이

1-2. 파이썬을 공부하기 위해서 Jupter Notebook을 사용하는 이유

 

- 프로그래밍 방법은 3가지가 있음 : Command line interface, .py, Jupter notebook

  • Jupter Notebook 사용 이유
    - 인터랙티브 프로그래밍 환경
    - 코딩하며 결과를 바로 확인가능
    - 문서화가 용이
    - Anaconda 개발환경 적용(설치된 라이브러리, 파이썬 버전 등 호환이 쉬움)
    - 단축키도 사용이 쉬움

주피터 노트북에서 쓰기 좋은 단축키

  • Cell의 실행 : Shift + Enter 
  • Cell의 복사/붙여넣기/잘라내기 : ESC -> C / V / X 
  • 되돌리기 : ESC -> Z
  • Delete : DD   - 실수 방지, 리눅스의 텍스트편집에서 온 것
  • Insert : 위 (A(above)), 아래(B(below))
  • Edit mode -> ESC -> Command mode -> Enter -> Edit mode
  • 만약에 함수가 무엇인지 모르면
    1. 구글링을 한다
    2. 함수 이름뒤에 커서를 두고 Shift + tab : 함수에 대한 설명서를 보여준다 (Shift + Tap : 함수 & 변수의 Docstring 확인)

Python 기초 함수 배우기

 

파이썬 공부에 좋은 사이트

 

2-1. 기초 데이터 타입

 

!!!반드시 기억해야할 함수!!!

  • print(x) : x에 대한 값을 출력하라는 함수
  • type(x) : x의 타입을 묻는 함수
                  - int (integer) 정수 , float (floating-point number) 실수 ==부동소수점 == Real number
                  - str (string) 글자를 나타냄(줄이 지어서 있단 의미)
                  - 서로의 타입을 바꾸는 것이 가능, int(), str()의 변수를 사용함

 

  • 정수형과 실수형
    - 숫자의 형태를 가진 타입
x = 9 # x변수에 9를 저장하는 것

         #x == 9  : 같느냐?라는 질문문 -> 같으면 True , 다르면 False
         #X != 9  :  같지 않느냐?라는 질문문 -> 같으면 False , 다르면 True


- 연산자 사용
            + (더하기), *(곱하기) , **(제곱연산)
            / (나누기-몫,소수점까지 계산됨), % (나누기-나머지)

- 변수를 담으려면 한번 더 적어줘야한다.

x *= 2
x

-> 원래 x가 4였다면, 지금의 x는 8이 된다.

 

y = 2.5
int (y) # from float to integer       -> 2로 출력

x = 9 
float(x)          -> 9.0으로 출력

 

정수와 실수를 서로 바꿔줄 수 있음. 실수(소숫점이 있는경우)의 경우 내림이 됨

 

  • 문자열
s = "Hello"

 

- (여러 멤버들을 가지고 있는)그룹형 변수 / 작은따옴표도 가능, 하지만 작은따옴표가 안이어야함

- type(s)          ->str 출력

 

사용되는 주요 함수

len()     :  그룹형 변수들의 멤버수 length(len) , 개수를 함. hello의 경우 5개

s.          : str이라는 의미
s.supper : 모두 대문자로
s.lower : 모두 소문자로, lo까지 치고 tab을 누르면 나옴

 

format 함수의 사용

print("My name is {}".format("Groot"))
sentence = "My name is {}"
print(sentence.format("Groot"))

sentence = "My name is {} and my age is {}"
sentence.format("Groot", 32)

 

문자열 합치기 : 숫자열과 동일하게 +를 해주면 됨

print("Hello" + " " + "world")  -> Hello world

 

중간까지 출력하기

temp = "Python"

temp[0]             -> P 출력
temp[0:3]           -> Pyt 출력
temp[4:]            -> on 출력
temp[-1] # 뒤에서부터 시작, 뒤에서부터 몇번째라는 의미 -> n 출력

 

글자에서 곱하기

x = 214
x = str(x) # Integer to string <-앞에 x를 해줘야 덮어쓰기임     -> '1234112341'출력

'12341' *2 
float('1234')*2 # 문자->숫자가 더 많이 사용됨     ->  2468.0
2-2. 함수

- 함수에 대하여 기본적인 내용

 함수의 기본형태!라고 부르는 형태 **가장 많이 사용하게 되기에 꼭 기억하기**

def add_nums(num1, num2): 
    result = num1+num2
    return result

def( define )  : 정의하다, 함수를 정의해주는 것    

         # add_numbs라는 함수안에 num1과 num2가 있다는 걸 정의함

          # :를 쓰지 않으면 에러가 난다, 코드는 줄이 바뀌면 인지를 못함 -> 그렇기에 묶어줄 필요가 있음 :와 들여쓰기 사용!

 

  • 용어 설명
    - num1, num2 : parameter (매개변수)  ->통계학/예측모델/프로그래밍에서 말하는 파라미터가 조금씩 다르다
                                                                 -> 프로그래밍에서는 함수정의시 사용하는 임시 그릇
add_nums(2, 3)

 

         - 2,3 : Argumnet (인자)

 

  • ERROR문구
    # SyntaxError :  에러는 무언가 쓰지 않았거나, 더 쓴 경우 나타나는 에러이다.
    # TypeError  : 타입이 잘못되었다는 에러
    # IndentationError : 들여쓰기 에러
    - 에러는 최대한 영어를 읽으면 이해가 할 수 있다. : 영어를 번역하면 대부분 이해가 됨

    * missing 1 required : 자주 보이는 에러
    -> 함수이름 뒤에서 Shift + TAB을 해주면 된다.
    - 함수 안에 어떤 것이 들어가야하는 지 나온다.
    * not defined : 함수가 지금 정의가 된 게 없다는 의미. -> 해당 변수가 처음 등장했던 위치로 가서 cell 실행

  • 함수에 디폴트 매기기 가능함 : 단 안에서 시작하기.
  • 함수의 Scope : 함수의 집안은 집안안에서 끝난다.
    - 함수를 실행했을때, 위에서부터 실행되고, 메모리에 올라간다.
    - 함수 내부에는 별개로 저장이 되어있지 않고, 전체가 들어가있기에 일부만을 실행하기 불가능하다.

2. Quiz

# Quiz 1. 성과 이름을 받아 이름을 돌려주는 함수 name_creator 만들기

def name_creator(last, first):
    full_name = last + first
    return full_name
    
    name_creator("그", "루트")

- 함수를 초기부터 작성하기 보다는 이전에 했던 걸 그대로 가져와서 수정하는 쪽으로 하면 쉽다.

- full name은 없이 해도 괜찮다. full name은 return으로 내보내기 위한 것이지, 후속조치가 필요없을 땐 생략가능.

# Quiz 2. 다음 함수는 에러를 출력합니다. 어디를 고쳐야할까요?
def drink():
    beverage = "Coke"
    print(beverage)

- 들여쓰기가 틀렸던 것. :뒤에는 반드시 들여쓰기를 해야한다.

# Quiz 3. 원의 반지름을 받아 원의 넓이를 Return 해주는 함수 circle_area 만들기 (ㅠ = 3.14)

def circle_area(radius):
    result = 3.14 * radius ** 2
    return result

circle_area(10)

 

* 절대 바닥부터 쓰지 말고, 기본모형을 가지고 와서 수정을 하는 법을 기억해야한다.

 

2-3. 컨테이너

# 가로의 종류가 중요함

list     x = list(~~~)   x = [1,2,3,4,5,.....]
dict     x= dict(~~~~~)- 다른 데이터를 dict로 바꿀때 씀 , x ={key1:value1, k2:v2, k3:v3, ....}
tuple    x= tuple (~~~)          x = (1,2,3,4,5,...)- 잘 안 만드는 함수임
set      x= set (~~~)              x = {1,2,3,4,5,...}

#책에서 굉장히 방대하게 설명하나, 세부적인 건 안 쓰기에 그정도로 할 필요 없음
# CRUD - Create Read Update Delete : 웹프로그래밍 언어, 
- 리스트변수를 어떻게 만들지, 읽지, 추가하지, 지우지 이렇게 공부하기

 

  • list 
x = [3,1,2,4,6]   :  리스트 생성
x [0]     -> 3이 출력
x [0:3]   -> [3,1,2]가 출력
x [-1]    -> 6이 출력
x [1:]    -> 두번째부터 끝까지, [1,2,4,6]이 출력

 

x. 하고 tab을 누르면 10가지 정도 나오는데 이 중에서 몇가지 안 쓴다. ; 쓰는 것 알아두기

 

- append : 추가하기

x.append(10) # 리스트 item 추가하기
x            -> [3, 1, 2, 4, 6, 10] 출력

 

- 지우기

x = [1,2,3,4,5]

del x      : x라는 변수를 없애버리기
del x[0]   : 첫번째꺼를 지우기 -> [2,3,4,5] 출력

* del은 함수가 아니라 명령어이다, 파이썬 내부에 있다.

# python list find index number by value를 통해서 데이터의 위치를 찾아서 이에 대해서 지울 수 있다.

x= [1,2,3,4,5]

x.remove [4]      -> 4를 지워라. x=[1,2,3,5] 출력

 * remove함수는 잘 안 안쓰는 함수이다.

 - 중복되는 것을 지워주지 못함. 중복이 있으면 가장 앞에 있는 걸 지워줌.

 

리스트를 더하기

# 리스트 합치기
y = [3, 4, 5]
z = x + y # 쉽게 생각해보세요 :)
z                             -> [3, 1, 2, 4, 6, 3, 4, 5] 출력

 

리스트를 정렬하기

z.sort()
z                 -> [1, 2, 3, 4, 5, 6, 10] 출력

 

   - 역순정렬

z.sort(reverse=True) # '거꾸로'를 영어로 reverse
                            -> [10, 6, 5, 4, 3, 2, 1] 출력

 

  • dict : 딕셔너리 - 사전 쓰듯이 쓰면 됨
    - key값 위주
: 를 넣는 곳
- index number 범위 지정 (ex. 'python'[1:3]
- 멀틸라인 코드 블록 (ex. def)
- dict에서 item 생성 (ex. {"key" : 'value', ....})
cage = {'Cat' : '야옹', 'Dog' : '멍멍'} # {key:value, key:value, ...}
cage

cage['Cat']   -> 야옹 출력

-> 여기서 뜨는 에러 : KeyError가 자주 뜸 (Key가 정의가 안되었을때 나타나는 오류)

-> 에러가 뜰 때, get을 넣어주면 된다.

cage('tiger')                  ->  key에러가 출력

cage.get('Cat')                      -> 야옹이 출력
cage.get('tiger','없는동물')         -> 없는 동물이 출력 : error를 부드럽게 넘어갈 수 있음
cage.get('Cat', '없는 동물')         -> 야옹이 출력

 

in을 사용을 하여 key 체크를 할 수 있다.

# key 유무 체크가능    
print('Cat' in cage)       -> True
print('Pig' in cage)       -> False
print('야옹' in cage)      -> False

 

dict에 새로운 item 추가하기

cage['Pig'] = '꿀꿀' # dict에 새로운 item 추가하기
cage

cage['Pig]  = '꿀꿀꿀'            -> 꿀꿀꿀만 출력이 됨(중복X)

 

*** Key 값에 대한 중복을 허용하지 않는다

 

dict에 item 제거하기

del cage['Pig'] 
cage                       -> pig가 완전히 삭제

 

dict의 각각의 값만 모으기 및 list만들기

cage.keys()        -> key 값만 모아라
list(cage.keys())  -> key값만 모아서 리스트를 만들어라

cage.values()      -> values만 모아라

 

dict을 체크하는 함수

term = '야옹'

term in cage.key()           : 야옹이 key값에 있는지 확인 ->False
term in cage.values()        : 야옹이 values값에 있는지 확인 ->False

 

  • tuple(튜플) 
    - 수정이 절대 불가능하다, 값과 크기가 바뀌지 않는다.
# 튜플이 사용되는 예시

def return_tuple(x, y):
    return x, y , x**y, x*y/y, x**3

what = return_tuple(3, 4)
what                                  -> (3, 4, 81, 3.0, 27)로 출력

 

- 함수의 실행결과로 reture값이 여러개일때 tuple로 받아줄 수 있음

 

  • set
    - 자동으로 중복제거 : list의 경우 중복은 전혀 신경쓰지 않음 
s = {1,2,3,4,4,4,5,5}

s = {1,2,3,4,5}로 출력

 

 - 바닥부터 만들지 않는데, list에 중복이 많으면 set함수를 이용하여 중복을 제거하는 목적으로 사용이 자주 됨.

temp = [1, 2, 3, 3, 4, 4, 5]
temp                          -> [1, 2, 3, 3, 4, 4, 5]


what = list(set(temp))      -> 중복이 날라간 list로 다시 만드는 방법
what                        -> [1, 2, 3, 4, 5]

 

- 두개의 리스트에 중복되는 아이템의 개수(교집합)을 구하는 것

list_a = ['감자', '고추가루', '설탕', '토마토', '계란', '고등어']
list_b = ['감자', '고추가루', '고등어', '무', '후추']

set_a=set(list_a)
set_b=set(list_b)

set_a.difference(set_b)     # 차집합    -> {'계란', '설탕', '토마토'}
set_a.intersection(set_b)   # 교집합    -> {'감자', '고등어', '고추가루'}
set_a.union(set_b)          # 합집합    -> {'감자', '계란', '고등어', '고추가루', '무', '설탕', '토마토', '후추'}

 

2-4. 조건문과 반복문

 

  • if (조건문)
    - 주어진 조건이 참(True)일 때 그 아래에 있는 코드를 실행하는 조건문

- if는 True 혹은 False로 나오는 문을 적어준다.

if True : if문 아래의 내용은 무조건 적용
if False : if문 아래 내용 무시

 

- if문 사용 예시

def check_price(lunch_price):
    
    price_label = ''
    
    if lunch_price > 10000:
        price_label = "프리미엄 도시락"
    elif lunch_price < 3000: 
        price_label = "저렴이 도시락"
    else: # 나머지 조건 모두 받기
        price_label = "무난무난 도시락"
        
    return price_label

check_price(15000)       -> 프리미엄 도시락
check_price(1000)        -> 저렴이 도시락
check_price(7000)        -> 무난무난 도시락

* keyword : if, elif , else      

- elif는 if가 아닌 경우, 다른 조건을 넣을 수 있음, 안 써도 괜찮고, 원하는 횟수만큼 사용 가능

- else : 뒤에 어떤 것도 적으면 안됨. 나머지 모든 경우를 말하는 것. 단 한 번만 사용 가능.

- : 을 빠뜨리지 않기! 굉장히 중요함!

 

- if문 사용 예시 (in과 함께 사용)

cage = ['Cat', 'Dog', 'Tiger']

if 'Cat' in cage:  # Key 유무 체크
    print('야옹아 이리온')               -> 야옹아 이리온   출력
cage = {'Cat': '야옹', 'Dog': '멍멍', 'Tiger': '어흥'}

if 'Dog' in cage.keys(): # Key 유무 체크
    print('치와와는 언제와')           -> 출력
term = '멍멍'

if (term in cage.keys()) or (term in cage.values()):
    print('들어있음')                                -> 출력

 

  • 0이 아닌 모든 숫자 or 비어있지 않은 모든 그룹형 변수 -> True
  • 0 or 비어있는 모든 그룹형 변수 -> False
if 1:
if (2,3) :
if [3,5,6] :
->True
    
    
if 0:
if []:
if () :
-> False

 

  • for(반복문)
    -for문과 관련된 문법적인 약속
for something in 그룹형_변수:
    ~~~(something)~~~

 

- 그룹형 변수를 안에 있는 멤버를 하니씩 꺼내서 무언가 적용을 해아할 때 사용

nums = [1, 2, 3, 4, 5]

for number in nums:
    print(number)          -> 1,2,3,4,5 각각 출력됨
    print(Hello)           -> Hello가 5번 출력됨
cage = {'Cat': '야옹', 'Dog': '멍멍', 'Tiger': '어흥'}

for item in cage.keys(): 
    print(item)             -> Cat    Dog     Tiger

for item in cage.values(): 
    print(item)             -> 야옹       멍멍       어흥
    
for item in cage.items():     # values + keys = items
    print(item)             -> ('Cat', '야옹')     ('Dog', '멍멍')   ('Tiger', '어흥')
# 숫자들의 리스트에서 1과 4가 연속으로 나오는 숫자 찾기

list_of_nums = [121142131512315, 1241561717265467, 153462615114151231, 1634263414616123, 15236172821568]
for num in list_of_nums:            #num은 임시변수(아무거나 가능하지만 맞춰야함)
    if '14' in str(num):
        print(num)               
        
->14가 들어있는 것만 출력

 

range 함수

range(5)

-> range(0, 5)가 출력됨
for index in range(5):
    print(index)     -> 0   1     2     3   4가 출력됨 : 5가 출력되지 않음

 

- 특정문을 여러번 출력하고 싶을 때, range함수를 쓰면 됨.

 

for문 시작전에 비어있는 리스트가 있을 경우

students = ['철수', '영희', '동수'] 

empty_list = []
for student in students:
    empty_list.append('김' + student) # 리스트에 item 추가하기
    
empty_list                -> ['김철수', '김영희', '김동수'] 출력

- empty_list가 주된 것, 이것을 채우기 위한 코드이다. for문으로 empty_list를 만드는 것이다.

 

  • while (if +for 의 느낌, if랑 비교 필요)
temp = 1
while temp <= 10:     # 10까지 무한루프반복
    print(temp)
    temp = temp + 1 # temp 를 1 증가시켜주려면?
# 무한 루프, Pass, Interrupting kernel

while True:
    pass

- pass : 반복문이 스무스하게 지나갈 수 있게 해주는 명령문

- 쥬피터노트북에서 멈추는 방법 : 위쪽에 있는 Kernel -> Interrupt를 누르면 멈춤 :
                                                                    안되는 경우엔 Restart하기 - 엔진을 껐다키는 것.

                                                                    -> 모든 게 사라지기에 Run All above로 전체 재실행시켜서 돌리기

                                                                     정말 안되면, 껐다켜야함.

idx = 0
while True:
    if idx >= 5:
        break
    else:
        print(idx)
        idx += 1

- idx값이 계속 1씩 증가되는데, idx가 4가 되는 순간에 멈춤

- break : 강제적으로 종료시키는 명령문 <> pass

idx = 0
FLAG = 1

while FLAG:
    if idx >= 5:
        break
    else:
        print(idx)
        idx += 1

- FLAG가 key가 되어서, FLAG가 0이면 출력되지 않고, 그 외의 수이면 출력됨

 

Quiz

# Quiz 4. 점수(0~100)를 입력으로 받아 학점을 돌려주는 함수 grade를 만드세요.

def grade(score):
    if score > 90:
        grade = "A"
    elif score > 80:
        grade = "B"
    elif score > 70:
        grade = "C"
    else:
        grade = "F"
    return grade

grade(87)       -> B 출력
# Quiz 5. 3개의 숫자를 입력으로 받아, 가장 큰 수를 돌려주는 함수 best 를 만드세요. (Hint. 리스트와 sort()를 활용해보세요.)

def best(a, b, c):
    temp = [a, b, c]
    temp.sort(reverse=True)
    
    return temp[0]
    
    best(20, 100, 60)         -> 100 출력
# Quiz 6. 숫자 하나를 입력받아, 홀수면 "odd", 짝수면 "even"을 돌려주는 함수 odd_or_even을 만드세요. (나머지 연산 명령어는?)

def odd_or_even(num) :
    
    if num % 2 == 0 :
        return 'even'
    else :
        return 'odd'
        
odd_or_even(9)            -> odd 출력
# Quiz 7. "20180323sunny" 와 같은 문자열을 입력받아, "Year is 2018, Day is 0323, Weather is sunny" 를 출력하는 함수 weather를 만드세요.

def weather(sentence) :
    
    year = sentence[0:4] 
    date = sentence[4:8]
    climate = sentence[8:]
    
    result = "Year is {}, Day is {}, Weather is {}"
    result = result.format(year, date, climate)
    
    print(result)

weather('20180323still cold')   -> Year is 2018, Day is 0323, Weather is still cold

 

 

Tip

  • 네이밍 패턴
    파이썬에서 잘 쓰는 패턴 : PEP8 (Python Enhancement Proposal, https://peps.python.org/pep-0008/)
         - 철칙은 아니나 , 스타일 가이드를 읽어보는 게 좋음
         - 들여쓰기는 space 4번을 권장함
    다양하게 쓰는 패턴  
         - PascalCase : 앞이랑 중간이랑 대문자 
         - camelCase : 중간에만 대문자
         - snake_case : 언더바로 이어주기   * 파이썬에서는 네이밍 패턴을 위주로 씀
         - kebab-case : dash로 연결

요약정리

  1. 파이썬
    -1. 파이썬을 사용하는 이유
           - 간결하고 쉽다, 수많은 라이브러리가 있다. 확장이 용이하다.
    -2. 파이썬을 공부할 때, 쥬피터 노트북을 사용하는 이유
           -인터랙티브 프로그래밍 환경, 결과 바로 확인가능, 문서화가 용이, 단축키 용이 

  2. 파이썬 기초 함수
    - 1. 기초 데이터 타입
         - type() 으로 타입을 확인할 수 있음
          1) 정수형(int)/실수형(float) : 숫자형, 사칙연산가능
           2) 문자열(str)
           3) 참/거짓(bool)

    - 2. 함수
           - 함수의 기본 형태
              def add_nums(num1, num2): 
                  result = num1+num2
                  return result
           - def( define )  : 정의하다, 함수를 정의해주는 것   
           - ERROR문구 : 에러는 최대한 영어를 읽으면 이해가 할 수 있다.

    - 3. 컨테이너
          1) 리스트 (list) : 가장 일반적으로 사용하는 그룹
                          - x = [1,2,3,4,5,.....] , x = list(~~~)
           2) 딕셔너리 (dict) : 사전 쓰듯이 쓰면 됨
                          - x ={key1:value1, k2:v2, k3:v3, ....}, x= dict(~~~)
           3) 튜플 (tuple) : 수정이 절대 불가능하다, 값과 크기가 바뀌지 않는다.
                          - x = (1,2,3,4,5,...), x= tuple (~~~)
           4) 집합 (set) 자동으로 중복제거 : list의 경우 중복은 전혀 신경쓰지 않음
                          - x = {1,2,3,4,5,...} , x= set (~~~)

    - 4. 조건문과 반복문
          1) if (조건문)     : 주어진 조건이 참(True)일 때 그 아래에 있는 코드를 실행하는 조건문
           2) for (반복문)
                - 문법적인 약속
                          for something in 그룹형_변수:
                               ~~~(something)~~~
                - 특정문을 여러번 출력하고 싶을 때, range함수를 쓰면 됨.
           3) while (if+for) 
                - pass : 반복문이 스무스하게 지나갈 수 있게 해주는 명령문
                - break : 강제적으로 종료시키는 명령문 <> pass


부족한 부분 추가 공부할 부분

함수 관련은 사용을 많이 하여서 괜찮다고 생각이 되나, 컨테이너 부분에 대한 추가적인 이해가 필요한 것 같다.

이해는 되나, 실사용에서 어려움을 느낄 수도 있다고 생각됨.

파이썬 함수에 대해서 조금 더 이론적인 공부가 더 필요하다고 생각됨.

- 실사용보다는 함수에 대한 실질적인 이해