반응형

안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.

코딩유치원에서는 파이썬 기초부터 사무자동화, 웹크롤링, 데이터 분석 등의 다양한 패키지까지 초보자도 알기 쉽도록 내용을 정리해 놓았습니다.

업무는 물론 투자에도 도움이 될만한 전자공시시스템(DART) 텔레그램(Telegram) 관련 패키지도 배울 수 있으니 많은 관심 부탁드립니다.

 

 

제가 지금까지 다루었던 프로젝트들은 리스트만으로 충분했으나, 최근 진행한 프로젝트에서는 리스트들끼리 짝을 맞추어서 저장하고, 꺼내어 사용해야 하는 경우가 생기니깐 어떻게 해야할지 잘 모르겠더라구요.

 

그래서 오늘은 길이가 같은 리스트들의 요소들을 차례대로 조합해서 새로운 리스트, 딕셔너리로 만드는 방법에 대해서 알아보고, 그것을 어떻게 다시 참조할 수 있는지 함께 알아보겠습니다.

 

 

1. 리스트 2개를 요소들끼리 묶어주는 법

 

보통 코드를 짜다보면, 요소들을 받아와서 리스트에 차곡차곡 쌓는 경우가 많습니다.

 

그런데 이 리스트들을 요소들끼리 순서대로 묶어주고 싶을 때가 있습니다.

 

 

[사과, 1000원], [딸기, 2000원], ... 이런 식으로 말이죠.

 

이럴 때는 파이썬 내장 라이브러리에 포함되어 있는 zip 함수를 사용합니다.

 

사용법은 간단합니다. 리스트명을 zip( ) 안에 순서대로 넣어주면 됩니다.

 

여기서 꼭 알아두실 점은 zip( )만 사용하면 그냥 리스트의 내용물이 분배된 상태로 zip object 로 저장된다는 것입니다.

 

product_names = ['사과','딸기','배','포도','키위']
product_prices = ['1000원','2000원','3000원','4000원','5000원']

zip_obj = zip(product_names, product_prices)

 

실제로 zip_obj를 print 함수로 출력해보면 <zip object at 0x0000019014B3A3C0>와 같은 형태로 출력됩니다.

 

우리는 이 zip_obj를 리스트로 만들어 줄 수도 있고, 딕셔너리로도 만들어 줄 수 있습니다.

(리스트로 만들 시, 각 요소들이 튜플로 묶여있음)

 

list(zip_obj)
>>> [('사과', '1000원'), ('딸기', '2000원'), ('배', '3000원'), ('포도', '4000원'), ('키위', '5000원')]

dict(zip_obj)
>>> {'사과': '1000원', '딸기': '2000원', '배': '3000원', '포도': '4000원', '키위': '5000원'}

 

<여기서 잠깐>

 

저도 글을 작성하면서 알게된 점은, zip_obj를 한 번 사용하면 해당 주소에 들어있는 값이 사라진다는 것입니다.

 

그래서 위와 같이 zip_obj로 만들고, list나 dict로 만들어주는 것보다는 아래와 같이 한번에 코딩해주는 것이 좋겠습니다.

 

list_zip = list(zip(product_names, product_prices))

dict_zip = dict(zip(product_names, product_prices))

 

 

2. 리스트 3개 이상을 요소들끼리 묶어주는 법

 

이번엔 리스트 3개 이상을 묶어주는 방법을 알아보겠습니다. 똑같이 적용하면 되지 뭐가 문제냐고 생각하실 수 있는데요.

 

리스트 형태로 만들어주는 것은 전혀 문제가 없지만, 딕셔너리 형태로 만들어 줄 때는 문제가 생깁니다.

 

왜냐하면 딕셔너리는 Key: Value와 같이 단 2개씩만 묶어줄 수 있기 때문입니다.

딕셔너리 기본 형태 = {Key1:Value1, Key2:Value2, ...}

dic = {'name':'손생', 'age':'31'}

 

그러면 어떻게 해줘야할까요?

 

정답은 리스트 하나를 Key로 사용하고, 나머지 리스트들을 묶어서 Value로 사용하는 것입니다.

 

Key는 중복을 허용하지 않으므로, 중복되지 않을만한 제품 링크 주소를 Key로 사용해줍시다.

이런 식으로 묶어주시면 됩니다.

product_links = ['링크1','링크2','링크3','링크4','링크 5']
product_prices = ['1000원','2000원','3000원','4000원','5000원']
product_names = ['사과','딸기','배','포도','키위']

dict_product = dict(zip(product_links, zip(product_prices, product_names)))

 

<dict_product 출력 결과>

{'링크1': ('1000원', '사과'),
 '링크2': ('2000원', '딸기'),
 '링크3': ('3000원', '배'),
 '링크4': ('4000원', '포도'),
 '링크 5': ('5000원', '키위')}

 

 

3. 만들어진 딕셔너리 사용 방법

 

위에서 리스트를 이용해서 딕셔너리를 만드는 방법을 알아보았다면, 이제는 만든 딕셔너리를 사용하는 방법을 배워야겠죠?

 

이 부분은 딕셔너리 기초를 안다면 쉽게 이해할 수 있는 부분이므로 그냥 넘어가겠습니다.

# 제품 링크
key

# 제품 이름
dict_product[key][0]

# 제품 가격
dict_product[key][1]

 

 

4. 딕셔너리 응용 방법

 

아래의 코드는 특정 스마트스토어에서 새로 업로드 되는 제품만 텔레그램으로 전송받고자 했을 때 사용했던 코드입니다.

 

key에 저장된 제품 링크를 비교해서 새제품의 key : value만 필터링하여 저장 및 사용하기 위해서 딕셔너리를 사용하였죠. (글을 작성하면서 굳이 딕셔너리가 아니어도 zip 함수로 리스트를 만들고 인덱싱을 잘해주면 되겠다는걸 깨달았지만 그냥 넘어가도록 하겠습니다ㅎㅎ..)

 

위에서 만들었던 dict_product를 아래와 같이 딕셔너리 컴프리헨션과 결합하여 사용할 수 있답니다. 딕셔너리 컴프리헨션은 리스트 컴프리헨션을 알고계시다면 아주 쉽게 이해하실 수 있습니다.

 

new_products = {key:value for key, value in dict_product.items() if key not in old_products}

 

여기서 new_products에 저장된 값들은 for문을 이용해서 아래와 같이 가져올 수 있습니다.

 

<실제 응용 코드>

    # 새로운 메시지가 있으면 링크 전송
    if new_products:
        for key in new_products:
            bot.sendMessage(chat_id=chat_id,
                            text= new_products[key][0] + 
                            '\n\n' + '가격:' + new_products[key][1] + '원' + 
                            '\n\n' + key)

 


 

 

반응형
반응형

안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.

코딩유치원에서는 파이썬 기초부터 사무자동화, 웹크롤링, 데이터 분석 등의 다양한 패키지까지 초보자도 알기 쉽도록 내용을 정리해 놓았습니다.

업무는 물론 투자에도 도움이 될만한 전자공시시스템(DART) 텔레그램(Telegram) 관련 패키지도 배울 수 있으니 많은 관심 부탁드립니다.

 

 

예전에 파이썬의 장점인 간략한 코딩을 더욱 극대화하는 리스트 컴프리헨션에 대해서 알아보았는데요.

 

2021.11.21 - [파이썬 기초/중급 문법] - [파이썬 중급 문법] 리스트 컴프리헨션 간단 정리

 

오늘은 for 반복문 안에서 리스트 컴프리헨션을 사용할 때 주의할 점에 대해서 말씀드리려 합니다.


 

1. 리스트 컴프리헨션을 사용하는 이유

 

저는 리스트 컴프리헨션 문법을 웹크롤링을 하면서 자주 사용해 왔습니다. 어떤 값을 하나씩 리스트에 추가해줄 때 아주아주 유용하기 때문입니다.

 

<리스트 컴프리헨션을 사용하지 않은 코드>

new_contents=[]

for content in contents:
    if content not in old_contents:
        new_contents.append(content)

 

<리스트 컴프리헨션을 사용한 코드>

new_contents = [content for content in list_contents if content not in old_contents]

 

4줄의 코드가 이렇게 간단해 지니깐 안 쓸 이유가 없겠죠?

 

2. for문 안에서 리스트 컴프리헨션을 사용하지 않은 이유

 

하지만 최근 프로젝트에서 아래와 같이 리스트 컴프리헨션 문법을 사용하지 않았답니다.

 

그 이유는 for문을 돌 때 마다 리스트가 초기화 되어 버리기 때문이었습니다.

 

# 제품명을 담을 빈 리스트 선언
product_name = []

# for문을 이용해서 원하는 페이지에 접근, 정보 추출 후 리스트에 담기
for page_num in range(3):
    url = f'https://smartstore.naver.com/compuzone/category/ALL?st=RECENT&free=false&dt=IMAGE&page={page_num+1}&size=40'
    
    response = requests.get(url)
    soup = bs(response.text , 'html.parser')

    # css selector로 페이지 내의 원하는 정보 가져오기
    html_product = soup.select('strong.QNNliuiAk3')

    # 텍스트만 추출
    for i in html_product:
        product_name.append(i.get_text())

 

무슨 말인지 아직 감이 안오신다면 for문 밖에 product_name 리스트가 밖에서 선언된 것에 주목해보세요.

 

저의 목적은 for문을 돌면서 1, 2, 3페이지에 접속하고, 각 페이지에서 필요한 자료를 리스트에 계속 추가하는 것이었습니다.

 

하지만 아래와 같이 리스트 컴프리헨션 문법을 사용해버리면 product_name이라는 이름의 리스트를 for문 안에서 매번 새로 선언되어서 그 전에 쌓여있던 요소들이 모두 삭제되어 버립니다.

 

# for문을 이용해서 원하는 페이지에 접근, 정보 추출 후 리스트에 담기
for page_num in range(3):
    url = f'https://smartstore.naver.com/compuzone/category/ALL?st=RECENT&free=false&dt=IMAGE&page={page_num+1}&size=40'
    
    response = requests.get(url)
    soup = bs(response.text , 'html.parser')

    # css selector로 페이지 내의 원하는 정보 가져오기
    html_product = soup.select('strong.QNNliuiAk3')
	
    # 리스트 컴프리헨션 사용
    product_name = [i.get_text() for i in html_product]

 


글을 마치며,

 

이번 글은 누군가가에게는 당연한 이야기를 뭐 이렇게 길게 써놨는가 싶을 수 있겠지만, 코딩유치원의 취지에 잘 맞는 글이라고 생각이 듭니다.

 

아직 모르는 것이 많은 초보에게는 작은 돌뿌리도 큰 바위처럼 느껴지기 때문이죠.

 

코딩유치원생 여러분들은 코딩을 하시다가 모르는 부분이 생기시면 주저하지 마시고, 댓글 달아주세요.

 

제가 친절히 도와드릴테니까요~

반응형
반응형

안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.

코딩유치원에서는 파이썬 기초부터 사무자동화, 웹크롤링, 데이터 분석, 머신러닝 등의 다양한 패키지까지 초보자도 알기 쉽도록 내용을 정리해 놓았습니다.

업무는 물론 투자에도 도움이 될만한 전자공시시스템(DART)나 텔레그램(Telegram) 관련 패키지도 배울 수 있으니 많은 관심 부탁드립니다.

 

 

오늘은 제가 번번히 도전하다가 실패했던, 코딩 초보에겐 너무나도 어려운 파이썬 가상환경을 셋팅하는 방법에 대해서 자세히 알아보겠습니다.

 

이 글이 많은 코린이 여러분에게 도움이 되길 바라면서 오늘 포스팅 시작하겠습니다.

 

참고로 제목에서도  보셨 듯이 개발환경은 VScode를 사용한 점 참고 바랍니다.


 

1. 인터프리터 선택의 의미 (Select Interpreter) 

 

우리는 처음에 파이썬을 설치하고 실행을 하면 인터프리터를 설정해줍니다.

 

쉽게 말해서 어떤 경로의 파이썬을 실행시켜줄지 선택하는 것입니다.

 

Anaconda 패키지로 파이썬을 설치하셨다면 아마 ~/opt/anaconda3/bin/python이라는 인터프리터를 기본적으로 사용하실거예요.

 

Anaconda와 순정 python의 environment

 

VScode에서 단축키 'Ctrl(or CMD) + Shift + P'를 입력하거나 좌측 하단의 빨간 상자 부분을 클릭하면 선택할 수 있답니다.

 

이 인터프리터를 선택한다는 것은 pip 혹은 conda 명령어로 설치한 모듈과 라이브러리들(bin과 lib에 위치)을 사용할 수 있다는 것을 의미합니다.

 

예를 들어, 아래에서 배울 가상환경을 새로 만들고 거기에 있는 python 인터프리터를 선택하면 원래 문제없던 import 부분의 코드들에 빨간줄이 쳐지는 것을 보실 수 있을거예요.

 

anaconda3 폴더 안의 폴더들

 

 

2. 가상환경 만들기

 

우리는 간단한 코드 한 줄로 위에서 본 anconda3 폴더 같은 가상환경을 생성해 줄 수 있습니다.

 

참고로, 잘쓰던 기본 개발환경을 놔두고 가상환경을 만드는 이유는 진행하는 프로젝트마다 패키지들의 버전에 따라 발생할 수 있는 호환성 문제를 방지해주기 위함입니다.

 

또한 anaconda 개발 환경과 pyinstaller 궁합이 맞지 않아서 용량이 엄청 커지는 문제를 피하기 위해서도 사용할 수 있답니다.

 

자 그럼 서론은 이쯤하고, 본론으로 들어가볼까요?

 

 

1) VScode로 프로젝트 폴더열기 & 터미널 창 열기

 

가상환경을 만드는 것은 아무 폴더에나 가능하지만 저는 VENV_BASIC이라고 폴더를 하나 만들고 VScode로 폴더를 열었습니다.

 

그리고는 화면 상단의 메뉴에서 터미널 - 새 터미널을 클릭해줍니다.

 

 

2) 터미널 창에 코드 입력

 

# 작업공간에 새로운 가상환경 만듦
python -m venv newvenv

 

터미널 창이 열렸으면 위의 코드를 아래와 같이 터미널 창에 입력해주세요. 참고로 newvenv는 제가 마음대로 지은 이름이므로 여러분들도 마음에 드시는 이름으로 지어주시면 됩니다.

 

 

가상환경을 설치하시면 newvenv라는 폴더가 생기고 하위 폴더로 bin, include, lib/python3.8/site-packages 폴더 3개가 생기는 것을 확인 하실 수 있습니다. (참고로 windows 환경에서는 bin 대신 Scripts로 폴더가 만들어집니다)

 

 

3) 가상환경의 인터프리터 선택

 

만들어진 가상환경을 사용하려면 처음에 설명드렸 듯이 인터프리터를 다시 선택해주어야 합니다.

 

 

새로 만든 가상환경을 선택했음에도 터미널 창을 보면 처음 그대로의 인터프리터를 사용하고 있습니다.

(여기서 pip install로 라이브러리들을 설치해봤자 이미 설치돼 있다는 말만 나옵니다.)

 

 

당황하지 마시고 오른쪽의 + 버튼을 눌러서 새로운 터미널 창을 열어주세요.

 

아래를 보시면 (newvenv)라고 표시되어 정상적으로 가상환경에 접속했음을 알 수 있습니다.

 

 

4) 새로운 가상환경에 라이브러리 설치하기

 

신나게 pip install 명령어를 이용해 필요한 라이브러리를 설치해주었습니다.

 

그런데 뭔가 설치는 됐다고 하는데 노란색 글씨로 경고를 해줍니다. 

 

 

자세히 읽어보면 pip 버전이 최신이 아니라서 업그레이드를 해주라고 합니다. 친절하게 어떻게 업그레이드 하는지도 알려주네요.

 

# pip install --upgrade pip만 입력해도 되는 것으로 확인

python -m pip install --upgrade pip

 

 

성공적으로 업그레이드 되었다고 합니다. 이젠 다른 라이브러리를 설치할 때에 경고를 띄우지 않습니다.

 

 


오늘 준비한 내용은 여기까지입니다.

 

다음 시간에는 예전에 애를 먹었던 pyinstaller 용량줄이기를 가상환경을 통해서 해결하는 것에 대해 다루어 보겠습니다.

 

오늘도 공부하시느라 고생 많으셨습니다!

 

이 글이 도움이 되셨다면, 아래의 광고를 한 번씩만 눌러주시면 너무너무 감사하겠습니다!

반응형
반응형

안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.

코딩유치원에서는 파이썬 기초부터 사무자동화, 웹크롤링, 데이터 분석 등의 다양한 패키지까지 초보자도 알기 쉽도록 내용을 정리해 놓았습니다.

업무는 물론 투자에도 도움이 될만한 전자공시시스템(DART) 텔레그램(Telegram) 관련 패키지도 배울 수 있으니 많은 관심 부탁드립니다.

 

 

오늘은 파이썬의 장점인 간략한 코딩을 더욱 극대화하는 리스트 컴프리헨션에 대해서 공부해보겠습니다.


 

1. 리스트 컴프리헨션이란?

 

먼저 리스트 컴프리헨션(List Comprehension)의 의미를 알아봅시다.

 

리스트 컴프리헨션이란 '리스트 안에 표현식(계산식)과 for문, if문을 한줄에 넣어서 새로운 리스트를 만드는 것'을 말합니다.

 

# 일반적인 리스트 컴프리헨션

표현식(변수명이 포함되어 있음) for 변수명 in 기존 리스트

# if가 추가되어 필터링이 추가된 리스트 컴프리헨션

표현식(변수명이 포함되어 있음) for 변수명 in 기존 리스트 if 조건문

 

여기서 리스트라는 말이 들어가서 리스트만 사용할 수 있을 것 같지만, 앞서 배웠던 리스트(list), 튜플(tuple), 딕셔너리(dictionary), 셋트(set) 등의 컨테이너들도 모두 사용가능하답니다.

 

또한 표현식엔 수식 뿐만 아니라 함수도 사용 가능한 점도 알고 계시면 훨씬 더 간단한 코딩이 가능하답니다.

 

2. 리스트 컴프리헨션 사용법

 

간단한 예시를 통해서 리스트 컴프리헨션과 친해져 봅시다.

 

아래와 같은 리스트가 있습니다.

my_list = [0, 1, 2, 3]

 

이렇게 선언한 리스트 혹은 웹 크롤링을 통해서 받은 요소가 엄청 많은 리스트에 하나하나 어떤 처리를 하고 싶을 땐, 보통 이렇게 코딩을 하곤합니다.

 

# step1.처리(계산) 결과를 담을 새로운 리스트 선언
new_list = []

# step2.for문을 이용해서 계산을 수행하고, append()함수로 결과값을 새로운 리스트에 붙여넣기
for i in my_list:
    
    new_list.append(10*i)

 

결과를 확인해보면 아래와 같죠.

print(new_list)

>>> [0, 10, 20, 30]

 

리스트 컴프리헨션을 적용하면 단 한줄로 같은 결과를 낼 수 있답니다.

 

기존 코드와 비교하시면서 어떻게 3줄의 코드가 1줄의 코드로 바뀌었는지 꼭 이해하고 넘어가주세요.

 

new_list = [10*i for i in my_list]

 

 

3. 리스트 컴프리헨션(필터링) 사용법

 

 

앞서 언급하였 듯이 리스트 컴프리헨션에는 if문도 적용 가능합니다.

 

if문은 물론 if-else문도 사용 가능하답니다.

 

여기서 주의하실 점은 if문은 for문의 오른쪽, if-else문은 for문의 왼쪽에 사용한다는 점입니다.

 

<if문 사용 리스트 컴프리헨션 예시>

a = [1,2,3,4,5,6,7,8,9,10]

b = [i for i in a if i%2==0]

# if 조건을 and/or로 두 개 이상 쓸 수 있음
c = [i for i in a if i%2==0 and i%3==0]


print(b)
>>> [2, 4, 6, 8, 10]

print(c)
>>> [6]

 

<if-else문 사용 리스트 컴프리헨션 예시>

a = [1,2,3,4,5,6,7,8,9,10]

b = [i if i%2==0 else '홀수' for i in a ]

print(b)
>>> ['홀수', 2, '홀수', 4, '홀수', 6, '홀수', 8, '홀수', 10]

 

<if-else문 응용_ elif문 구현>

 

이해를 돕기 위한 if, elif, else 구문

if 짝수면 숫자를 출력

elif 짝수 아닌 것들 중, i가 10 이상이면 "홀수 중, 10 이상"이라는 문자열을 출력 (10은 10 이상이지만 짝수이므로 적용 안됨 --> elif)

else 그 외엔 모두 '홀수' 출력
 
a=[1,2,3,4,5,6,7,8,9,10,11]

b = [i if i%2==0 else '홀수' if i<10 else '홀수 중에 10 이상' for i in a ]

print(b)
>>> ['홀수', 2, '홀수', 4, '홀수', 6, '홀수', 8, '홀수', 10, '홀수 중에 10 이상']

 

오늘 준비한 내용은 여기까지입니다.

 

오늘도 공부하시느라 고생 많으셨습니다.


이 글이 도움이 되셨다면, 아래의 광고를 한 번씩만 눌러주시면 너무너무 감사하겠습니다!

반응형
반응형

안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.

코딩유치원에서는 파이썬 기초부터 사무자동화, 웹크롤링, 데이터 분석 등의 다양한 패키지까지 초보자도 알기 쉽도록 내용을 정리해 놓았습니다.

업무는 물론 투자에도 도움이 될만한 전자공시시스템(DART) 텔레그램(Telegram) 관련 패키지도 배울 수 있으니 많은 관심 부탁드립니다.

 

 


오늘은 프로그램을 처음 깔았을 때, 자주 접하게 되는 '환경변수'의 개념과 하위 개념들인 사용자 변수 시스템 변수에 대해서 간단히 알아보겠습니다.

 

혹시 cmd창에서 'conda'나 'pip' 명령어를 실행하셨는데 오류가 뜨신분 계신다면 이것과 관련된 문제니깐 이 글 보시고 잘 해결하시길 응원하겠습니다.

 

1. 환경변수

 

환경변수.. 참 생소한 용어고 어렵게 설명하면 영원히 외계어로 취급될 수도 있는 용어입니다.

 

네이버에서 검색해본 환경변수의 의미입니다. 뭔소린지 잘 모르겠습니다.

 

 

하지만 괜찮습니다. 우리는 이게 무엇을 위해서 사용하는 것인지만 알고, 사용방법만 알면 되니까요!

 

결론부터 말씀드리면, 우리는 환경변수의 Path 설정만 알고 있으면 됩니다.

 

여기서 Path(경로)를 설정하는 일 '어떤 경로에서든 뭔가 실행했을 때, 묻지도 따지지도 않고 이 경로(Path)를 참조하겠다'입니다. 참조라는 말은 해당 경로, 즉 폴더를 슥 둘러보고 요청받은 파일이 있는지 둘러본다는 말이죠. 

 

조금 더 자세히 설명드리자면,

 

예를 들어 컴퓨터에 '나를찾아봐.txt'라는 파일을 열어달라고 cmd 창에서 명령을 내릴 때는 해당 파일이 있는 경로를 정확히 알려주어야 합니다. (참고로, 우리가 GUI 기반으로 폴더를 타고타고 들어가서 파일을 더블클릭 하는 것도 경로를 컴퓨터에게 알려주는 것입니다!)

 

우리가 코딩을 할 때나 cmd 창에서 명령을 내릴 때, 경로를 설정안해주면 일단 환경변수의 Path에 입력해둔 경로들에 접근해서 명령에 필요한 파일을 찾는데, 여기도 없으면 '못찾겠다 임마'라고 에러를 출력해줍니다.

 

PS C:\coding> 나를찾아봐.txt
나를찾아봐.txt : '나를찾아봐.txt' 용어가 cmdlet, 함수, 스크립트 파일 또는 실행할 수 있는 프로그램 이름으로 인식되지 않습니다. 이름이 정확한지 확인하고 경로가 포함된 경우 경로가 올바른지
 검증한 다음 다시 시도하십시오.
위치 줄:1 문자:1
+ 나를찾아봐.txt
+ ~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (나를찾아봐.txt:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException

 

 

<여기서 잠깐>
Anaconda 설치 시, 아래의 옵션을 클릭하지 않으셨던 것이 오류의 원인일 수 있습니다.

Not recommended(비추천)로 되어있고, 기본적으로 설치 시 체크 해제되어 있어서, 아마 대부분이 이 옵션을 선택하지 않고 설치하셨을 거예요. 이 옵션을 선택하면 아나콘다를 설치할 때 알아서 환경변수를 추가해줍니다.

 

근데 아나콘다는 왜 비추천 했을까요? 그건 바로 이미 파이썬 인터프리터가 설치되어있는 경우, 환경변수끼리 충돌을 할 수도 있기 때문입니다. 겪어보지는 못했지만 그럴 수 있나봅니다.

 

아나콘다만 사용하시는 분은 그냥 체크하셔도 된답니다. 이 글을 보시는 분들은 아마 아나콘다를 설치하셨을 수도 있지만, 만약 다른 컴퓨터에 새로 설치할 일이 생기신다면 다음에는 체크하고 설치하시는 걸 추천드립니다.

 

2. 환경변수 설정방법

 

자 이제 환경변수를 왜 설정하는지 이해가 가셨다면 환경변수를 설정해보겠습니다.

 

1) 바탕화면에서 좌측 하단Windows10 기준)에 보시면 검색창이 있습니다. 여기에 '환경'이라고 입력하면 '시스템 환경 변수 편집'이 나오는데 이걸 클릭해주세요.

 

2) 환경변수를 클릭해줍니다.

 

3) Path를 찾아야 하는데, 사용자 변수와 시스템 변수 두 군데에 있습니다. 우리는 시스템 변수의 'Path'를 더블클릭 해줍시다. 참고로 사용자 변수는 현재 윈도우에 접속한 계정에만 적용되고, 시스템 변수는 어느 계정이든 모두 적용되는 차이가 있답니다.

 

4) 새로 만들기를 클릭하시면 아래의 경로들 가장 아래에 새로 입력할 수 있게 커서가 나올텐데요. 어떤 경로를 추가해야하는지 아래에서 설명드리겠습니다.

 

5) 우리는 총 3가지 경로를 추가해야합니다. 아래의 경로를 일단 찾으셔야 하는데요. 잘 못찾으시겠다면 아까 환경 변수를 찾으셨던 것 처럼 좌측 하단의 검색창에서 'anaconda3'를 검색하셔서 나오는 폴더를 클릭하시면 된답니다.

 

우리가 추가할 경로는 anaconda3, 그리고 하위 경로인 Library와 Scripts입니다.

 

경로를 가져오는 방법은 다음과 같습니다.

 

- 해당 디렉토리(폴더)에 클릭해서 들어감

- 아래의 사진 가장 상단의 붉은 사각형 부분을 클릭한 후, 경로를 복사 (Ctrl + C)

 

 

6) 복사한 경로를 새로 만들기를 클릭한 후, 붙여넣기 (Ctrl+V) 해줍니다.

 

7) 확인을 누른 후, 꼭 컴퓨터를 재부팅 해줍니다.

 

 

여기까지 완료하셨으면 아마 여러분들을 괴롭히던 오류는 없어지셨을 거예요.

 

혹시 그래도 문제가 해결 되지 않으셨다면 댓글 달아주세요!

 


이 글이 도움이 되셨다면, 아래의 광고를 한 번씩만 눌러주시면 너무너무 감사하겠습니다!

반응형
반응형

안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.

코딩유치원에서는 파이썬 기초부터 사무자동화, 웹크롤링, 데이터 분석 등의 다양한 패키지까지 초보자도 알기 쉽도록 내용을 정리해 놓았습니다.

업무는 물론 투자에도 도움이 될만한 전자공시시스템(DART) 텔레그램(Telegram) 관련 패키지도 배울 수 있으니 많은 관심 부탁드립니다.

 

 


 

<Colab 관련 지난 글>

 

2021.10.16 - [파이썬 기초/개발환경 구축] - [Colab] 파이썬 데이터분석을 위한 개발환경 구축_1편.Colab 시작하기 (ft. 단축키 설정 방법)

 

오늘은 지난 시간에 이어서, 코드 셀과 텍스트 셀의 차이와 텍스트 셀 사용법에 대해 자세히 알아보겠습니다.

 

1. 코드 셀 (Code Cell)

 

셀(cell)은 코랩 노트에 코드 혹은 텍스트를 입력할 수 있는 일종의 '칸'을 말하며, 한 셀씩 실행할 수 있다는 것이 특징입니다.

 

코드 셀은 옅은 회색으로 표시된 '코드 영역'과 그 아래의 흰색칸인 '출력 영역'으로 구분됩니다.

출력 영역에는 코드를 실행한 결과가 표시됩니다.

코드 셀은 특별히 설명할 것이 없으므로, 텍스트 셀이 대해서 설명드려 보겠습니다.

 

2. 텍스트 셀 (Text Cell)

 

좌측에 HTML이나 마크다운(Markdown) 형식을 혼용하여 텍스트를 입력하면, 우측에 그 결과가 미리보기 되어 출력됩니다.

참고로 여러분이 보고 계시는 티스토리 블로그도 마크다운 문법을 기본으로 사용한답니다.

 

텍스트 셀은 코드를 실행하는 것이 아니라, 원하는 텍스트를 입력하고 싶을 때 사용합니다.

 

새로운 텍스트 셀을 추가하시고 싶다면 '+텍스트'를 누르고, 이미 만들어진 텍스트 셀을 수정하려면 '더블클릭 또는 Enter'를 해주시면 됩니다.

 

텍스트 셀 버튼 설명

 

텍스트 셀을 들어가면 아래 그림처럼 상단에 여러 버튼들이 있으며, 기능은 아래에서 자세히 설명드리겠습니다.

 

1번: 입력한 텍스트를 제목으로 바꾸어줍니다. (텍스트 앞에 #을 붙여주어도 같은 효과)

제목으로 바꾼 텍스트 셀은 노트 좌측의 목차의 '섹션'으로 자동 추가되며 섹션을 클릭하면 자동으로 해당 위치로 이동합니다.

텍스트를 제목으로 했을 때, 목차에 섹션으로 추가됨

참고로 텍스트 앞에 #을 1개부터 5개(#####)까지 붙여보면 텍스트 사이즈가 달라지며, #의 갯수에 따라서 목차에 작은 섹션으로 표시됩니다.

 

2번: 글자를 굵은 글자로 바꾸어 줍니다.

3번: 글자를 이탤릭체로 바꾸어 줍니다.

4번: 텍스트를 코드 형식으로 바꾸어 줍니다.

코드 버튼 클릭 후, 안에 입력했을 때 이미지

 

5번: 선택한 글자를 링크로 변환해 줍니다. 아래의 그림에서 [ ] 안의 링크 텍스트를 네이버로 바꾸어주고 ( ) 안에 네이버 주소를 입력하면 텍스트 셀을 완성한 후에, 해당 링크로 이동하는 글자가 표현됩니다.

 

6번: 커서의 위치에 이미지를 추가합니다. 현재 컴퓨터에 보유하고 있는 이미지 파일을 업로드 하는 방식입니다.

7번: 커서의 위치에 들여 쓴 블록을 추가합니다.

 

8, 9, 10번: 커서의 위치에 차례대로 '번호 목록', '기호 목록', '가로줄'을 추가합니다.

11번: 텍스트 미리보기를 오른쪽과 아래쪽으로 변환시킵니다.

방금 전까지의 예제 그림은 오른쪽, 아래의 그림은 아래쪽에 텍스트 미리보기가 위치합니다.

 

 

다른 내용을 추가하기엔 애매하여 오늘은 여기서 마무리하도록 하겠습니다.

 

다음 시간에는 Colab의 옵션 설정방법과 기존의 노트를 불러오는 여러가지 방법들에 대하여 알아보겠습니다.

 

혹시 마크다운 문법이 자세히 알고싶으시다면 아래의 블로그 포스팅을를 참고해주세요.

https://heropy.blog/2017/09/30/markdown/


이 글이 도움이 되셨다면, 아래의 광고를 한 번씩만 눌러주시면 너무너무 감사하겠습니다!

반응형
반응형

안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.

코딩유치원에서는 파이썬 기초부터 사무자동화, 웹크롤링, 데이터 분석 등의 다양한 패키지까지 초보자도 알기 쉽도록 내용을 정리해 놓았습니다.

업무는 물론 투자에도 도움이 될만한 전자공시시스템(DART) 텔레그램(Telegram) 관련 패키지도 배울 수 있으니 많은 관심 부탁드립니다.

 

 


 

오늘은 데이터분석을 공부하실 때, 쥬피터 노트북만큼 많이 사용되는 colab에 대해서 알아보고 사용하는 방법에 대해 알아보겠습니다.

 

 

1. Colab이란?

 

Colab은 여러분들이 잘 아시는 구글에서 서비스 중인 Colaboratory의 줄임말로, 웹 브라우저에서 무료로 파이썬 코딩을 할 수 있는 서비스 입니다.

 

쥬피터 노트북과 같이 클라우드 기반의 개발환경으로, 구글에서 제공하는 가상 서버(Virtual Machine)를 사용하기 때문에 컴퓨터의 사양에 관계없이 코딩이 가능할 뿐만 아니라, 구글 로그인만 하면 어디서든 자신이 하던 코딩을 이어서 할 수 있습니다.

 

Colab의 특별한 장점은 다음과 같습니다.

 

Colab의 장점

1) 구글 아이디만 있으면 설치없이 파이썬 코딩이 가능(Jupyter 오픈소스 기반으로 쉽게 말해 Jupyter Notebook과 거의 동일함)

2) 데이터 분석(numpy, pandas) / 데이터 시각화(matplotlib) / 머신러닝(scikit-learn) / 딥러닝(TensorFlow, Keras) 등의 패키지 기본 설치

3) GPU, TPU 무료 사용 가능

4) 깃과 연동되어 협업하여 코딩 가능

 

2. Colab 시작하기

 

Colab을 사용하시려면 우선 구글 아이디 로그인이 필요합니다. 아마 대부분 구글 아이디 하나 정도는 있으실테니 살포시 로그인 해주신 후, 검색창에 colab을 검색하신 후 처음 뜨는 검색결과를 클릭해주세요.

 

 

1) 새 노트 만들기

 

아마 클릭하셨으면 아래와 같은 화면이 나올거예요.

 

여기서 바로 팝업창의 '새 노트'를 클릭하셔도 되고, 팝업창을 취소한 뒤, 파일 탭의 새 노트를 클릭하셔도 됩니다.

 

새 노트를 실행하시면, 웹 브라우저에 탭이 하나 생기고, 아래와 같이 ipynb 파일이 새로 생깁니다.

새 노트

 

2) 가상 서버(VM) 할당 받기

 

아주 간단한 코드를 하나 실행해 보겠습니다. 코드 실행 방법은 코드 셀(네모 한칸) 왼쪽의 실행 버튼을  클릭하거나 단축키 Shift + Enter를 입력해주시면 됩니다. 상단의 '연결' 상태가 어떻게 변하는지 잘 보세요.

 

코랩 노트를 새로 만들거나 불러왔을 때는 구글의 서버 자원을 할당받지 않은 상태입니다.

 

그래서 처음 코드를 실행하면 RAM과 CPU (필요시 GPU 혹은 TPU까지 가능)을 부여받게 됩니다.

 

단, 노트가 가상서버(VM)를 한 번에 최대로 사용할 수 있는 시간12시간인 점 알아두시면 좋을 것 같습니다.

 

 

3. 셀 추가 & 코드 실행

 

이번시간에는 Colab을 사용하시면서 가장 기본적으로 사용하게 될 기능 두 가지만 설명드리겠습니다.

 

아무래도 가장 많이 사용하실 기능은 셀 추가실행일 것입니다.

 

셀은 위에서 보셨 듯이 코드 혹은 텍스트를 입력할 수 있는 하나의 단위입니다.

 

 

추가하는 방법은 세 가지입니다. 그리고 저는 세 번째 방법을 추천드립니다.

 

1) 추가하고 싶은 위치의 윗 셀을 클릭한 후, 좌측 상단의 '+코드' 혹은 '+텍스트' 버튼을 클릭

2) 추가하고 싶은 위치(셀과 셀 사이 혹은 셀 마지막)에 마우스 커서를 올리면 나타나는 '+코드' 혹은 '+텍스트' 버튼을 클릭

3) 단축키 이용 (단축키 설정 방법은 아래에서 설명)

 

코드 실행 방법은 한줄로 설명 가능합니다. 그냥 실행 단축키인 Shift + Enter를 사용하세요.

 

 

4. 단축키 설정 방법

 

코딩할 때는 마우스 보다는 키보드에서 손이 떠나지 않게 해야지 효율이 상승합니다.

 

다만, Colab의 기본적인 단축키는 알 수 없는 이유로 'Ctrl + M'이 포함된 총 3개의 키를 눌러야 하는 경우가 많아서 재설정 해주는 것이 편합니다.

 

아래의 설명을 보시고 자주 사용할만한 기능만 단축키 재설정해주세요.

 

단축키 설정을 하시려면 아래의 그림과 같이 '도구 - 단축키' 버튼을 클릭해주세요.

도구 - 단축키 클릭

 

클릭하시면 아래와 같은 창이 나올텐데요.

원하시는 기능을 잘 살펴보시고 '단축키 설정' 칸을 클릭하신 후, 단축키를 한꺼번에 입력해주시면 됩니다.

 

저의 경우엔 주로 'Ctrl + 알파벳'으로 설정했답니다. 이건 개인이 가장 편한대로 설정해주시면 됩니다.

 

 

 

오늘 준비한 내용은 여기까지입니다.

 

다음 시간에는 Jupyter Notebook 파일(.ipynb)를 불러오는 여러가지 방법들과 텍스트 입력 방법에 대해서 알아보겠습니다.

 


이 글이 도움이 되셨다면, 아래의 광고를 한 번씩만 눌러주시면 너무너무 감사하겠습니다!

반응형
반응형

안녕하세요, 코린이를 위한 코딩 유치원에 오신 것을 환영합니다.

 

 

<참고하면 좋은 글>

 

2021.03.05 - [파이썬 기초/개발환경 구축] - 파이썬 개발환경 구축 3편 (VS code 설치 및 초기설정, 한글패치)

 


 

오늘은 VScode의 수 많은 익스텐션 중에서 특히 코드를 예쁘고 가독성 좋게 만들어주는 비쥬얼 관련 익스텐션을 4가지 소개드리겠습니다.

 

 

<요약>

 

1. Material Theme : 여러가지 테마 설정 가능

2. Marterial Icon Theme : 탐색기에 표현되는 파일의 아이콘 예쁘게 변경됨

3. Bracket Pari Colorizer - 괄호마다 코드에 색깔을 다르게 줌 (대괄호, 중괄호 소괄호 모두 3가지 컬러 반복)

4. indent-rainbow - 들여쓰기 된 부분을 4가지 컬러(반복)로 하이라이트 표시

 

 

1. Material Theme

 

가장 먼저 소개드릴 Extension은 Material Theme입니다. VScode 좌측의 Extensions 탭을 클릭하신 후, 검색창에 아래와 같이 material theme이라고 검색해줍니다.

 

그러면 아래와 같이 두 가지 Extension이 나타날텐데 그냥 둘 다 Install 해주세요. 어차피 이어서 설치할테니까요!

 

 

설치가 완료되었다면 사용방법은 간단합니다.

 

1) 좌측하단의 설정 아이콘을 클릭 후, Color Theme을 선택

2) 상단에 출력되는 여러 테마들을 클릭해보면서 마음에 드는 테마를 선택해주면 끝!

 

참 쉽죠?

 

 

 

2. Material Icon Theme

 

두번째로 소개드릴 Extension은 Material Icon Theme입니다. 이 Extension은 코딩에 실질적으로 도움이 되지는 않지만 그냥 탐색기에 보이는 폴더와 파일이 예뻐보여서 사용합니다.

 

다양한 Icon Theme

 

 

설치 전과 후의 비교 사진입니다. 보면 아시겠지만 적용 전에도 아이콘이 없는 것은 아니랍니다.

 

적용 전

 

적용 후

 

 

3. Bracket Pair Colorizer 2

 

다음으로 알려드릴 Extension은 Bracket Pari Colorizer입니다. 이 Extension은 코딩을 하면은 무조건 사용하게 되는 대괄호[ ], 중괄호{ }, 소괄호( )에 색깔을 입혀주는 역할을 합니다.

 

괄호가 많아지게 되면 같은 괄호끼리는 어디가 열렀고 닫혔는지 헷갈릴 수 있는데, 그럴 때 도움이 될 것 같네요.

 

설치 시 바로 적용됨

 

마찬가지로 설치방법은 colorizer를 검색한 후, Install을 눌러주시면 됩니다. 여기서 주의하셔야 될 점은 버전 1과 버전 2가 공존하는데, 버전 2를 설치해주시는 걸 추천드립니다. 이유는 아래에 설명해두었습니다.

 

 

<Bracket Pair Colorizer 2를 설치하는 이유>

 

버전 2의 F.A.Q를 확인해보니 아래와 같이 설명해 놓았습니다.

 

 

요약하자면,

 

1) 속도와 정확도를 크게 높임

2) 하위 호환성이 손상되어 새 버전이 출시하게 됨

 

 

 

4. indent-rainbow

 

오늘 마지막으로 소개드릴 Extension은 indent-rainbow 입니다. 이름에서 딱 느낌이 오시겠지만 indent(들여쓰기)를 할 때, 무지개 색으로 구분을 해주는 Extension입니다.

 

indent-rainbow 설치

 

설치 전과 후의 이미지는 아래와 같습니다. indent 마다 노란색, 초록색, 빨간색, 파란색이 반복된답니다.

 

설치 전
설치 후

 

오늘 준비한 내용은 여기까지입니다.

 

여러분들의 코딩에 많은 도움이 되었길 바래봅니다.

 

감사합니다.


<참고 자료>

 

유튜브 - 드림코딩 by 엘리

https://www.youtube.com/watch?v=bS9yTI2fC0w 

반응형
반응형

안녕하세요, 코린이를 위한 코딩 유치원에 오신 것을 환영합니다.

 

 

이번 시간에는 제목처럼 VSCode에서 Jupyter Notebook 사용하는 법에 대해 알아보겠습니다.

 

[코딩유치원 파이썬 개발환경 구축 강의]

 

2021.03.02 - [파이썬 기초/개발환경 구축] - [코딩유치원] 파이썬 개발환경 구축 1편 (파이썬 VS 아나콘다)

2021.03.04 - [파이썬 기초/개발환경 구축] - [코딩유치원] 파이썬 개발환경 구축 2편 (어떤 IDE를 사용할까?)

2021.03.05 - [파이썬 기초/개발환경 구축] - [코딩유치원] 파이썬 개발환경 구축 3편 (VS code 설치 및 초기설정)

2021.03.08 - [파이썬 기초/개발환경 구축] - [코딩유치원] 파이썬 개발환경 구축 4편 (VS Code와 친해지기)

2021.06.26 - [파이썬 기초/개발환경 구축] - [Python/VSCode] 파이썬 개발환경 구축 5편_VSCode에서 Jupyter notebook 사용하는 법

2021.07.14 - [파이썬 기초/개발환경 구축] - [Python/VSCode] 파이썬 개발환경 구축 6편_코드를 예쁘게 만들어주는 강추 Extension 4가지


 

저희 코딩유치원에서 주로 사용하는 IDE는 VSCode입니다. 아래와 같은 장점 때문이죠.

 

VSCode 장점

1. 완전 무료

2. 가볍고 시작 속도가 빠름

3. 확장 프로그램 설치를 통해 다양한 언어 코딩 가능 (그 중 하나가 파이썬)

4. 한국어 패치 가능

5. 코드 편집 UI가 심플하고 알아보기 쉬움

 

이런 장점 덕분에 VSCode는 한 설문 조사에서 '2020년 가장 인기있는 파이썬 IDE의 인기순위'에서 2위를 차지했습니다.

 

출처. zephyrnet.com/ko/here-are-the-most-popular-python-ides-editors

 

다만 제가 지금까지 사용해보니 아주 강력한 도구인 것은 의심의 여지가 없으나, 확실히 데이터 분석을 할 때에는 확실히 Jupyter notebook이 편하더군요. 블록 단위로 코드를 쪼개어서 바로바로 실행 결과를 확인하고, 그 값이 계속 저장되어 있다는 주피터 노트북의 장점은 대체 불가라고 할까요.

 

그래서 보통의 코딩은 VSCode에서 데이터 분석은 Anconda Navigator를 켜서 Jupyter notebook을 번갈아 사용하던 중,

VSCode에서 Jupyter notebook을 사용하는 법을 배우게 되어 그 내용을 공유해보려 합니다.

 

 

파이썬 익스텐션 설치

 

아마 이 글을 읽고 계신다면 VSCode로 파이썬 익스텐션을 사용하시고 계신분들이 대부분이겠지만 혹시나 하는 마음에 지난 글의 링크를 공유드립니다. 설치가 되어 있으시면 바로 다음 단계로 넘어가 주세요.

 

2021.03.05 - [파이썬 기초/개발환경 구축] - 파이썬 개발환경 구축 3편 (VS code 설치 및 초기설정, 한글패치)

 

VSCODE EXTENSION의 설명에 Jupyter notebook이 지원된다는 내용

 

 

주피터 노트북 파일 생성(.IPYNB)

 

구글에 VSCode에서 Jupyter notebook 사용법을 검색해보면 아래와 같은 방법이 나오지만 왠지 복잡하다는 느낌이듭니다.

 

1단계. 커맨드 팔레트(Ctrl+Shift+P) 켜기

2단계. 검색창에 create 입력

3단계. Jupyter:Create New Blank Notebook 선택

 

위의 방법을 사용하셔도 되지만 저는 아래의 방법을 더 추천드립니다. 정말 간단하거든요.

 

새로운 파이썬 파일을 만들 때 '파일명.py' 대신에 '파일명.ipynb'를 입력해주시기만 하면 끝! 정말 쉽죠?

 

한 번 사용해 볼까요?

 

간단히 리스트를 만들어서 출력해봅시다. 아래의 그림을 보면 a = [1, 2, 3] 이라는 리스트를 만들고, 변수 a를 확인해보면 [1, 2, 3]이 출력되는 것을 확인 하실 수 있을거예요.

 

참고로, 아래의 빨간색 사각형으로 표시한 아이콘을 클릭하면 현재 사용하고 있는 변수들을 모두 볼 수 있답니다. 정말 좋지 않나요?!

 

 

 

자주 사용하는 주피터 노트북 단축키

 

주피터 노트북의 단축키를 그대로 사용할 수 있으니 아래의 단축키 리스트를 알아두시면 유용하실거예요.

 

단축키 기능
Shift+Enter 선택한 셀 실행 후, 다음 셀 선택 (셀이 없으면 생성)
Ctrl+Enter 선택한 셀 모두 실행 (맥북은 Command + Enter도 됨)
A 위에 셀 추가
B 아래에 셀 추가
X 잘라내기
C 복사하기
V 붙여넣기
Z 지운 셀 되돌리기
DD 선택한 셀 삭제
H 단축키 설명창 열기

 

 

<참고> Kernel died with exit code 1 에러 해결 방법

 

저는 한 번에 위의 과정에서 막힘이 없었지만 저의 회사 동료는 아래와 같은 에러가 출력되어 해결하는데에 애를 먹었습니다.

 


정확한 원인은 모르겠지만 아래의 코드로 해결했답니다.

 

터미널 창에 해당 코드를 입력

conda install ipykernel --update-deps --force-reinstall

 

오늘 준비한 내용은 여기까지입니다.

 

여러분들의 파이썬 공부에 많은 도움이 되었길 바래봅니다.


<참고 자료>

 

Kernel died with exit code 1 에러 해결 참고 글

https://github.com/microsoft/vscode-jupyter/issues/5689

 

"Kernel died with exit code 1" when trying to run code on interactive window · Issue #5689 · microsoft/vscode-jupyter

Hi, I used to be able to run my python file using the interactive window. However, all of a sudden, I keep getting the following error "Kernel died with exit code 1" when I try to run my ...

github.com

 

VScode에서 Jupyter notebook 사용하는 방법 참고 글

https://junglow9.tistory.com/10

 

Visual Studio Code(vscode)에서 jupyter notebook 사용하기.

PANDAS로 데이터 분석 공부하려고, 컴퓨터 켤 때마다, jupyter 서버를 실행하고, 웹 브라우저에서 노트북을 클릭하는게 매우 불편했습니다. 그래서, 자주 사용하는 Visual Studio Code에서 jupyter notebook을

junglow9.tistory.com

 

반응형
반응형

안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.

 

 

 

오늘 배울 내용은 바로 경로(path)와 디렉토리(directory)입니다!

 

자세한 내용으로 들어가기 전에 경로와 디렉토리가 각각 무엇이고, 왜 배워야하는지에 대해 간단히 설명드려보겠습니다.

 

경로와 디렉토리의 개념

출처.직접 제작

일상 생활에서 경로란 어떤 목적지로 향하는 길이라는 의미로 쓰입니다.

 

컴퓨터에서 목적지란 디렉토리이며, 찾아가는 길을 경로라고 부릅니다. 우리에게 아주 익숙한 폴더라는 것이 디렉토리라 불리는 것입니다.

 

참고로 경로는 폴더 뿐만 아니라 파일로 향하는 길을 이르기도 합니다.

이때의 경로는 디렉토리 안의 디렉토리 안의 디렉토리 안의 파일 정도가 되겠죠?

 

실제 모습은 흔히 보셨겠지만 C:\Users\username\Desktop\filename.txt 이런 식입니다.

참고로, Windows os는 디렉토리를 역슬레쉬( \ )로 나타내고, Mac os에서는 슬레쉬( / )로 나타냅니다.

 

 

프로그래밍 공부를 하다보면, 한번쯤 겪게 되는 경로 설정의 오류는 '경로가 없거나 경로가 올바르지 않게 입력되었을 때' 생깁니다.

즉, 여기 어떤 파일이 있다고 코드에 잘 적어놓지 않았거나, 그 경로를 따라 갔더니 찾는 파일이 존재하지 않거나 하는 경우입니다.

 

추후에 프로그램을 자신의 컴퓨터에서 만들어서, 다른 사람에게 배포할 때에도 경로에 대한 고려가 꼭 필요하답니다.

내 컴퓨터에서 실컷 잘돌아가다가도 경로 설정을 신경쓰지 못 하면 다른 컴퓨터에서는 쓸모가 없어지니까요!

 

 

절대 경로와 상대 경로

 

 

좌표계에도 절대 좌표와 상대 좌표가 있듯이 경로에도 절대 경로와 상대 경로가 있습니다.

 

절대 경로

 

절대적인 기준(최초 디렉토리)를 기준으로 경유한 경로를 모두 기입하는 방식입니다.

아까 전 예로 들었던 C:\Users\username\Desktop\filename.txt 가 절대 경로입니다.

 

상대 경로

상대 경로는 최초 디렉토리가 아닌 특정 경로를 기준으로 다른 경로를 표시하는 방식입니다.

주로 현재 작업하고 있는 폴더를 기준으로 합니다.

 

 

상대 경로 사용법

 

예를 들어 현재 디렉토리에서 제가 example.py라는 파이썬 파일에 코드를 짜고 있다고 생각해봅시다.코드를 짜다보니 하위 디렉토리에 위치하는 sample.xlsx를 참조해야하는 상황이 발생했습니다.

 

이때 상대 경로의 개념을 이용하면 ./하위 디렉토리/sample.xlsx 라고 써주면 됩니다. 즉, 여기서 사용된 dot(.)은 현재 디렉토리가 어디에 위치하던 현재 파이썬 파일이 위치한 디렉토리의 경로를 뜻합니다. 여기서는 dot(.)의 의미는 '최초 디렉토리/상위 디렉토리/현재 디렉토리'가 되겠죠!

 

추가적으로 설명드리면, dot 두 개(..)현재 디렉토리의 상위 디렉토리를 뜻합니다.

만약 example.py에서 sample2.xlsx를 상대 경로를 이용해서 참조하고 싶다면 이렇게 하시면 됩니다.

 

'./../현재 디렉토리와 같은 디렉토리에 존재/sample2.xlsx'

 

그러니깐, 현재 경로(.)를 기준으로 상위 디렉토리(/..)로 올라간 후, '현재 디렉토리와 같은 디렉토리에 존재'라 이름 붙인 디렉토리로 내려가서 sample2.xlsx를 참조하는 것입니다.

 

 

상대 경로 사용하는 이유

 

그렇다면 절대 경로도 있는데 왜 굳이 상대 경로는 왜 사용하는걸까요?

 

예를들어 filename.txt의 경로가 자주 바뀌거나 최초 디렉토리가 서로 다른 Windows와 Mac OS 모두에서 작동해야 하는 프로그램을 만드는 경우엔 그때 그때 경로를 다시 작성하거나 OS 별로 따로 관리해야 하는 것은 너무 비효율적인 일입니다.

 

그래서 이럴 때는 절대 경로가 아닌 상대 경로를 이용해 주어야 합니다.

 

 

절대 경로 가져오는 꿀팁

 

window는 cmd, mac은 terminal에 경로가 필요한 파일이나 폴더를 드래그해서 가져다 놓으시면 됩니다.

만약 vscode와 같은 ide를 사용하시면 그 곳의 터미널 창에다가 끌어다 놓으셔도 되니깐 유용하게 사용하시면 좋겠습니다.

 

 


조만간 파이썬에서 경로와 디렉토리를 다루는 os 모듈에 대해서도 포스팅 하도록 하겠습니다.

 

오늘도 코딩유치원을 찾아와 주셔서 감사합니다.

반응형
반응형

안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.

코딩유치원에서는 파이썬 기초부터 사무자동화, 웹크롤링, 데이터 분석, 머신러닝 등의 다양한 패키지까지 초보자도 알기 쉽도록 내용을 정리해 놓았습니다.

업무는 물론 투자에도 도움이 될만한 전자공시시스템(DART)나 텔레그램(Telegram) 관련 패키지도 배울 수 있으니 많은 관심 부탁드립니다.

 

 

오늘은 모듈을 불러와서 사용할 때 입력해주는 import와 from의 의미에 대해서 알아보겠습니다.

 

여러분은 아마 python을 공부하시다가 import os 혹은 from os import * 과 같은 구문을 보신 적이 있을거예요.

혹시 이 둘의 차이점에 대해서 생각해보신적 있으신가요?

 

import os

- os 모듈을 불러오는 것

 

from os import*

- os모듈로부터 모두(*) import

 

언뜻보면 같은 의미인 것 같습니다만 조금 다르답니다. 어떻게 다른지 결론부터 말씀드리면 아래와 같습니다.

 

한줄 요약

import만 사용하면 모듈 안의 함수를 사용할 때, 모듈명.함수명( )으로 하고, from을 사용하면 바로 함수명( )으로 사용

 

 

자세한 이해를 위해서 os 모듈의 listdir 함수를 사용하는 상황을 예로 설명드려보겠습니다.

 

모듈: os (운영체제에서 제공되는 여러 기능을 다룰 수 있는 파이썬 모듈)

모듈 내의 함수: listdir (현재 경로의 파일 또는 폴더의 리스트를 반환하는 함수)

 

 

case1. import os

 

- 현재 python 파일에서 listdir 함수를 사용 하려면 os.listdir( )이라고 입력해야함.

 

 

case2. from os import *

 

- 현재 python 파일에서 listdir 함수를 사용하려면 listdir( )만 사용하면 됨.

- 이때 주의할 점은 from으로 불러온 모듈에 같은 이름의 함수가 있으면 문제가 발생.

- 참고로, import *를 와일드 임포트(wild import)라고 부름.

 

 

case3. from os import listdir

 

- 하나의 함수만 가져오는 것도 가능. (함수 사용법은 case2와 같음)

- 와일드 임포트는 뜻하지 않게 기존의 변수나 함수를 덮어 쓸 때가 있을 수 있으므로 해당 방법이 바람직함.

   (그냥 공부할 때는 import *가 짱입니다)

 

 

알아두면 피가되고 살이되는 지식

 

1. 모듈 안에는 함수 뿐만 아니라, 변수나 클래스도 존재하고 이걸 가져다 쓸 수 있습니다.

from openpyxl import Workbook

wb = Workbook()    # Workbook 클래스로 wb 인스턴스 생성

 

2. 모듈은 누군가 만들어놓은 파이썬 파일(.py)이며, 이를 모아둔 폴더를 패키지라고 합니다.

 

2021.03.17 - [파이썬 기초/기초 문법] - [코딩유치원] 파이썬 기초 문법 10편_함수, 모듈, 패키지 개념 총정리

 

대부분의 패키지는 그 안에 하위 패키지나 모듈을 가지고 있습니다. 이러한 하위 패키지 중에는 상위 패키지를 임포트할 때 자동으로 임포트되는 것도 있지만 자동으로 임포트되지 않는 것도 있습니다.

 

자동으로 임포트되지 않는 하위 패키지는 아래의 예처럼 수동으로 임포트 해야한다는 점 알아두시면 좋을 것 같아요.

 

import 패키지명.모듈명

import 패키지명.하위 패키지명

 

import sklearn.preprocessing

dir(sklearn.preprocessing)

 

반응형
반응형

안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.

코딩유치원에서는 파이썬 기초부터 사무자동화, 웹크롤링, 데이터 분석, 머신러닝 등의 다양한 패키지까지 초보자도 알기 쉽도록 내용을 정리해 놓았습니다.

업무는 물론 투자에도 도움이 될만한 전자공시시스템(DART) 텔레그램(Telegram) 관련 패키지도 배울 수 있으니 많은 관심 부탁드립니다.

 

 

 

 

오늘은 열심히 프로그래밍의 영원한 동반자인 디버깅(Debugging)에 대해서 설명드리고 VS code에서 어떻게 효율적인 디버깅을 할 수 있는지 함께 알아보는 시간을 가지겠습니다.

 

디버그란?

 

디버그는 "벌레를 잡다"라는 뜻으로 프로그램에서 의도치 않게 실행되는 오류를 수정하는 작업을 뜻합니다.

단번에 생각한 것을 완벽하게 코딩하는 것은 어려운 일입니다. 우리같은 초보에게는 짧은 몇 줄의 코드에서 조차 빈번하게 오류가 발생하죠.

물론 더 실력이 올라가면 그 수준에 맞는 어렵고 복잡한 코드를 작성해야하기에 디버깅은 개발자의 영원한 숙제라고도 할 수 있겠습니다.

 

우리는 지금까지 어떤 변수 안에 있는 값을 확인 하기 위해서는 print( ) 함수를 이용해서 터미널 창에서 확인해왔습니다.

이렇게 간단한 코드는 처음부터 끝까지 실행시키는 방식으로 가능하지만, 만약 수백, 수천 줄의 코드는 그런 방법은 너무 비효율 적이겠죠?

코드 실행 후, 터미널의 출력 창 확인

 

VS CODE 디버깅을 위한 설정

 

간단한 코드를 통해 VS CODE에서 어떻게 디버깅할 수 있는지 알아보겠습니다. 먼저 VS CODE를 켜서 아래의 코드를 복붙해주세요.

 

개소리("멍멍")를 입력받으면 "개가 짖네"라는 문장을 출력하고, 그 외의 경우는 "다른 동물이구나"라는 문장을 출력하는 코드입니다.

 

def find_dog(sound):
    if sound == "멍멍":
        return("개가 짖네")

    else:
        return("다른 동물이구나")

sound = "야옹"
find_result = find_dog(sound)

print(find_result)

 

코드를 입력하신 후, 화면 왼쪽에 벌레와 재생버튼을 합쳐놓은 듯한 아이콘을 클릭해주세요.

그러면 파란색으로 '실행 및 디버그' 버튼이 나오는데 이걸 클릭해주세요.

 

버튼을 클릭하시면 아래와 같이 화면 상단에 선택창이 뜨는데 Python File을 눌러주시면 됩니다. 그러면 잠시 하단의 파란색 상태바가 붉은색으로 바뀌었다가 원래 상태로 돌아오면서 터미널 창에 코드 실행결과가 출력되는 것을 확인 하실 수 있을텐데요. 사실 이렇게만 하면 우측 상단의 초록색 실행 버튼을 누른 것과 다른 것이 없습니다. 

 


<여기서 잠깐>

 

항상 이렇게 Python File을 선택하는 번거로움을 없애기 위해 아래와 같이 설정하시는 것을 추천드립니다.

 

- 실행 및 디버그 버튼 밑에 launch.json 파일 만들기 를 클릭한 후, 위와 동일하게 Python File을 선택.

- launch.json 파일이 새로운 탭으로 뜨면 그냥 종료. (해당 프로젝트 폴더 내의 .vscode 안에 저장되어 있음)

  (단, 이 설정은 각 프로젝트 폴더에서만 유효하며, 다른 프로젝트 폴더를 생성 시 다시 설정이 필요함.)

 

설정이 완료되면 아까의 실행 및 디버그 버튼이 없어지고 초록색 Run 버튼Python: Current File 이 생긴 것을 보실 수 있습니다.

아래에 변수(VARIABLES), 조사식(WATCH), 호출 스택(CALL STACK)이라는 창이 3개도 추가되었는데 이건 아래에서 설명드리겠습니다.

 

여기까지 따라 오셨으면 이제 디버깅에 필요한 셋팅이 모두 끝났습니다.

 

지금 부터는 어떻게 디버깅을 할 수 있는지 함께 알아보겠습니다.


 

VS CODE 디버깅

 

1. 중단점(Break Point) 지정하기

 

코드의 라인넘버 왼쪽의 공간에 커서를 올리면 Break Point를 찍을 수 있습니다. 중단점을 찍는 것은 해당 라인 이전까지만 실행시키기 위함입니다. 즉, 빨간색 점으로 표시한 라인 전까지 코드가 실행되기를 원한다는 의미입니다.

 

 

2. Run 버튼 클릭(디버깅 실행)

 

이번엔 가장 첫 라인에 중단점을 찍고 좌측 상단의 Run 버튼을 눌러보겠습니다. (우측 상단이 아님에 주의)

아래와 같은 화면이 출력됩니다. 현재는 첫 줄의 코도도 실행되지 않은 상태입니다. 여기서 다음 코드를 한 줄씩 실행시켜주려면 빨간색으로 표시한 아이콘을 클릭해주시면 됩니다.

 

여러분들도 눌러보시면서 코드 실행 순서가 어떻게 흘러가는지, 왼쪽의 변수창과 호출 스텍창이 어떻게 변하는지 관찰해보세요.

8번 줄의 코드를 실행시키고 나면 sound: '야옹'이라는 변수가 추가되는 것도 확인해보시고, 가장 마지막 11번 줄 실행 직전에는 어떤 변수들이 생겼는지도 확인해보시면 좋을 것 같아요.

 

<여기서 잠깐>

 

- 변수(variables) 창에 나타나있는 변수를 더블클릭하면 값을 변경 가능. 다음 코드부터 변경된 값으로 진행

- 함수(def) 부분이 실행될 때는 호출 스택을 통해서 어디를 통해서 함수가 호출되었는지도 확인 가능

 

 

 

3. 조사식(WATCH) 사용법

 

위의 1, 2번 단계만 잘 사용하셔도 충분하지만, 조사식 사용법도 알아두시면 좋을 것 같아요.

 

조사식 창에 커서를 올리시면 아래와 같이 + 아이콘이 나타납니다. 이걸 클릭해주세요.

 

클릭하면 입력창이 뜨는데, 여기에 확인하고 싶은 변수명을 입력해줍니다.

 

저는 sound와 find_result를 입력해보았습니다. 현재는 디버깅을 시작했지만 아무것도 실행되지 않은 상태여서 해당 변수들이 정의되지 않은 상태라며 에러를 출력하고 있습니다.

 

쭉쭉 한 줄씩 실행시켜보면 코드가 진행됨에 따라 변수에 값이 들어가있는 것을 확인 하실 수 있습니다.

이 기능은 내가 관찰하고 싶은 변수가 어떻게 변하는지 집중해서 볼 때 유용할 것 같아요.

 


오늘 준비한 내용은 여기까지입니다.

 

앞으로 코딩하시면서 오늘 배운 내용을 사용하신다면 정신건강에 큰 도움이 될 것이라 믿습니다!

반응형
반응형

안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.

코딩유치원에서는 파이썬 기초부터 사무자동화, 웹크롤링, 데이터 분석 등의 다양한 패키지까지 초보자도 알기 쉽도록 내용을 정리해 놓았습니다.

업무는 물론 투자에도 도움이 될만한 전자공시시스템(DART)나 텔레그램(Telegram) 관련 패키지도 배울 수 있으니 많은 관심 부탁드립니다.

 

 

오늘은 파이썬 프로그래밍의 초보에서 벗어나기 위한 첫번째 단계로, 클래스(class)에 대해 알아보겠습니다.

(이 글은 TCP 스쿨의 파이썬 강의를 참고하여 공부한 후 정리한 글입니다.)

 

이 글은 지난 글과 이어지는 글이므로, 지난 글을 읽고 읽으시면 이해에 도움이 됩니다.

 

https://coding-kindergarten.tistory.com/56

 

[파이썬 중급 문법] 클래스(class) 총정리 1편_객체,속성,메소드,인스턴스

안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다. 코딩유치원에서는 파이썬 기초부터 사무자동화, 웹크롤링, 데이터 분석 등의 다양한 패키지까지 초보자도 알기 쉽도

coding-kindergarten.tistory.com

 

 


 

1. 초기화 메소드 ( __init__ )

 

지난 시간 class에 대해서 설명하며 예로 들었던 코드를 다시 보겠습니다. 사실 쉬운 이해를 위해서 아래와 같이 코딩했지만 당연히 실제로는 계좌번호나 계좌잔액에 정해진 값을 넣어 두진 않겠죠? 클래스를 1회용으로 만들지는 않을테니까요!

 

class ATM:                    # 클래스 선언

    계좌번호 = "123456789"      # 속성 선언
    계좌잔액 = "30000"


    def withdraw_all(self):   # 메소드 선언

        print(self.계좌번호 + "에서" + self.계좌잔액 + "을 인출하겠습니다.")
        

Coding_ATM = ATM()          # 인스턴스 생성

print(Coding_ATM.계좌번호)    # 인스턴스의 속성 가져오기
Coding_ATM.withdraw_all()   # 인스턴스의 메소드 호출

 

그래서 우리는 계좌번호와 계좌잔액을 입력받는 메소드를 가장 처음에 만들어줍니다. 이것도 코드로 보시죠.

이렇게 하면 인스턴스를 생성하고 setInfo 메소드를 이용해서 입력값을 받아서 모든 고객용으로 사용가능할 것입니다.

 

class ATM:                   

    def setInfo(self, 계좌번호, 계좌잔액):
    	
        self.계좌번호 = 계좌번호
        self.계좌잔액 = 계좌잔액

    def withdraw_all(self):

        print(self.계좌번호 + "에서" + self.계좌잔액 + "을 인출하겠습니다.")



Coding_ATM = ATM()   # 인스턴스 생성

Coding_ATM.setInfo('123456789', '30000')
Coding_ATM.withdraw_all()

 

하지만 이런 방식은 비효율적입니다. 만약 setInfo 메소드를 가장 먼저 호출해주지 않으면, withdraw_all 메소드에서 사용해야할 인수가 입력되지 않았으므로 오류가 발생하기 때문이죠. 거기다가 코드도 길어지는 단점이 있죠.

 

그래서 지금 배울 초기화 메소드(initialize method)를 사용해줍니다. 앞으로 클래스를 만들 땐 꼭 초기화 메소드를 사용한다고 생각하시면 되겠습니다. 파이썬에서 초기화 메소드의 이름은 __init__으로 고정되어 있습니다.

 

class ATM:                   

    def __init__(self, 계좌번호, 계좌잔액):
    	
        self.계좌번호 = 계좌번호
        self.계좌잔액 = 계좌잔액

    def withdraw_all(self):

        print(self.계좌번호 + "에서" + self.계좌잔액 + "을 인출하겠습니다.")



Coding_ATM = ATM('123456789', '30000')   # 인스턴스 생성 시, 인수를 입력해주어야함

Coding_ATM.withdraw_all()

 

 

2. 클래스 변수 / 인스턴스 변수

 

변수가 선언된 위치에 따라 변수의 유효 범위가 달라지며, 이에 따라 다음과 같이 구분할 수 있습니다.

 

1) 클래스 변수(class variable)

   : 해당 클래스에서 생성된 모든 인스턴스가 값을 공유하는 변수

 

2) 인스턴스 변수(instance variable)

   : __init__() 메소드 내에서 선언된 변수로 인스턴스가 생성될 때마다 새로운 값이 할당되는 변수

 

class ATM:                      # 클래스 선언

    계좌번호 = "123456789"        # 이 방식이 클래스 변수
    계좌잔액 = "30000"
    
    
    def __init__(self, 계좌번호, 계좌잔액):
    	
        self.계좌번호 = 계좌번호    # 이 방식이 인스턴스 변수
        self.계좌잔액 = 계좌잔액    

 

예를 들어, 게임회사의 프로그래머가 게임 캐릭터를 만들 때 계속 사용할 클래스를 만드는 상황을 가정해봅시다.

게임 캐릭터가 공통적으로 가지는 특성은 클래스 변수로 설정해주고, 캐릭터마다 개성을 부여해줄 부분은 인스턴스 변수로 설정해주는 것을 생각해 볼 수 있겠습니다.

 

 

3. 상속

 

여기서의 상속(inheritance)은 여러분들이 아는 그 상속이 맞습니다. 부모가 자식한테 재산을 물려주는 것 말입니다.

여기서 다른 것은 사람이 아니라 클래스인 점이죠. 이 상속의 개념을 이용하면 이미 존재하는 클래스의 속성과 메소드를 모두 그대로 사용할 수 있습니다. 거기다가 기능을 추가할 수도 있답니다.

 

용어를 잠깐 설명드리면, 이미 존재하던 클래스를 부모 클래스(parent class) 또는 기초 클래스(base class)라고 부르며,

상속을 통해 새롭게 생성되는 클래스를 자식 클래스(child class) 또는 파생 클래스(derived class)라고 부릅니다.

 

상속의 사용 예를 들어보겠습니다. 서로 개과와 고양이과로 생김새는 다르지만 새끼를 낳는 ‘포유류’라는 공통적인 특징을 갖는 것입니다.

만약 게임 안에서 개와 고양이를 만들 때, 포유류 클래스를 만들어서 다리는 4개, 새끼를 나음, 눈 2개 등의 특징을 부여하고, 그 클래스를 상속받아서 각각의 개 클래스, 고양이 클래스를 세부적으로 만들어주는 것이죠.

 

클래스 상속은 아래와 같이 간단하게 가능합니다. 이렇게 상속을 통해 만들어진 자식 클래스를 이용해 만든 인스턴스는, 부모 클래스 안의 속성과 매소드를 모두 활용 가능합니다. 상속 그리 어렵지 않죠?

 

class 자식클래스명(부모클래스명):

 

4. 메소드 오버라이딩

 

위에서 배운 상속이 어떤 도면을 복사 붙여넣기 해서 내용을 추가한 것이라면, 메소드 오버라이딩은 상속한 후에 기존 내용을 수정한 것입니다. 즉, 상속한 다음에 메소드를 같은 이름으로 재정의 해주는 것입니다.

 

# 부모 클래스 (일반 새)
class Bird:

    def __init__(self):
        self.flying = True  

    def birdsong(self):
        print("짹짹")    


# 자식 클래스 1 (참새)  --> 상속
class Sparrow(Bird):


# 자식 클래스 2 (닭) --> 상속 후 메소드 오버라이딩
class Chicken(Bird):

    def birdsong(self):
        print("꼬끼오")   


# 객체화
my_sparrow = Sparrow()
my_chicken = Chicken()


# 그냥 상속과 메소드 오버라이딩의 비교
my_sparrow.birdsong()
my_chicken.birdsong()


<결과>

짹짹
꼬끼오

 

 

자세히 보시면 birdsong 메소드를 실행시켰을 때 차이가 생깁니다.

 

단순히 Bird 클래스를 상속받은 Sparrow 클래스는 birdsong 메소드를 실행시켰을 때 "짹짹"을 출력하고,

 

Bird 클래스의 속성을 상속받은 후 birdsong 메소드를 재정의(메소드 오버라이딩) 해준 Chicken 클래스는 "꼬끼오"를 출력하죠?

 


혹시 설명이 잘 이해가 가지 않거나 질문사항 있으시면 댓글 달아주세요!

 

감사합니다.

 

 

 

반응형
반응형

안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.

코딩유치원에서는 파이썬 기초부터 사무자동화, 웹크롤링, 데이터 분석 등의 다양한 패키지까지 초보자도 알기 쉽도록 내용을 정리해 놓았습니다.

업무는 물론 투자에도 도움이 될만한 전자공시시스템(DART) 텔레그램(Telegram) 관련 패키지도 배울 수 있으니 많은 관심 부탁드립니다.

 

오늘은 파이썬 프로그래밍의 초보에서 벗어나기 위한 첫번째 단계로, 클래스(class)의 개념에 대해 알아보겠습니다.

 

새로운 개념을 이해할 때에는 원래 알고 있는 개념에서 덧붙이거나 비유를 통해서 이해하는 것이 효율적이라고 생각합니다.

비유를 통해 최대한 쉽게 설명해볼테니 차근차근 따라와주세요.

 


 

1. 클래스의 개념

 

클래스는 기초문법 강의에서 배운 함수의 개념과 유사하면서도 다릅니다.

 

출처. 프로그래머가 필요한 수학 (brunch)

 

함수란 아래의 그림의 빵 만드는 기계처럼 '밀가루(입력)을 받아서 의도된 프로세스를 통해 빵(출력)을 내보내는 무엇'라고 이해한다면,

클래스 빵 만드는 기계(함수) 입력과 출력(변수)의 정보를 담은 설계도입니다.

 

위의 설명만 이해하셔도 클래스의 절반은 파악하신 것이니 꼭 이해하고 넘어가셨으면 좋겠습니다.

 

 

우리는 이 설계도가 있다면 얼마든지 빵 만드는 기계를 만들 수 있는 것이죠.

또한 이 설계도를 내용을 추가하거나 변경하여 새로운 기능의 빵 만드는 기계를 만들 수 있습니다.

 

위의 내용은 다음 시간에 상속(inheritance)메소드 오버라이딩(method overriding)의 개념을 공부하며 더 자세히 다루어 보겠습니다.

 

 

2. 클래스 기초

 

설계도를 활용 하려면 도면해독법에 대한 지식이 필요하듯이 클래스를 활용하기 위한 기본 개념들이 필요합니다.

 

1) 객체

프로그래밍이 처음이시거나 C언어를 공부하셨던 분들은 객체(object)란 용어가 생소하실텐데요.

객체란 그냥 실체가 있는 무엇이라는 뜻을 있어보이게 표현한 말입니다. 현재 사용하고 계신 컴퓨터나 휴대폰, 앉아있는 의자, 혹은 나 자신 까지도 모두 객체라고 생각할 수 있습니다.

 

이 객체란 개념은 설계도만 존재하고 실체는 존재하지 않는 상태인 클래스와 엮어서 설명되곤 합니다.

여러 책에서 붕어빵 틀(클래스)과 붕어빵(객체)으로 설명합니다만 개인적으로 정확한 비유는 아니라고 생각합니다.

어떻게 보면 붕어빵 틀도 실체일테니까요.

 

2) 속성과 메소드

앞서 클래스를 빵 만드는 기계(함수)와 입력과 출력(변수)의 정보를 담은 설계도라고 설명했습니다.

지금 배울 속성(attribute)과 메소드(method)는 각각 설계도에 표시되어 있는 변수와 함수라고 이해하시면 됩니다.

 

클래스의 변수 = 속성 (attribute)

클래스의 함수 = 메소드 (method)

 

예를 들어, 현금자동인출기(ATM)를 클래스로 작성한다면,

속성으로는 계좌번호, 잔액, 인출금액, 메소드로는 입금하기, 출금하기, 이체하기 등을 만들 수 있을 것입니다.

 

3) 클래스 선언

class의 선언은 'class 클래스명:'으로 선언해줍니다.

 

만약 아래와 같이 클래스를 선언해주면 '클래스명'이라는 이름의 아무 내용도 담기지 않은 설계도가 생성된다고 생각하시면 됩니다.

마치 CAD(전자도면)을 새로 만들고 이름만 정해서 저장해준 느낌입니다.

 

class 클래스명:
	pass

 

다음으로는 클래스 안에 내용을 채워보겠습니다. 이해를 위한 코드이므로 실제로는 작동되지 않습니다.

 

class ATM:                    # 클래스 선언

    계좌번호 = "123456789"      # 속성 선언
    계좌잔액 = "30000"


    def withdraw_all(self):   # 메소드 선언

        print(self.계좌번호 + "에서" + self.계좌잔액 + "을 인출하겠습니다.")

 

우리가 돈을 뽑는 ATM 클래스를 만들어보았습니다.

 

속성으로는 계좌번호와 계좌잔액을 가지며, 메소드로는 계좌잔액을 모두 인출하는 withdraw_all 메소드를 가지는 클래스입니다.

 

여기서 self라는 생소한 개념이 보입니다. 클래스를 사용하려면 이 self에 대한 이해가 필수적입니다.

 

self란?

메소드 선언 시 사용된 self는 객체가 자기 자신을 참조하는데 사용하는 매개변수입니다.

self를 사용하면, 메소드에서 클래스에 정의된 모든 속성 및 다른 메소드에 접근할 수 있습니다.

 

파이썬에서는 메소드를 선언할 때 첫 번째 매개변수로 반드시 self를 명시하도록 하고 있으며, 메소드를 호출할 때는 self 매개변수에 아무런 인수를 전달하지 않아도 됩니다.

 

 

4) 인스턴스 생성

인스턴스란 클래스를 기반으로 생성된 객체를 가리킵니다. 그냥 객체라고 해도 되겠지만 특별히 어떤 클래스의 객체라는 것을 말해주는 느낌이랄까요. 마치 영희(객체)라는 사람이 있는데, 굳이 미영이의 딸(OO 클래스의 인스턴스)이라고 부르는 느낌이라고 생각하시면 되겠습니다. 완벽한 예는 아닌듯하지만 느낌만 가져가시면 좋겠습니다.

 

class ATM:                  # 클래스 선언

    계좌번호 = "123456789"    # 속성 선언
    계좌잔액 = "30000"


    def withdraw_all(self): # 메소드 선언

        print(self.계좌번호 + "에서" + self.계좌잔액 + "을 인출하겠습니다.")
        

Coding_ATM = ATM()          # 인스턴스 생성

print(Coding_ATM.계좌번호)    # 인스턴스의 속성 가져오기
Coding_ATM.withdraw_all()   # 인스턴스의 메소드 호출

 

위의 코드에서 방금 만들어준 ATM 클래스를 가지고 Coding_ATM이라는 객체를 생성해주었습니다.

클래스명에 소괄호( )를 붙여서 해당 클래스의 인스턴스를 생성할 수 있습니다.

 

여기서, 'Coding_ATM은 ATM의 인스턴스다'라고 말할 수 있습니다.

 

Coding_ATM.계좌번호나 Coding_ATM.withdraw_all( )과 같이 생성된 인스턴스에 닷(.) 연산자를 사용하면 해당 클래스의 속성이나 메소드를 호출할 수 있습니다.

 


오늘은 클래스의 가장 기본에 대해서 다루어보았습니다.

 

다음 시간에는 클래스에 대한 조금더 깊은 내용을 다루어보겠습니다.

 

 

반응형
반응형

안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.

 

 

[코딩유치원 기초문법 강의]

 

2021.03.09 - [파이썬 기초/기초 문법] - [코딩유치원] 파이썬 기초 문법 1편_프로그래밍과 코딩의 정의, 그리고 자료형

2021.03.11 - [파이썬 기초/기초 문법] - [코딩유치원] 파이썬 기초 문법 2편_문자열 자료형

2021.03.11 - [파이썬 기초/기초 문법] - [코딩유치원] 파이썬 기초 문법 3편_변수란 무엇일까?

2021.03.12 - [파이썬 기초/기초 문법] - [코딩유치원] 파이썬 기초 문법 4편_리스트 자료형

2021.03.12 - [파이썬 기초/기초 문법] - [코딩유치원] 파이썬 기초 문법 5편_튜플, 딕셔너리 자료형

2021.03.13 - [파이썬 기초/기초 문법] - [코딩유치원] 파이썬 기초 문법 6편_집합, 불 자료형

2021.03.14 - [파이썬 기초/기초 문법] - [코딩유치원] 파이썬 기초 문법 7편_제어문(if문)

2021.03.15 - [파이썬 기초/기초 문법] - [코딩유치원] 파이썬 기초 문법 8편_제어문(while문)

2021.03.16 - [파이썬 기초/기초 문법] - [코딩유치원] 파이썬 기초 문법 9편_제어문(for문)

2021.03.17 - [파이썬 기초/기초 문법] - [코딩유치원] 파이썬 기초 문법 10편_함수, 모듈, 패키지 개념 총정리

2021.03.18 - [파이썬 기초/기초 문법] - [코딩유치원] 파이썬 기초 문법 11편_함수 사용법

2021.03.19 - [파이썬 기초/기초 문법] - [코딩유치원] 파이썬 기초 문법 12편_모듈 사용법

 

코딩유치원에서는 기초 문법을 하나하나 자세히 다루기보다는 개념에 대해 간략히 설명하고 넘어갈 예정입니다.

마치 영어를 시작할 때, 문법만 주구장창 공부하다가 영어에 흥미를 잃어버리는 것과 같이 코딩도 마찬가지라고 생각하기 때문입니다.

문법을 자세히 다루는 곳은 구글에서 조금만 검색해도 많이 나올뿐만 아니라, 나중에 필요할 때마다 찾아보는 것이 더 효율적입니다!


 

 

"Don't reinvent the wheel"

 

영어에는 이런 격언이 있습니다. 직역하자면 '바퀴를 다시 발명하지 마라!'입니다. 이 말은 이미 만들어져서 잘 되고 있는 것(wheel)을 처음부터 다시 만들(reinvent) 필요는 없다는 의미입니다. 즉, 불필요하게 처음부터 다시 시작하지 말라는 것을 강조하는 말입니다.

 

우리는 앞으로 코딩을 하면서 남이 만들어 놓은 수많은 모듈을 가져와서 사용하게 될 것입니다. 아니 모듈을 넘어서 코드도 많이 가져와서 사용하게 될 것입니다. 그것을 내 능력이 아니라고 부끄러워 할 필요가 없습니다. 결국 태양 아래 새로운 것은 없는 것이니까요!

 

그러니 우리가 앞으로 익혀야 할 능력은 Ctrl+C, Ctrl,V한 코드들이 무슨 말인지, 어느 부분을 고치면 내가 원하는 기능을 할 수 있는지가 될 것입니다. 지금 껏 배워온 기초 문법들이 그것을 도와줄 것이고, 오늘 배울 모듈 사용법이 여러분들의 원하는 기능들을 손쉽게 구현 가능하도록 해줄 것입니다.

 

자! 그럼 시작해보겠습니다.

 

모듈

 

한땀한땀 파워포인트로 그린 개념도

 

모듈은 기초 문법 강의 10편에서 설명드렸듯이 함수나 변수 또는 클래스를 불러와서 사용할 수 있게끔 모아 놓은 파이썬 파일(.py)입니다.

 

대충 개념은 알아보았으니 이번 시간에는 모듈 파일을 만드는 방법과 모듈을 불러와서 사용하는 법에 대해 자세히 알아보겠습니다.

 

모듈 만드는 방법

1) VS Code를 실행한 후, 원하는 경로(디렉토리라고도 부름)에 폴더를 하나 만듭니다.

   (어떻게 하는지 잘 모르겠다 하시는 분들은 아래의 글을 참고해주세요)

2021.03.08 - [파이썬 기초/개발환경 구축] - [코딩유치원] 파이썬 개발환경 구축 4편 (VS Code와 친해지기)

 

2) 적당한 제목(module.py)으로 파이썬 파일을 하나 만들어 줍니다.

 

3) 아래와 같이 코딩을 한 후, 저장을 합니다. (저장을 꼭 해주세요!)

def add(a, b):
    return a + b

a= 1
b= 2

print(a+b)

 

모듈 만들기 끝입니다! 엄청 간단하죠?ㅎㅎ

 

사실 더 간단하게 가장 아래의 함수 두 줄만 있어도 되지만 아래에서 설명드릴게 있어서 이렇게 코딩했답니다.

 

그럼 바로 모듈을 가져와서 사용하는 법으로 넘어가보겠습니다.

 

 

모듈 사용하는 방법

 

1) 다시 한 번 새로운 파이썬 파일을 하나 만들어 줍니다. (이번에도 아무 이름.py로 이름지어줍니다)

 

2) 아래와 같이 코딩한 후, 코드를 실행합니다.

import module as mod      # import 모듈명
                          # as mod는 불러온 모듈의 이름이 길 때, 앞으로 mod로 부르겠다는 의미
                          # 당연히 mod도 맘대로 지은 이름

print(mod.add(5,10))

 

잠시 코드에 대해서 설명하고 실행 결과에 대해서 이야기 해보겠습니다.

 

import이미 만들어 놓은 파이썬 모듈을 사용할 수 있게 해주는 명령어입니다. 그 뒤에 module은 우리가 방금 만들었던 모듈명이죠.

그리고 as mod는 필수는 아니지만 앞으로 긴 이름의 모듈이 있을 때, as 명령어로 모듈 이름을 내맘대로 재정의해서 사용할 수 있게 해주는 코드니 알아두시면 좋겠습니다.

 

마지막으로 print() 함수를 이용해서 module의 add(a,b) 함수에 5와 10을 인수로 넣어서 결과를 터미널 창에 띄우는 코드입니다.

 

여기서 잘보시면 모듈명.함수의 형태로 사용한게 보이시죠? 앞으로 이렇게 "."(도트 연산자)를 이용해서 원하는 모듈의 원하는 함수를 가져다 사용할 수 있습니다.

 

여기까지가 모듈을 사용하는 방법입니다. 이것도 정말 간단하죠?!

 

 

모듈 만들 때 꼭 넣어줄 제어문 [  if__name__ == "__main__":  ]

 

위에서 작성했던 코드를 실행해 보시면 아래와 같이 결과가 나왔을텐데요, 잠시 하나를 더 설명해야 할 것 같아요.

 

<결과 터미널 창>

3
15

 

 

우리가 module의 add 함수를 불러오면서 원했던 것은 단지 15라는 값이 었습니다. 하지만 위에 3이란 값이 함께 출력되었죠.

이 3이란 것은 import module을 하면서 딸려온 출력된 값입니다. 이것이 의미 하는 바는 무엇일까요?

 

바로 import를 하면 함수 외에도 모듈의 모든 것들, 특히 변수도 같이 import 된다는 것입니다. 모듈을 작성하면서, 불가피하게 함수 외에도 변수를 설정할 수도 있을 것입니다. 만약 이런 것들이 그대로 새로 작성하는 코드에 영향을 준다면 곤란한 일이 생길 수도 있습니다.

 

그래서 통상적으로 모듈을 만들 때는 아래와 같은 문구를 넣어줍니다.

 

def add(a, b):
    return a + b

if __name__ == "__main__":    # 참고로 __는 언더바( _ ) 두 개
    
    a= 1
    b= 2

    print(a+b)

 

<참고> 만약 내가 코린이고 앞으로 모듈 만들 일 없다고 생각하시면 아래의 내용은 그냥 넘어가셔도 됩니다.

 

__name__이란 변수명은 모듈과 현재 파이썬 파일을 구분해주기 위한 파이썬만의 특별한 변수입니다. 현재의 파이썬 파일을 실행하면 __name__변수에 "__main__"이라는 값이 저장됩니다. 이것을 이용해 모듈을 불러왔을 때, 실행되면 안되는 부분을 실행되지 않게 해줄 수 있습니다.

 

1) 모듈 파일을 직접 실행할 때

 

module.py를 직접 실행하면은 if의 조건문이 참이 되어서 if문 안의 내용이 실행됩니다.

 

2) 모듈 파일을 불러올 때

 

모듈을 import한다는 것은 모듈 파일을 실행시킨다는 것입니다. 하지만 이때 모듈 파일의 __name__ 변수에는 "__main__"이 들어가있지 않으므로 if 조건문이 거짓이 되어 if문 다음 문장이 수행되지 않습니다.

 

 

모듈은 아무곳에서나 불러올 수 없다 

 

기본적으로 import 명령어로 모듈을 불러오려면, 모듈 파일이 현재 디렉터리(경로)에 있거나 파이썬 라이브러리가 저장된 디렉터리에 있어야만 합니다. 참고로 파이썬 라이브러리는 파이썬을 설치할 때 자동으로 설치되는 파이썬 모듈을 말합니다.

 

예전에 VS Cdoe에서 인터프리터 환경을 'base':conda로 설정해주었었는데 이 것이 위에서 언급한 파이선 라이브러리가 저장된 디렉터리가 되겠습니다. 앞으로 새로운 패키지를 설치하는 일이 자주 있을텐데요, conda 명령어를 이용해서 패키지(모듈의 모음)를 설치하면 기본적으로 base에 설치됩니다. 이에 대한 내용은 그때 다시 자세하게 다루도록 하겠습니다.

 

어떤 메커니즘으로 파이썬이 모듈을 찾아서 사용하는지에 대해서는 아래의 블로그에 잘 설명되어 있으니, 여기서는 자세히 설명하지 않겠습니다. 내용이 조금 어려울 수 있으니, 중급자분들만 보세요.

 

velog.io/@devmin/%ED%8C%8C%EC%9D%B4%EC%8D%AC-import%EA%B0%80-module%EA%B3%BC-package-%EB%A5%BC-%EC%B0%BE%EC%95%84%EA%B0%80%EB%8A%94-%EA%B2%BD%EB%A1%9C

 

파이썬 - import가 module과 package 를 찾아가는 경로

파이썬에서는 import를 활용해 현재 작성하고 있는 파일 바깥의 패키지 및 모듈을 불러와 그 안에 있는 요소들을 가져다 쓸 수 있는데요, 이때 파이썬이 어떻게 패키지와 모듈이 있는 곳을 찾아나

velog.io


오늘 준비한 내용은 여기까지입니다.

 

여러분들의 코딩 공부에 도움이 되었길 바랍니다.

 

긴글 읽어주셔서 감사합니다!

반응형

+ Recent posts