Download - Python vs Java @ PyCon Korea 2017
![Page 1: Python vs Java @ PyCon Korea 2017](https://reader034.vdocuments.mx/reader034/viewer/2022050613/5a64a7817f8b9a2c568b6afb/html5/thumbnails/1.jpg)
조인석
파이콘코리아
![Page 2: Python vs Java @ PyCon Korea 2017](https://reader034.vdocuments.mx/reader034/viewer/2022050613/5a64a7817f8b9a2c568b6afb/html5/thumbnails/2.jpg)
● (현) 두산중공업 소프트웨어 개발팀 소프트웨어 아키텍트 & 애자일 전도사
● (전) 삼성SDS 방법론팀 / 프레임워크 팀 소프트웨어 아키텍트
● (전) 현대정보기술 해외금융기술팀 소프트웨어 엔지니어
● (전) 육군전산소 S/W 개발병
● 컴퓨터공학 학사(2004)
조인석 (Chris Cho)
![Page 3: Python vs Java @ PyCon Korea 2017](https://reader034.vdocuments.mx/reader034/viewer/2022050613/5a64a7817f8b9a2c568b6afb/html5/thumbnails/3.jpg)
List of Contents●●●●●●●●●
![Page 4: Python vs Java @ PyCon Korea 2017](https://reader034.vdocuments.mx/reader034/viewer/2022050613/5a64a7817f8b9a2c568b6afb/html5/thumbnails/4.jpg)
PyData at Strata
![Page 5: Python vs Java @ PyCon Korea 2017](https://reader034.vdocuments.mx/reader034/viewer/2022050613/5a64a7817f8b9a2c568b6afb/html5/thumbnails/5.jpg)
Python’s Spectrum of Users
※
※
![Page 6: Python vs Java @ PyCon Korea 2017](https://reader034.vdocuments.mx/reader034/viewer/2022050613/5a64a7817f8b9a2c568b6afb/html5/thumbnails/6.jpg)
Type of language
Python Source Code (.py)
Interpreter
Java Source Code (.java)
JavaCompiler
Bytecode (.class)
BytecodeInterpreter
![Page 7: Python vs Java @ PyCon Korea 2017](https://reader034.vdocuments.mx/reader034/viewer/2022050613/5a64a7817f8b9a2c568b6afb/html5/thumbnails/7.jpg)
How can I run?
print("Hello, World!!")PYTHON
![Page 8: Python vs Java @ PyCon Korea 2017](https://reader034.vdocuments.mx/reader034/viewer/2022050613/5a64a7817f8b9a2c568b6afb/html5/thumbnails/8.jpg)
How can I run?
print("Hello, World!!")PYTHON
⇒ 파이썬 번역기로 실행
![Page 9: Python vs Java @ PyCon Korea 2017](https://reader034.vdocuments.mx/reader034/viewer/2022050613/5a64a7817f8b9a2c568b6afb/html5/thumbnails/9.jpg)
How can I run?
print("Hello, World!!")PYTHON
⇒ 출력 성공!!
![Page 10: Python vs Java @ PyCon Korea 2017](https://reader034.vdocuments.mx/reader034/viewer/2022050613/5a64a7817f8b9a2c568b6afb/html5/thumbnails/10.jpg)
How can I run?public class Hello { public static void main (String[] args) { System.out.println("Hello, World!!"); }}
print("Hello, World!!")PYTHON
![Page 11: Python vs Java @ PyCon Korea 2017](https://reader034.vdocuments.mx/reader034/viewer/2022050613/5a64a7817f8b9a2c568b6afb/html5/thumbnails/11.jpg)
How can I run?public class Hello { public static void main (String[] args) { System.out.println("Hello, World!!"); }}
print("Hello, World!!")PYTHON ⇒ 자바 컴파일러로 컴파일
![Page 12: Python vs Java @ PyCon Korea 2017](https://reader034.vdocuments.mx/reader034/viewer/2022050613/5a64a7817f8b9a2c568b6afb/html5/thumbnails/12.jpg)
How can I run?public class Hello { public static void main (String[] args) { System.out.println("Hello, World!!"); }}
print("Hello, World!!")PYTHON
⇒ 바이트코드 클래스 파일 생성
![Page 13: Python vs Java @ PyCon Korea 2017](https://reader034.vdocuments.mx/reader034/viewer/2022050613/5a64a7817f8b9a2c568b6afb/html5/thumbnails/13.jpg)
How can I run?public class Hello { public static void main (String[] args) { System.out.println("Hello, World!!"); }}
print("Hello, World!!")PYTHON
⇒ 바이트코드 번역기로 실행
![Page 14: Python vs Java @ PyCon Korea 2017](https://reader034.vdocuments.mx/reader034/viewer/2022050613/5a64a7817f8b9a2c568b6afb/html5/thumbnails/14.jpg)
How can I run?public class Hello { public static void main (String[] args) { System.out.println("Hello, World!!"); }}
print("Hello, World!!")PYTHON
⇒ 출력 성공
![Page 15: Python vs Java @ PyCon Korea 2017](https://reader034.vdocuments.mx/reader034/viewer/2022050613/5a64a7817f8b9a2c568b6afb/html5/thumbnails/15.jpg)
How can I run?public class Hello { public static void main (String[] args) { System.out.println("Hello, World!!"); }}
print("Hello, World!!")PYTHON
같은 결과
![Page 16: Python vs Java @ PyCon Korea 2017](https://reader034.vdocuments.mx/reader034/viewer/2022050613/5a64a7817f8b9a2c568b6afb/html5/thumbnails/16.jpg)
Hello, World!!
print("Hello, World!!")
public class Hello { public static void main (String[] args) { System.out.println("Hello, World!!"); }}
![Page 17: Python vs Java @ PyCon Korea 2017](https://reader034.vdocuments.mx/reader034/viewer/2022050613/5a64a7817f8b9a2c568b6afb/html5/thumbnails/17.jpg)
Hello, World!! - Python
print("Hello, World!!")
⇒ 괄호안에 인자로 입력 받은 값을 출력하라
![Page 18: Python vs Java @ PyCon Korea 2017](https://reader034.vdocuments.mx/reader034/viewer/2022050613/5a64a7817f8b9a2c568b6afb/html5/thumbnails/18.jpg)
Hello, World!! - Python
print("Hello, World!!")
⇒ 괄호안에 인자로 입력 받은 값을 출력하라
표준출력함수 출력대상
![Page 19: Python vs Java @ PyCon Korea 2017](https://reader034.vdocuments.mx/reader034/viewer/2022050613/5a64a7817f8b9a2c568b6afb/html5/thumbnails/19.jpg)
Hello, World!! - Java
public class Hello { public static void main (String[] args) { System.out.println("Hello, World!!"); }}
⇒ 괄호안에 입력 받은 값을 출력하라
![Page 20: Python vs Java @ PyCon Korea 2017](https://reader034.vdocuments.mx/reader034/viewer/2022050613/5a64a7817f8b9a2c568b6afb/html5/thumbnails/20.jpg)
Hello, World!! - Java
public class Hello { public static void main (String[] args) { System.out.println("Hello, World!!"); }}
⇒ ……. 괄호안에 입력 받은 값을 출력하라 ㅡㅡㅋ
접근제한자 클래스 클래스이름 정적함수 함수 반환값 Main 함수
문자열 배열 인자
표준 입/출력 클래스
출력 출력함수 개행포함 출력대상 명령어 종료
블록시작
블록종료
![Page 21: Python vs Java @ PyCon Korea 2017](https://reader034.vdocuments.mx/reader034/viewer/2022050613/5a64a7817f8b9a2c568b6afb/html5/thumbnails/21.jpg)
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); }}
![Page 22: Python vs Java @ PyCon Korea 2017](https://reader034.vdocuments.mx/reader034/viewer/2022050613/5a64a7817f8b9a2c568b6afb/html5/thumbnails/22.jpg)
split() - Pythontext = "I love Python Programming"for word in text.split(): print(word)
⇒ 변수 text 의 문자열을 문자 단위로 출력하라
루프문 시작
문자열 쪼갠 뒤 리스트 반환
반복문들여쓰기 문자 대입
코드 실행시 변수 타입 결정 (동적 타입)
![Page 23: Python vs Java @ PyCon Korea 2017](https://reader034.vdocuments.mx/reader034/viewer/2022050613/5a64a7817f8b9a2c568b6afb/html5/thumbnails/23.jpg)
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 의 문자열을 문자 단위로 출력하라
![Page 24: Python vs Java @ PyCon Korea 2017](https://reader034.vdocuments.mx/reader034/viewer/2022050613/5a64a7817f8b9a2c568b6afb/html5/thumbnails/24.jpg)
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); } }}
![Page 25: Python vs Java @ PyCon Korea 2017](https://reader034.vdocuments.mx/reader034/viewer/2022050613/5a64a7817f8b9a2c568b6afb/html5/thumbnails/25.jpg)
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 배열 반환정수 대입정수 대입
![Page 26: Python vs Java @ PyCon Korea 2017](https://reader034.vdocuments.mx/reader034/viewer/2022050613/5a64a7817f8b9a2c568b6afb/html5/thumbnails/26.jpg)
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 반환정수 대입
조건문
![Page 27: Python vs Java @ PyCon Korea 2017](https://reader034.vdocuments.mx/reader034/viewer/2022050613/5a64a7817f8b9a2c568b6afb/html5/thumbnails/27.jpg)
Run Time Comparisoncode = '"-".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); }}
![Page 28: Python vs Java @ PyCon Korea 2017](https://reader034.vdocuments.mx/reader034/viewer/2022050613/5a64a7817f8b9a2c568b6afb/html5/thumbnails/28.jpg)
Run Time Comparison
⇒ 0.323 초
⇒ 0.198 초(IntStream.range())
⇒ 0.086 초 (Traditional Loop)
x 1.6
x 2.3
x 3.8
![Page 29: Python vs Java @ PyCon Korea 2017](https://reader034.vdocuments.mx/reader034/viewer/2022050613/5a64a7817f8b9a2c568b6afb/html5/thumbnails/29.jpg)
Run Time Comparison
⇒ 0.323 초
⇒ 0.198 초
⇒ 0.086 초 (Traditional Loop)
x 1.6
x 2.3
x 3.80.323 secSLOW? or ENOUGH?
![Page 30: Python vs Java @ PyCon Korea 2017](https://reader034.vdocuments.mx/reader034/viewer/2022050613/5a64a7817f8b9a2c568b6afb/html5/thumbnails/30.jpg)
Development Time Comparison
Python Source Code (.py)
Interpreter
Java Source Code (.java)
JavaCompiler
Bytecode (.class)
BytecodeInterpreter
![Page 31: Python vs Java @ PyCon Korea 2017](https://reader034.vdocuments.mx/reader034/viewer/2022050613/5a64a7817f8b9a2c568b6afb/html5/thumbnails/31.jpg)
Development Time Comparison
Python Source Code (.py)
Interpreter
Java Source Code (.java)
JavaCompiler
Bytecode (.class)
BytecodeInterpreter
![Page 32: Python vs Java @ PyCon Korea 2017](https://reader034.vdocuments.mx/reader034/viewer/2022050613/5a64a7817f8b9a2c568b6afb/html5/thumbnails/32.jpg)
Development Time Comparison
Python Source Code (.py)
Interpreter
Java Source Code (.java)
JavaCompiler
Bytecode (.class)
BytecodeInterpreter
![Page 33: Python vs Java @ PyCon Korea 2017](https://reader034.vdocuments.mx/reader034/viewer/2022050613/5a64a7817f8b9a2c568b6afb/html5/thumbnails/33.jpg)
Conclusion
Free-Style High-end
![Page 34: Python vs Java @ PyCon Korea 2017](https://reader034.vdocuments.mx/reader034/viewer/2022050613/5a64a7817f8b9a2c568b6afb/html5/thumbnails/34.jpg)
ConclusionSame Size
![Page 35: Python vs Java @ PyCon Korea 2017](https://reader034.vdocuments.mx/reader034/viewer/2022050613/5a64a7817f8b9a2c568b6afb/html5/thumbnails/35.jpg)
ConclusionDifferent Size
![Page 36: Python vs Java @ PyCon Korea 2017](https://reader034.vdocuments.mx/reader034/viewer/2022050613/5a64a7817f8b9a2c568b6afb/html5/thumbnails/36.jpg)
Conclusion
EasierFor wide usage
DifficultFor Race
Different Size
![Page 37: Python vs Java @ PyCon Korea 2017](https://reader034.vdocuments.mx/reader034/viewer/2022050613/5a64a7817f8b9a2c568b6afb/html5/thumbnails/37.jpg)
Conclusion
Build FASTVS
Run FAST
![Page 38: Python vs Java @ PyCon Korea 2017](https://reader034.vdocuments.mx/reader034/viewer/2022050613/5a64a7817f8b9a2c568b6afb/html5/thumbnails/38.jpg)
Conclusion
Build FASTVS
Run FAST
![Page 39: Python vs Java @ PyCon Korea 2017](https://reader034.vdocuments.mx/reader034/viewer/2022050613/5a64a7817f8b9a2c568b6afb/html5/thumbnails/39.jpg)
➔ E-mail : [email protected]➔ 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/
첫모임오후 열린공간