본문 바로가기

~ 공부 ~/Computer

파이썬, 객체지향, 유니티

흠.... 일단 우선 제가 하려고 했던 파이썬 강의는 못하게 됬습니다. 취성패하고 다른 기준하고 좀 엉켜서 자격이 안되게 됬네요.  일단 제가 알아본 다른 국비과정에 합격이 된다면 10말부터는 6개월간 게임 프로그래밍을 하겠네요. 그전까지는 유니티 특강 하고 혼자 공부하게 됬습니다. 그래도 새로운 언어 배우면서 생각이 늘어났고 저번 react, redux 글같은거 쓰면서 더욱 정리가 되는 느낌입니다. 지금 그래서 어떻게 보면 좋을수도 있고 한 상황이네요. 지금 혼자 공부해야 될게 산더미 처럼 늘어났거든요..   


1. 일단 일주일간 파이썬 강의 들으면서(사실 거의 많은 부분을 책을 봤습니다... 강사님 ㅈㅅ ㅠ.ㅠ)  일단 본건 thinkpython2 입니다. 책읽다가 강의에서 문제 풀다가 책보다가 뭐하다가 해서 이도저도 안되는 상황이 됬지만 일단은 잘 모르는거는 걍대충 스킵하고 일단 한번은 읽은 상태입니다. Named Tuple 이나 defaultDict 등등 몇몇개는 그냥 잘 모르겠어서 거의 스킵했습니다. 다른책 보거나 하면서 더 봐야합니다.     

     사실 지금 그냥 진짜 훑은 정도여서 개념 정리가 안됬는데 느낌점으로는... 

  • Tuple이라는 개념은 함수형 프로그래밍의 불변성을 가져온게 맞나요? 하튼 immutable하다는걸 보면서 '오.. 여기는 기본으로 있구나..' 하고 느꼈습니다. 
  • List Comprehension은 보면서 '오... 이것도 higher order function이구나 하면서 자바스크립트의 map과 arrow function같은게 생각 났습니다' 처음엔 모양이 마음에 안들었는데 몇번 보다보니 더 좋은것 같기도 하고...  아직 맛만봐서 잘 모르겠습니다. 
  • 개인적으론 for loop는 약간 불편한거 같에요.. 저같은 경우는 for(let i = 0 ; i < 10 ; i++){  }  이더 편한거 같네요.(자바스크립트에서도 약간 그렇게 느꼈습니다..) 하지만 이것도 함수형 프로그래밍의 느낌이 있는것 같습니다. (아직 함수형 언어적 사고가 많이 부족하다는 거죠)   

  • 함수 안에서 밖의 변수로 뭘 하고 싶을때는 global로 explicit(명시적)으로 써주는게 아주 좋은것 같습니다. 이것도 함수형 언어의 이론이 들어가서 이렇게 된것 같네요. 아예 할당을 못하게 하는게 아니라 잘 관리 할수 있도록 말이죠.. 굉장히 좋다고 느꼈습니다. 내가 함수안의 걸 바꾸는지 바깥의 걸 바꾸는지 보기에 좋은것 같습니다. 

  • 함수에서 인자들을 넣을때까 좀 다른거 같더라고요. 일단 기본적으로 초기화 기능이 있는거 같고(제가 알기론 es6에서 생긴걸로 아는데 말이죠..) 순서나 def exampleFunction (하나="어쩌꾸", 둘="저쩌구" ): 이렇게 할수도 있고 순서도 좀 연관있고 하는것 같네요. 이부분도 이런게 있구나 하고 걍 넘겼습니다. 나중에 다시 공부해야 겠죠.

  • indentation 은 좋은것 같기도 하네요. 일단 if/else if/else라고 할수있는 if/elif/else 는 훨씬 보기 좋은것 같아요. 뭐 별 중요한건 아니고....

  • 또 중요한걸로는 함수의 사용 방식이랄까요. 가령 자바스크립트는 "just an example".length  이렇게 문자열 뒤에 dot notation으로 접근하는데 여기는 아예 함수로 하더라고요.(물론 자바스크립트도 그런게 있지만)  len("just an example") 이렇게요 물론 2하고 3하고 다른것도 있는데(저는 3으로 해서 print도 함수여서 print("whatever string")이렇게 배웠습니다. 나중에 제대로 정리 해야할거는  저렇게 함수사용해서 하는것들 하고 dot notation으로 하는것들 그리고 __add__, __doc__ 이런것들의 차이점 등을 확실 공부해야 할것 같습니다. 뒤에 보니까 연산자 오버로딩과 연관된거 같은데 말이죠..(__add__ 요것들은)  정확하진 않습니다. 

  • 문자열 같은경우 원래 es6의 template literal이나 C언어의 암호같으것들... %d(기억도 안난요 ) 과 비교하면서 봤습니다. 파이썬은 C언어 같은 방식인데 저것도 뭐 지금은 보니까 나름 괜찮아 보이는데 template literal이 더 보기 편한것 같기도 하고... 뭐 별다른거는 없지만요. 실수를 줄이려면 es6위에 지정한 변수값을 가져오는 것보다 C처럼 바로 문자열 뒤에 콤마 찍고 보여주는게 더 좋을수도 있을거 같습니다

  • 좀 헷갈리는 걸로는 자바스크립트하고 비교 하다보니 헷갈리는게 dot notation이나 함수나 뭘 썼을때 복사가 된후에 값이 변하느냐(원래값은 변하지 않고) 아니면 원래것을 바꾸냐 이게 좀 헷갈리네요. 함수형 언어의 개념을 많이 가져왔으면 다 그냥 복사하고 할것이지 또 그렇지 않은게 많은것 같더라고요.

  • 파일도 읽고 쓸수 있고. import/from  으로 모듈 불러오는거 같고(es6 같은것들 이겠죠)


일단 파이썬은 이랬습니다. 앞으로 해야할 목록으로는

한글책들 보기(점프투 파이썬 등등), 다른 원서들 더 보기, Mooc 강의 듣기, django 제대로 해보기, numpy 같은거 라이브러리들 몇개 해보기, 웹크롤링 해보기, 머신러닝도 해보기(Mooc강의도 듣기), 딥러닝도 해보기(이것도 강의 들으면서), 자동화 같은것들도 해보기.       이렇게 할것들만 쌓여 가네요.... ㄷㄷㄷㄷ 


2. 객체지향 프로그래밍
  요건 머시냐 파이썬 하면서 당연히 클래스가 나왔습니다. ㄷㄷㄷ  그리고 유니티 강의에서도 당연히 클래스가 살짝 나왔죠. 그러다가 갑자기 객체 지향의 감을 잡은것 같아서 제대로 알기 위해서 옛날에 본 뇌자극C++을 다시 봤습니다 객체지향 부분만요(포인트 관련은 빼고요 이것까지 하면 시간이... 이미 객체지향만 170페이지여서ㅠ.ㅠ )  지금은 개념으로 또 한단계 더 이해가 된것 같습니다. 지금에서야 객체지향에 대해서 이해한듯한 느낌입니다. 자바스크립트에서도 나왔지만 무서워서 잘 안했습니다..  this 때문도 그렇고 es6서 나온 class는 대충 보니 어려운거 같아서 말이죠. 이제 봐야하긴 하는데 대충 생각해봤을때 훨씬 이해가 잘될것 같습니다.  class나 extend 쓰는거나 constructor에 super 넣는다던가 static 이라던가 이제 다시보면 이해 할지도 모르겠네요.   지금은 뇌자극을 보고나니 이해가 좀 됩니다...개념적으로요. 유니티의 component 개념과 Composition over Inheritance 등등을 보면서 하니 더욱 정리가 된것 같습니다. 역시 객체지향은 게임을 통해 배우는게 좋은것 같습니다.  

3. 유니티(게임 프로그래밍)
  화/목 갔다 왔는데 7호선 장난 아니데요. 거의 2호선급으로 사람 많더라고요. 죽는줄. 일단 강사님 설명이 아주 괜찮은것 같습니다. 막 그렇게 소통하면서 하는 강의는 아닌데 설명은 아주 잘 하시는 것 같습니다. 강의내내 배우는 것들과 컴포넌트형 프로그래밍에 대해서 계속 생각을 해봤고 게임 루프라고 해야하나 요것들도 더 보고 하니 전반적인 큰개념은 약간 더 좋아진거 같습니다. 아 기술적으로 배운건 별로 없습니다. 화요일은 유니티 깔고, 레이아웃 바꾸고, 크기, 회전, 게임오브젝트 만들기 등등 그런거 했고 목요일은 큐브로 비행기 모양 만들고 빈 오브젝트 위치들 잡고 거기서 총알쏘게하고 비행기 키보드로 조작하는거 했습니다. 옛날에 튜토리얼 한건데 지금 제 상태에서(객체지향, 이것저것 잡생각) 보니 아주 새롭게 다가 왔습니다.(개념적으로는 굉장히 도움이 됬습니다) 
  C#은 어떻게 되는지도 보고. 일단 옛날에는 "아니 자바스크립트는 var만 쓰면 되는데(현재는 const, let이 있지만) C는 무슨 ㅅㅂ 변수 하나 만드는데 int, double 뭐 이딴게 이렇게 많아" 이렇게 생각했습니다. 또한 함수도 인자 넣을떄 "자바스크립트는 그냥 넣으면 되는데 무슨 여기는 인자 앞에 타입도 다 써줘야하고" 생각 했지만 현재는 생각이 좀 바껴서 저렇게 strict하게 더 좋지 않나라는 생각이듭니다. 또한 문자열은 큰따옴표여야 하는구나 라는 생각을 했습니다. 포인터나 메모리도 비슷한게 옛날에 C/C++ 할때 메모리 나오고해서 멘붕 했었습니다. "아니 내가 이딴걸 해야돼? 이건 컴퓨터가 알아서 해줘야 하는거 아니야? " 이런생각을 했습니다. 사실 지금도 그렇게 생각은 하지만... 일단 지금 당장 포인터를 다시 까보고 싶지만 2달후에 하는걸로 하죠.. 지금은 당장 필요없으니


하튼 요 1주일은 이렇게 흘러갔습니다. 파이썬은 konlp나 nltk나 써보고 싶어서였는데 일단 빨랑 연습해봐야 할것 같네요. 아 그리고 제가 파이썬 강의 단톡방에는 살아있어서 강의 진도대로 크롤링도 좀 해볼까 합니다. 남한테 알려주기가 정말 좋은것 같에요 진짜로.. 강의에서 다른 수강생분들이 질문하는걸 내가 대답하려고 생각하니까 정말 많은걸 생각하게 됬습니다. 그리고 모르는거 있으면 선생님한테도 나중에 질문도 해야하고 말이죠..