G.frege를 너무 사랑하는 holy가...

python_summary0-About Python

[ document summary ]
    Title: python_summary0-About Python
    date: 2023 6.13
    content: python이란 무엇인가? python의 개념과 설정

programming이란

절차지향 언어 & 함수형언어

초창기 programming은 computer가 가진 계산능력을 사용하는데 focus를 두었다. 엄청나게 많은 data를 program에 입력하면, 함수를 이용해 간단히 처리할 수 있다. 이것이 program을 사용하는 이유이자 각광받은 이유다. 그래서 초창기 언어들은 현실세계의 data를 programming 세계의 data로 변환하고 그 대량의 data를 함수를 사용해서 간단히 해결했다. 인간이 하면 오랜 시간이 걸릴 수 있는 데이터 처리를 너무나도 간단하게 해결했다. 여기에서 bit operator에 예제 를 살펴봐라.

절차지향 언어와 함수형 언어는 수학처럼 모두 함수의 강력한 힘을 사용한다. 그리고 현실세계의 문제를 풀기 위해서, 문제의 data를 primitive data로 나타낸다. 수학과 비슷하다. 문제에 사용되는 data를 수로 나타내서 인간이 하지 못하는 대용량의 데이터 처리와 많은 계산들을 가능하게 해준거처럼 primitive data로 표현해서 계산을 한다. 예를 들어서, 한반 학생들의 몸무게를 다 더한다고 할때, 언어별로 data를 어떻게 표현하는지 보자. oop에서는 학생들을 객체로 simulate한다. 반면 절차지향언어와 functional language는 학생의 몸무게를 그냥 숫자로 나타내면 되는 것이다. 수학도 마찬가지다. 숫자만 보면 이것이 학생의 몸무게를 나타내는지, 무엇을 나타내는지 잘 모른다. 그러나 계산은 간단하다. 그러면 절차지향언어와 functional language로 무엇을 기준으로 나누어진건가? 절차지향의 언어는 속도를 위해서 computer라는 전자기 device에 맞춰서 만들어졌고, functional language는 인간의 생각, 수학적 방식을 그대로 사용하게 만들어졌다. focus하는 대상이 다른것이다.

객체지향 언어

위에서 설명이 있긴 한데, programming은 현실세계의 문제를 해결하기 위해서, data를 언어내에서 표현해야 하는데, 숫자나 primitive data로 간략하게 나타냈었다. 기존의 수학이나 절차형,functional language에서 숫자나 primitive data로 나타냈는데, 그것은 많은것을 생략한 형태다. 하지만 현실세계의 data를 단순한 programming 내의 숫자나 primitive data로 나타내는건, 단순화해서 계산을 쉽게 하기 위함이다. 그런데 현실 세계의 문제를 너무 쉽게 얘기하는건 아닐까? 현실 세계의 data는 매우 복잡하다. 단순한 숫자,문자,비트로 표현하기에는 한계가 있다. 계산만 생각해서 단순하게 표현하지 않고 현실의 data와 비슷하게 simulate하려는 시도가 일어났다. 왜냐면 program이 계산만을 programming이 하는게 아니기 때문이다. 시스템을 만들때도 programming이 사용된다. 은행시스템, 기업의 인사관리 시스템…이와 같은 경우는 대용량의 data처리뿐만 아니라 어떤 구조를 표현하고 구조간의 관계를 나타내야한다. 따라서 현실 세계의 data를 구체적으로 simulate할 필요가 있다. 그래서 structure이라는 구조화된 data가 나왔고, 여기서 진화해서 구조화된 data를 처리하는, 즉, 구조에 맞춰 처리하는 method가 생겼다. 이런 형태는 class형태로 만들어진다. class를 사용하는 programming언어를 oop라고 했다. oop에선 세상의 모든것은 객체로 표현될 수 있다는 철학을 가지고 있다. 세상의 모든것을 객체로 표현한다는 것은 세상을 simulation할 수 있다는 말이다. 그리고 세상을 simulation하면, 세상의 모든 문제를 해결하는데 programming언어를 사용할 수 있다는 것이다. 세상의 모든 문제는 대용량의 data를 어떻게 처리하느냐?만 있는 것이 아니다. 인간이 어려워 하는 대용량 데이터의 계산 문제뿐 아니라 모든 형태의 문제를 현실과 똑같이 simulation해서 현실 문제를 해결하는데 사용 될 수 있다는 것이다.

python이란?

python은 함수형언어가 아니라, 객체 지향 언어 다. python은 모든 것을 객체로 바라본다. 따라서 우리도, python 코드의 모든것을 객체로 생각하고, 객체로 해석해야 한다.

python의 개발 환경

python을 사용하려면 setting이 필요하다. computer에 전원을 넣고 바로 python 코드를 작성하고 실행하는 그림을 상상하지 말자. 코딩하는 방법은 여러가지다. 코딩할 수 있는 다양한 editor가 존재하고, 그 많은 editor에서 선택을 해야한다. 나는 emacs를 선택했다. emacs를 선택해서 끝나는게 아니다. 다양한 방법이 존재한다. elpy를 사용해서 코딩할수도 있고, lsp로 코딩할수도 있고, jupyter notebook으로 코딩할수도 있고, google colab과 연결해서 사용할 수도 있다. 짜증나지만, 많은 방법이 있다. 여튼 중요한건 난 emacs를 사용한다는 것이고 emacs를 사용한다는 것은, everything is possbile 이다. 한계는 없다.

emacs 설정

python code를 작성하는 editor로 emacs를 사용한다. emacs에서 python을 작성하기위한 setting이 필요하다. lsp를 사용해서 속시원하게 사용하는게 추천되지만, 나는 2014년 맥북 사용자다. 분수에 맞게 코딩을 하자. jupyter notebook이나 google colab을 사용해서 ipython interpreter(kernel)을 이용하려면 다음 설정을 참고하자. anaconda로 작성하려면 여기(from here) 를 참조한다. 그래도 지금 대세인 lsp를 사용하겠다고 한다면 여기(from here) 을 참조해라.

python으로 프로그램 짜는법

일상생활의 문제들을 python으로 해결할 때 고려해야 할게 있다. 함수형으로 문제를 해결할 것인가? 아니면 oop로 문제를 해결할 것인가?인데, 이것은 문제를 보면 감이 잡힌다. 문제의 data를 확인해보자. 우리가 계산하려고 하는 data가 primitive data로 표현이 가능할 경우와 그렇지 않고 data를 구조화해야(simulate) 할지를 확인하자. 예를 들어서 30명의 고객들이 있고 고객들이 가진 은행계좌가 3개가 있고,각각의 고객들이 가진 재산을 합산해서 보여줘라 같은 문제의 경우 oop형태로 만들 필요가 없다. 여기서 data는 고객들의 은행계좌에 있는 돈들이고 그 돈들의 합이기 때문에, primitive data로 표현이 되기 때문이다. 그런데 고객과 은행계좌를 객체로 만들고 고객의 이름, 고객의 나이, 은행의 이름, 은행의 위치같은 모든 정보가 필요한 경우가 있을 수 있다. 은행과 고객의 정보를 출력한다던지…이런 경우는 data를 객체로 simulate해야 한다. 그래서 oop로 짜야 한다. coding test에서 다루는 문제들은 대부분 oop문제가 아니다. primitive한 데이터 처리고, 이를 어떻게 효율적으로 처리하냐?는 알고리즘 문제이기 때문이다.