Python vs Java @ PyCon Korea 2017

  • View
    4.599

  • Download
    0

  • Category

    Software

Preview:

Citation preview

조인석

파이콘코리아

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

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

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

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

● 컴퓨터공학 학사(2004)

조인석 (Chris Cho)

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

PyData at Strata

Type of language

Python Source Code (.py)

Interpreter

Java Source Code (.java)

JavaCompiler

Bytecode (.class)

BytecodeInterpreter

How can I run?

print("Hello, World!!")PYTHON

How can I run?

print("Hello, World!!")PYTHON

⇒ 파이썬 번역기로 실행

How can I run?

print("Hello, World!!")PYTHON

⇒ 출력 성공!!

How can I run?public class Hello { public static void main (String[] args) { System.out.println("Hello, World!!"); }}

print("Hello, World!!")PYTHON

How can I run?public class Hello { public static void main (String[] args) { System.out.println("Hello, World!!"); }}

print("Hello, World!!")PYTHON ⇒ 자바 컴파일러로 컴파일

How can I run?public class Hello { public static void main (String[] args) { System.out.println("Hello, World!!"); }}

print("Hello, World!!")PYTHON

⇒ 바이트코드 클래스 파일 생성

How can I run?public class Hello { public static void main (String[] args) { System.out.println("Hello, World!!"); }}

print("Hello, World!!")PYTHON

⇒ 바이트코드 번역기로 실행

How can I run?public class Hello { public static void main (String[] args) { System.out.println("Hello, World!!"); }}

print("Hello, World!!")PYTHON

⇒ 출력 성공

How can I run?public class Hello { public static void main (String[] args) { System.out.println("Hello, World!!"); }}

print("Hello, World!!")PYTHON

같은 결과

Hello, World!!

print("Hello, World!!")

public class Hello { public static void main (String[] args) { System.out.println("Hello, World!!"); }}

Hello, World!! - Python

print("Hello, World!!")

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

Hello, World!! - Python

print("Hello, World!!")

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

표준출력함수 출력대상

Hello, World!! - Java

public class Hello { public static void main (String[] args) { System.out.println("Hello, World!!"); }}

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

Hello, World!! - Java

public class Hello { public static void main (String[] args) { System.out.println("Hello, World!!"); }}

⇒ ……. 괄호안에 입력 받은 값을 출력하라 ㅡㅡㅋ

접근제한자 클래스 클래스이름 정적함수 함수 반환값 Main 함수

문자열 배열 인자

표준 입/출력 클래스

출력 출력함수 개행포함 출력대상 명령어 종료

블록시작

블록종료

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); }}

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

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

루프문 시작

문자열 쪼갠 뒤 리스트 반환

반복문들여쓰기 문자 대입

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

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 의 문자열을 문자 단위로 출력하라

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); } }}

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 배열 반환정수 대입정수 대입

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 반환정수 대입

조건문

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); }}

Run Time Comparison

⇒ 0.323 초

⇒ 0.198 초(IntStream.range())

⇒ 0.086 초 (Traditional Loop)

x 1.6

x 2.3

x 3.8

Run Time Comparison

⇒ 0.323 초

⇒ 0.198 초

⇒ 0.086 초 (Traditional Loop)

x 1.6

x 2.3

x 3.80.323 secSLOW? or ENOUGH?

Development Time Comparison

Python Source Code (.py)

Interpreter

Java Source Code (.java)

JavaCompiler

Bytecode (.class)

BytecodeInterpreter

Development Time Comparison

Python Source Code (.py)

Interpreter

Java Source Code (.java)

JavaCompiler

Bytecode (.class)

BytecodeInterpreter

Development Time Comparison

Python Source Code (.py)

Interpreter

Java Source Code (.java)

JavaCompiler

Bytecode (.class)

BytecodeInterpreter

Conclusion

Free-Style High-end

ConclusionSame Size

ConclusionDifferent Size

Conclusion

EasierFor wide usage

DifficultFor Race

Different Size

Conclusion

Build FASTVS

Run FAST

Conclusion

Build FASTVS

Run FAST

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

첫모임오후 열린공간

Recommended