39
조인석 파이콘 코리아

Python vs Java @ PyCon Korea 2017

Embed Size (px)

Citation preview

Page 1: Python vs Java @ PyCon Korea 2017

조인석

파이콘코리아

Page 2: Python vs Java @ PyCon Korea 2017

● (현) 두산중공업 소프트웨어 개발팀 소프트웨어 아키텍트 & 애자일 전도사

● (전) 삼성SDS 방법론팀 / 프레임워크 팀 소프트웨어 아키텍트

● (전) 현대정보기술 해외금융기술팀 소프트웨어 엔지니어

● (전) 육군전산소 S/W 개발병

● 컴퓨터공학 학사(2004)

조인석 (Chris Cho)

Page 3: Python vs Java @ PyCon Korea 2017

List of Contents●●●●●●●●●

Page 4: Python vs Java @ PyCon Korea 2017

PyData at Strata

Page 6: Python vs Java @ PyCon Korea 2017

Type of language

Python Source Code (.py)

Interpreter

Java Source Code (.java)

JavaCompiler

Bytecode (.class)

BytecodeInterpreter

Page 7: Python vs Java @ PyCon Korea 2017

How can I run?

print("Hello, World!!")PYTHON

Page 8: Python vs Java @ PyCon Korea 2017

How can I run?

print("Hello, World!!")PYTHON

⇒ 파이썬 번역기로 실행

Page 9: Python vs Java @ PyCon Korea 2017

How can I run?

print("Hello, World!!")PYTHON

⇒ 출력 성공!!

Page 10: Python vs Java @ PyCon Korea 2017

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

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

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

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

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

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

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

Hello, World!! - Python

print("Hello, World!!")

⇒ 괄호안에 인자로 입력 받은 값을 출력하라

Page 18: Python vs Java @ PyCon Korea 2017

Hello, World!! - Python

print("Hello, World!!")

⇒ 괄호안에 인자로 입력 받은 값을 출력하라

표준출력함수 출력대상

Page 19: Python vs Java @ PyCon Korea 2017

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

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

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

split() - Pythontext = "I love Python Programming"for word in text.split(): print(word)

⇒ 변수 text 의 문자열을 문자 단위로 출력하라

루프문 시작

문자열 쪼갠 뒤 리스트 반환

반복문들여쓰기 문자 대입

코드 실행시 변수 타입 결정 (동적 타입)

Page 23: Python vs Java @ PyCon Korea 2017

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

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

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

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

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

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

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

Development Time Comparison

Python Source Code (.py)

Interpreter

Java Source Code (.java)

JavaCompiler

Bytecode (.class)

BytecodeInterpreter

Page 31: Python vs Java @ PyCon Korea 2017

Development Time Comparison

Python Source Code (.py)

Interpreter

Java Source Code (.java)

JavaCompiler

Bytecode (.class)

BytecodeInterpreter

Page 32: Python vs Java @ PyCon Korea 2017

Development Time Comparison

Python Source Code (.py)

Interpreter

Java Source Code (.java)

JavaCompiler

Bytecode (.class)

BytecodeInterpreter

Page 33: Python vs Java @ PyCon Korea 2017

Conclusion

Free-Style High-end

Page 34: Python vs Java @ PyCon Korea 2017

ConclusionSame Size

Page 35: Python vs Java @ PyCon Korea 2017

ConclusionDifferent Size

Page 36: Python vs Java @ PyCon Korea 2017

Conclusion

EasierFor wide usage

DifficultFor Race

Different Size

Page 37: Python vs Java @ PyCon Korea 2017

Conclusion

Build FASTVS

Run FAST

Page 38: Python vs Java @ PyCon Korea 2017

Conclusion

Build FASTVS

Run FAST

Page 39: Python vs Java @ PyCon Korea 2017

➔ 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/

첫모임오후 열린공간