연산자 오버라이딩



우리가 실제로

num = 1+1


을 할 때 내부에서는 다음과 같은 일이 일어납니다.













'개발 > 자바 brain에 파이썬 이식하기' 카테고리의 다른 글

연산자  (0) 2018.12.13
변수 와 타입  (0) 2018.12.11
사람에게만 보이는 코드, 주석  (0) 2018.12.11
안녕? 난 파이썬이라고 해  (0) 2018.12.11
들어가며  (0) 2018.12.10

연산자 (Operator)



자바에서는 볼 수 없었던 파이썬만의 특별한 연산자와, 파이썬 연산자의 특징에 대해 알아보겠습니다.

'개발 > 자바 brain에 파이썬 이식하기' 카테고리의 다른 글

연산자 오버라이딩  (0) 2018.12.13
변수 와 타입  (0) 2018.12.11
사람에게만 보이는 코드, 주석  (0) 2018.12.11
안녕? 난 파이썬이라고 해  (0) 2018.12.11
들어가며  (0) 2018.12.10

Python run time 은 도대체 어떻게 동작하는 것이죠?



Stack Exchange 에서 흥미로운 글을 발견해서 이를 번역해 보았습니다.


질문

python 런타임은 실제로 어떻게 동작하나요?

저는 runtime library의 컨셉을 이해하는데 어려움을 겪고 있습니다. 특히 python의 경우에요. 그래서 python 으로 hello world 프로그램을 작성해서 실행해 보았습니다.

제가 '엔터 버튼을 누르는 것'과  '기계어로 번역된 파이썬 코드가 CPU 에서 실행되는 것' 사이에 어떤 단계를 거치게 되나요? 그리고 이 과정이 Python runtime 과는 어떤 관계가 있나요?



답변

프로그래밍 언어들이 다양한 만큼, 현대 프로그래밍 언어들이 서로 공유하고 있는 공통 컨셉(개념)들이 꽤 있습니다. 그 중 2 가지가 질문의 답에 핵심이 될 수 있습니다.

제가 '엔터 버튼을 누르는 것'과 

'기계어로 번역된 파이썬 코드가 CPU 에서 실행되는 것'

사이에 어떤 단계를 거치게 되나요?


작성된 코드는 parse, analyze 를 거쳐서 인터프리터에게 들어갑니다.

본 내용은 전부 compiler 이론과 깊은 관련이 있는데, 여기서 '컴파일러'는 '코드를 한 언어에서 다른 언어로 번역하는 프로그램'을 말합니다.(보통은 기계어로 번역하는 일을 합니다.) 몇 년에 걸쳐 연구 할 만큼 방대한 분야이지만, 여기서는 기본적인 얘기만 하도록 하겠습니다.


parser: compiler 는 parser 부터 시작합니다. 소스 코드를 읽어들인 후 문법에 맞춰서 과연 이 소스 코드가 말이 되는지 판단합니다. 질문자의 경우에는 질문자가 작성한 헬로우 월드 코드가 Python 의 문법에 맞는지 검사하겠죠. 만약 문법이 틀렸다면 parser 가 에러를 낼 것이고 컴파일링은 중단됩니다. 그러나 만약 문법에 부합한다면 parser는 그 결과로 추상 문법 트리(AST, Abstract Syntax Tree)를 만들어 냅니다. 예를 들어 x = 5 라는 코드가 있었다면


이런 모양의 트리가 만들어 집니다.



semantic analysis: parser 가 AST 를 만들어 낸 이후엔 다음 단계로 접어듭니다. 이 AST가 무슨 의미인지 알아내는 과정입니다. parse 는 통과 했어도 이 단계에서 에러가 일어날 수도 있습니다. (예를 들어 1개의 인자를 받는 함수를 호출 할 때 3개의 인자를 전달했을 경우) 만약 에러가 없다면 AST를 좀 더 기계가 이해하기 쉽도록 교정합니다.


code generation: 앞서 두 단계를 거치면서 완벽히 분석되고, 간략화 된 AST 를 얻어냈습니다. 이제 이 AST를 generator에 넣습니다. generator 가 AST를 다른 언어로 번역해서 내보냅니다.(질문자의 경우에는 Python Code 를 기계어로 번역합니다.) 이로써 compile이 완료됩니다.


파이썬의 경우에는 compiler 가 아니라 interpreter 를 사용합니다. interpreter 는 compiler 와 정확히 똑같이 동작합니다. 다만 한 가지 차이가 있는데, code 를 번역해서 그 결과를 밖으로 내보내는 것 (파일에 작성하는 등)이 아닌, memory에 로드 시켜서 바로 실행한다는 것입니다.



그리고 이 과정이 Python runtime 과는 어떤 관계가 있나요?


모든 프로그래밍 언어(매우 간단한 언어를 제외하고)는 사전에 정의된 함수를 갖고 있습니다. 이 함수들은 매우 많은 유저들에게 중요하면서도, 유저들이 직접 정의해서 쓰기는 어려운 함수들입니다.(print 를 예로 들 수 있습니다. print 함수는 stdout 을 통해 값을 내보내는데, 만약 직접 구현해 보실려고 한다면, 행운을 빕니다 ^^) 유저들은 여타 라이브러리의 도움을 받지 않고도 실행 중(run time)에 이런 함수들을 쓸 수 있습니다. 이 함수들이 모여 있는 라이브러리를 runtime 이라고 부르는 것도 그 때문입니다.



참조:


https://softwareengineering.stackexchange.com/questions/313254/how-does-the-python-runtime-actually-work

변수 Variable


short variable name meme에 대한 이미지 검색결과


변수 선언하기

파이썬은 javascript 처럼 오토 캐스팅 언어입니다. 변수를 선언할 때 '형(type)' 을 지정해 줄 필요가 없습니다.


my_variable = 3
print(3)    # 출력: 3



int 가 할당된 변수에 String 을 할당하는 등 이미 할당된 타입과 다른 타입도 변수에 할당할 수 있습니다. (흔히 쓰는 방식은 아닙니다.)


my_variable = 3
my_variable = '안녕'
print(3)    # 출력: 안녕



sneak_case


자바에서는 흔히 Camel Case 를 사용해서 변수의 이름을 지었습니다. 하지만 파이썬에서 변수의 이름을 지어 줄 때에는 보통 snake_case 를 사용합니다. 모든 영문자는 소문자로 작성하고, 띄어쓰기를 _(언더스코어) 로 대신해 주면됩니다.

my_age = 23
family_name = 'jeong'
favorite_food = 'pizza'



상수

파이썬에는 final과 같은 키워드가 없습니다. 때문에 명시적으로 상수를 지정할 수 없습니다.


뭐 이런 언어가 다 있어?


라고 생각 할 수도 있겠지만, 사실 final 이 없다고 해서 지대한 문제가 생기는 건 아닙니다. 대신 상수의 기능을 하는 변수는 보통 대문자와 _(언더 스코어)의 조합으로 나타냅니다. 대부분의 파이썬 프로그래머들은 이렇게 생긴 값을 보면 상수라는 것을 알고 값을 할당하려고 시도하지 않습니다.

FAMILY_NAME = 'jeong'



타입


type(변수)을 사용해서 변수의 type 을 알 수 있습니다.




'개발 > 자바 brain에 파이썬 이식하기' 카테고리의 다른 글

연산자 오버라이딩  (0) 2018.12.13
연산자  (0) 2018.12.13
사람에게만 보이는 코드, 주석  (0) 2018.12.11
안녕? 난 파이썬이라고 해  (0) 2018.12.11
들어가며  (0) 2018.12.10

Python Code Style


주석



인간은 읽을 수 있고, 로봇은(혹은 악성 프로그램을) 읽을 수 없는 이미지를 CAPTCHA(Completely Automated Public Turing test to tell Computers and Humans Apart) 라고 한다. 보통 회원가입을 할때나 콘서트 예매를 할 때 볼 수 있다.


이처럼 프로그래밍에서도 사람만 읽고, 프로그램은 무시하도록 만들어진 코드를 '주석' 이라고 한다. 주석은 보통 다른 개발자('미래의 나'를 포함해서)를 위해 코드에는 드러나지 않은 배경지식을 설명하거나, 복잡한 코드를 쉽게 설명하기 위한 용도로 작성한다.



주석 적기

파이썬의 한 줄 주석(inline comment)은 # 으로 표현한다. # 으로 시작하는 부분은 인터프리터가 무시하고 지나간다.

# 한 줄 주석 입니다.


내용이 길어서 주석을 여러 줄(multi-line comment)에 걸쳐 나눠서 쓰고 싶다면 # 을 연달아서 사용한다.

# 여러줄
# 주석, # 이후 한 칸 띈 다음 적습니다.
# 이렇게 적습니다.



여러 줄 주석을 작성할 때 """ 혹은 ''' 을 사용할 수도 있는데, 이는 엄밀히 말해서 주석이 아니다. 파이썬 스타일 가이드 (PEP8, https://www.python.org/dev/peps/pep-0008/#block-comments)은 연속으로 # 을 써서 여러 줄 주석을 표현할 것을 권장하고 있으니, ''' 은 삼가하도록 하자.

"""여러 줄 
엄밀히 말해 주석은 아닙니다."""

'''되도록이면 #을
 연달아 사용하도록 합시다'''



 ''' 혹은 """ 으로 둘러쌓인 부분은 무시되지 않는다.

hi = '''엄밀히 말해
 주석은 아니다.'''

print(hi) # 출력 값 : 엄밀히 말해\n 주석은 아니다. 


코드 블록


기본적으로, 한 line 당 한 문장을 작성하고, 개행한다.

my_variable = 3
print(my_variable) 


한 Line 에 여러 문장을 작성하고 싶다면 방법은 있습니다. ;(세미콜론)을 사용하면 됩니다. 그러나 권장되는 방법은 아닙니다.

my_variable = 3; print(my_variable) # 출력: 3 


파이썬은 함수 블록 혹은 클래스 블록을 표현하기 위해 {}'중괄호' 를 사용하지 않습니다. 대신 tab (혹은 space bar 4번)을 사용해서 들여씁니다.

class MyClass:
    my_variable = 3
    my_second_variable = 4



참고: https://www.python.org/dev/peps/pep-0008/




읽을거리


주석이 없어서 벌어진 일: http://m.thisisgame.com/webzine/nboard/257/?n=61912



'개발 > 자바 brain에 파이썬 이식하기' 카테고리의 다른 글

연산자 오버라이딩  (0) 2018.12.13
연산자  (0) 2018.12.13
변수 와 타입  (0) 2018.12.11
안녕? 난 파이썬이라고 해  (0) 2018.12.11
들어가며  (0) 2018.12.10

MEET THE PYTHON



파이썬은 이렇게 생긴 아저씨가 만들었습니다.

귀도 반 로섬에 대한 이미지 검색결과

귀도 반 로섬 (https://ko.wikipedia.org/wiki/%EA%B7%80%EB%8F%84_%EB%B0%98_%EB%A1%9C%EC%84%AC)



파이썬의 특징


자바 혹은 C가 익숙한 개발자들은 '컴파일' 및 '빌드'에 익숙해져 있을 겁니다. 열심히 코드를 수정한 후에 IDE에 빌드를 시켜 놓곤 기지개 한 번 쭉 편 후 차나 한 잔 마시면서 기다린다거나, 유튜브에서 노닥거린다거나 하는 식입니다. 빌드가 다 되면 그제서야 수정한 코드가 정상적으로 작동하는지, 내가 생각지 못했던 버그는 없는지 테스트를 합니다.


그러나 파이썬에서는 그럴 일이 없습니다.


파이썬은 '인터프리터'언어 이기 때문입니다.


관련 이미지

인터프리터 언어와 컴파일 언어의 차이


컴파일이 필요한 자바의 경우 다음과 같은 절차를 밟아야 했습니다.

코드 작성 -> 컴파일(프로그래머가 작성한 코드를 Bytecode(10101)로 바꾸는 과정) -> Bytecode 를 JVM 이 해석, 실행

그러나 파이썬은

코드 작성 -> 인터프리터가 한 줄 씩 ByteCode 로 수정 -> 실행 -> 다음 줄 해석, 실행 반복














참조:


https://www.google.com/imgres?imgurl=https://imaso.co.kr/wp-content/uploads/2018/07/image-4.png&imgrefurl=https://www.imaso.co.kr/archives/3440&h=960&w=640&tbnid=q6DH6hMwCXZ3DM:&q=%EA%B7%80%EB%8F%84+%EB%B0%98+%EB%A1%9C%EC%84%AC&tbnh=160&tbnw=106&usg=AI4_-kRWsspQoECf1BuMgXyMXSt4-va-9g&vet=12ahUKEwjj5rPylJffAhUCbrwKHSUZB4UQ_B0wCnoECAYQEQ..i&docid=d6GaXUT_2mdyZM&itg=1&client=firefox-b-ab&sa=X&ved=2ahUKEwjj5rPylJffAhUCbrwKHSUZB4UQ_B0wCnoECAYQEQ


https://www.slideshare.net/ChrisCho2/python-vs-java-pycon-korea-2017



'개발 > 자바 brain에 파이썬 이식하기' 카테고리의 다른 글

연산자 오버라이딩  (0) 2018.12.13
연산자  (0) 2018.12.13
변수 와 타입  (0) 2018.12.11
사람에게만 보이는 코드, 주석  (0) 2018.12.11
들어가며  (0) 2018.12.10

Tistory 블로그에 Sysntax Highlighting 적용하기 - Prism




들어가며




이 가이드는 프로그래밍에 대한 기초적인 지식을 갖고 있는 사람에게 적합합니다.

그 중에서도 자바를 알고 있다고 가정하고 자바 프로그래머가 파이썬을 배울 수 있도록 도와드립니다.




파이썬 설치


먼저 최신 버전의 파이썬을 설치합시다.

https://www.python.org/downloads/


저는 윈도우 PC를 기준으로 설명 하겠습니다. 여러분은 자신의 OS에 맞는 파이썬을 설치해 주세요.


다운로드 버튼을 누른 후




이동한 페이지에서 스크롤을 내립니다.




각 운영체제, 환경에 맞는 설치파일들이 나열되어 있습니다.

저는 executable installer 를 선택하겠습니다.


다운로드 받은 exe 파일을 실행합니다.


Add Python 3.7 to PATH 에 체크해줍시다.
PATH 에 추가하면, 터미널(cmd)환경에서 파이썬이 설치된 경로까지
이동하지 않고도 파이썬을 실행할 수 있습니다.

체크 후에 Install Now 클릭!

설치가 성공할 때 까지 기다립니다.


정상적으로 설치가 되었다면 다음과 같이 확인할 수 있습니다.

1.명령 프롬포트를 엽니다. (윈도우 10 이라면, 윈도우 키 -> cmd -> 엔터)
2.프롬포트에 python 이라고 입력합니다.



위와 같은 메세지가 나오면 성공 입니다. cmd 창을 닫아주세요.



개발환경 설치



이어서 개발환경을 설치합니다.

Jetbrain의 Pycharm을 설치해주세요.


https://www.jetbrains.com/pycharm/download/


대학생이시라면 학교 이메일을 인증해서 무료로 파이참 Pro버전을 사용하실 수 있습니다.

한 번 인증 받은 라이센스는 1년간 유효하며, 1년이 지난 이후에도 여전히 유효한 학교 이메일을 가지고 있다면 다시 인증받아 사용할 수 있습니다.



 

'개발 > 자바 brain에 파이썬 이식하기' 카테고리의 다른 글

연산자 오버라이딩  (0) 2018.12.13
연산자  (0) 2018.12.13
변수 와 타입  (0) 2018.12.11
사람에게만 보이는 코드, 주석  (0) 2018.12.11
안녕? 난 파이썬이라고 해  (0) 2018.12.11

MYSQL 에 한글로 된 문자열을 집어넣으려 할 때


INSERT INTO people(name) VALUES ('민수');


아래와 같은 에러 메세지를 받을 때가 있다.


[2018-12-04 20:55:46] [HY000][1366] Incorrect string value: '\xEB\xAD\x90\xEC\x95\xBC' for column 'response' at row 1

String 값에 무엇이 잘못되었는데 Incorrect string value 라는 것일까.





원인 1.


문제는 mysql 의 character-set(인코딩) 설정에 있다. 다음 명령어를 통해 mysql 의 해당 설정을 조회하자.

show variables like 'c%';



아래와 같이 나오는게 정상이다.


만약 설정이 utf8이 아니라 latin1 등 다른 값으로 되어 있다면


설정을 바꿔주어야 한다.





원인2.


위 테이블 처럼 utf8 로 잘 설정되어 있는데도 여전히 같은 문제가 남아 있다면 테이블의 collation 값을 살펴봐야 한다.





안녕하세요!



+ Recent posts