Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Python vs Java @ PyCon Korea 2017

5,838 views

Published on

자바 개발자가 파이썬 개발을 배우면서 실무에 활용하고 집필을 하면서 겪었던 경험담 및 생각을 코드와 함께 풀어본다. 자바에 익숙한 사람이 파이썬을 배우고 있거나, 자바와 파이썬의 사이에서 고민을 했던 사람들에게 비교를 위한 기본 정보를 제공한다. 더 나아가 컴파일 언어와 스크립트 언어의 차이점, 개발 생산성을 측정할때 간과하는 컴파일 시간 및 순수 코딩 시간에 대한 통찰을 이끌 생각이다.

Published in: Software
  • Hello! Get Your Professional Job-Winning Resume Here - Check our website! https://vk.cc/818RFv
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

Python vs Java @ PyCon Korea 2017

  1. 1. 조인석 파이콘 코리아
  2. 2. ● (현) 두산중공업 소프트웨어 개발팀 소프트웨어 아키텍트 & 애자일 전도사 ● (전) 삼성SDS 방법론팀 / 프레임워크 팀 소프트웨어 아키텍트 ● (전) 현대정보기술 해외금융기술팀 소프트웨어 엔지니어 ● (전) 육군전산소 S/W 개발병 ● 컴퓨터공학 학사(2004) 조인석 (Chris Cho)
  3. 3. List of Contents ● ● ● ● ● ● ● ● ●
  4. 4. PyData at Strata
  5. 5. Python’s Spectrum of Users ※ ※
  6. 6. Type of language Python Source Code (.py) Interpreter Java Source Code (.java) Java Compiler Bytecode (.class) Bytecode Interpreter
  7. 7. How can I run? print("Hello, World!!") PYTHON
  8. 8. How can I run? print("Hello, World!!") PYTHON ⇒ 파이썬 번역기로 실행
  9. 9. How can I run? print("Hello, World!!") PYTHON ⇒ 출력 성공!!
  10. 10. How can I run? public class Hello { public static void main (String[] args) { System.out.println("Hello, World!!"); } } print("Hello, World!!") PYTHON
  11. 11. How can I run? public class Hello { public static void main (String[] args) { System.out.println("Hello, World!!"); } } print("Hello, World!!") PYTHON ⇒ 자바 컴파일러로 컴파일
  12. 12. How can I run? public class Hello { public static void main (String[] args) { System.out.println("Hello, World!!"); } } print("Hello, World!!") PYTHON ⇒ 바이트코드 클래스 파일 생성
  13. 13. How can I run? public class Hello { public static void main (String[] args) { System.out.println("Hello, World!!"); } } print("Hello, World!!") PYTHON ⇒ 바이트코드 번역기로 실행
  14. 14. How can I run? public class Hello { public static void main (String[] args) { System.out.println("Hello, World!!"); } } print("Hello, World!!") PYTHON ⇒ 출력 성공
  15. 15. How can I run? public class Hello { public static void main (String[] args) { System.out.println("Hello, World!!"); } } print("Hello, World!!") PYTHON 같은 결과
  16. 16. Hello, World!! print("Hello, World!!") public class Hello { public static void main (String[] args) { System.out.println("Hello, World!!"); } }
  17. 17. Hello, World!! - Python print("Hello, World!!") ⇒ 괄호안에 인자로 입력 받은 값을 출력하라
  18. 18. Hello, World!! - Python print("Hello, World!!") ⇒ 괄호안에 인자로 입력 받은 값을 출력하라 표준출력함수 출력대상
  19. 19. Hello, World!! - Java public class Hello { public static void main (String[] args) { System.out.println("Hello, World!!"); } } ⇒ 괄호안에 입력 받은 값을 출력하라
  20. 20. Hello, World!! - Java public class Hello { public static void main (String[] args) { System.out.println("Hello, World!!"); } } ⇒ ……. 괄호안에 입력 받은 값을 출력하라 ㅡㅡㅋ 접근제한자 클래스 클래스이름 정적함수 함수 반환값 Main 함수 문자열 배열 인자 표준 입/출력 클래스 출력 출력함수 개행포함 출력대상 명령어 종료 블록 시작 블록종료
  21. 21. split() text = "I love Python Programming" for word in text.split(): print(word) public class SplitText { public static void main (String[] args) { String text = "I love Python Programming"; for (String word: text.split(" ")) System.out.println(word); } }
  22. 22. split() - Python text = "I love Python Programming" for word in text.split(): print(word) ⇒ 변수 text 의 문자열을 문자 단위로 출력하라 루프문 시작 문자열 쪼갠 뒤 리스트 반환 반복문들여쓰기 문자 대입 코드 실행시 변수 타입 결정 (동적 타입)
  23. 23. split() - Java public class SplitText { public static void main (String[] args) { String text = "I love Python Programming"; for (String word: text.split(" ")) System.out.println(word); } } 문자열 타입 지정 (정적 타입) 문자열을 “ ” 를 구분자로 쪼갠 뒤 리스트 반환 문자 대입 괄호 주의 중괄호 생략 문자열 타입 지정 (정적 타입) 반복문 ⇒ 변수 text 의 문자열을 문자 단위로 출력하라
  24. 24. join() and range() "-".join(str(n) for n in range(100)) private static void join (int num) { for(int i = 0; i < num; i++) { StringBuilder sb = new StringBuilder(); for(int j: IntStream.range(0, 100).toArray()) { if(sb.length() == 0) sb.append(j); else sb.append("-").append(j); } } }
  25. 25. join() and range() - Python "-".join(str(n) for n in range(100)) ⇒ 0 ~ 99 숫자를 “-” 로 이어라 (0-1-2-3-4 … -97-98-99) 기준 문자열 타입 변환 (숫자 → 문자열) 인자값의 문자열과 결합 Comprehension 0~99 배열 반환정수 대입정수 대입
  26. 26. join() and range() - Java private static void join (int num) { for(int i = 0; i < num; i++) { StringBuilder sb = new StringBuilder(); for(int j: IntStream.range(0, 100).toArray()) { if(sb.length() == 0) sb.append(j); else sb.append("-").append(j); } } } Custom 함수 신규 문자열 생성 Helper 숫자배열 생성 문자열 붙이기 ⇒ 0 ~ 99 숫자를 “-” 로 이어라 (0-1-2-3-4 … -97-98-99) 문자열 붙이기문자열 붙이기 0~99 반환 정수 대입 조건문
  27. 27. Run Time Comparison code = '"-".join(str(n) for n in range(100))' print(timeit.timeit(code, number=10000)) public class JoinTest { public static void main (String[] args) { long start = System.nanoTime(); join(10000); long elapsed = System.nanoTime() - start; System.out.println(elapsed / 1000000000.0); } }
  28. 28. Run Time Comparison ⇒ 0.323 초 ⇒ 0.198 초(IntStream.range()) ⇒ 0.086 초 (Traditional Loop) x 1.6 x 2.3 x 3.8
  29. 29. Run Time Comparison ⇒ 0.323 초 ⇒ 0.198 초 ⇒ 0.086 초 (Traditional Loop) x 1.6 x 2.3 x 3.8 0.323 secSLOW? or ENOUGH?
  30. 30. Development Time Comparison Python Source Code (.py) Interpreter Java Source Code (.java) Java Compiler Bytecode (.class) Bytecode Interpreter
  31. 31. Development Time Comparison Python Source Code (.py) Interpreter Java Source Code (.java) Java Compiler Bytecode (.class) Bytecode Interpreter
  32. 32. Development Time Comparison Python Source Code (.py) Interpreter Java Source Code (.java) Java Compiler Bytecode (.class) Bytecode Interpreter
  33. 33. Conclusion Free-Style High-end
  34. 34. Conclusion Same Size
  35. 35. Conclusion Different Size
  36. 36. Conclusion Easier For wide usage Difficult For Race Different Size
  37. 37. Conclusion Build FAST VS Run FAST
  38. 38. Conclusion Build FAST VS Run FAST
  39. 39. ➔ E-mail : isi.cho@gmail.com ➔ Facebook : https://www.facebook.com/insuk.chris.cho ➔ Brunch : https://www.brunch.co.kr/@insuk ➔ Python Programming : https://www.facebook.com/pythonmento ➔ PyData Korea : https://www.facebook.com/groups/pydatakorea/ 첫 모임 오후 열린공간

×