조인석
파이콘 코리아
● (현) 두산중공업 소프트웨어 개발팀
소프트웨어 아키텍트 & 애자일 전도사
● (전) 삼성SDS 방법론팀 / 프레임워크 팀
소프트웨어 아키텍트
● (전) 현대정보기술 해외금융기술팀
소프트웨어 엔지니어
● (전) 육군전산소
S/W 개발병
● 컴퓨터공학 학사(2004)
조인석 (Chris Cho)
List of Contents
●
●
●
●
●
●
●
●
●
PyData at Strata
Python’s Spectrum of Users
※
※
Type of language
Python Source
Code (.py)
Interpreter
Java Source
Code (.java)
Java
Compiler
Bytecode
(.class)
Bytecode
Interpreter
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() - Python
text = "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 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);
}
}
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.8
0.323 secSLOW? or ENOUGH?
Development Time Comparison
Python Source
Code (.py)
Interpreter
Java Source
Code (.java)
Java
Compiler
Bytecode
(.class)
Bytecode
Interpreter
Development Time Comparison
Python Source
Code (.py)
Interpreter
Java Source
Code (.java)
Java
Compiler
Bytecode
(.class)
Bytecode
Interpreter
Development Time Comparison
Python Source
Code (.py)
Interpreter
Java Source
Code (.java)
Java
Compiler
Bytecode
(.class)
Bytecode
Interpreter
Conclusion
Free-Style High-end
Conclusion
Same Size
Conclusion
Different Size
Conclusion
Easier
For wide usage
Difficult
For Race
Different Size
Conclusion
Build FAST
VS
Run FAST
Conclusion
Build FAST
VS
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/
첫 모임 오후 열린공간

Python vs Java @ PyCon Korea 2017

  • 1.
  • 2.
    ● (현) 두산중공업소프트웨어 개발팀 소프트웨어 아키텍트 & 애자일 전도사 ● (전) 삼성SDS 방법론팀 / 프레임워크 팀 소프트웨어 아키텍트 ● (전) 현대정보기술 해외금융기술팀 소프트웨어 엔지니어 ● (전) 육군전산소 S/W 개발병 ● 컴퓨터공학 학사(2004) 조인석 (Chris Cho)
  • 3.
  • 4.
  • 5.
  • 6.
    Type of language PythonSource Code (.py) Interpreter Java Source Code (.java) Java Compiler Bytecode (.class) Bytecode Interpreter
  • 7.
    How can Irun? print("Hello, World!!") PYTHON
  • 8.
    How can Irun? print("Hello, World!!") PYTHON ⇒ 파이썬 번역기로 실행
  • 9.
    How can Irun? print("Hello, World!!") PYTHON ⇒ 출력 성공!!
  • 10.
    How can Irun? public class Hello { public static void main (String[] args) { System.out.println("Hello, World!!"); } } print("Hello, World!!") PYTHON
  • 11.
    How can Irun? public class Hello { public static void main (String[] args) { System.out.println("Hello, World!!"); } } print("Hello, World!!") PYTHON ⇒ 자바 컴파일러로 컴파일
  • 12.
    How can Irun? public class Hello { public static void main (String[] args) { System.out.println("Hello, World!!"); } } print("Hello, World!!") PYTHON ⇒ 바이트코드 클래스 파일 생성
  • 13.
    How can Irun? public class Hello { public static void main (String[] args) { System.out.println("Hello, World!!"); } } print("Hello, World!!") PYTHON ⇒ 바이트코드 번역기로 실행
  • 14.
    How can Irun? public class Hello { public static void main (String[] args) { System.out.println("Hello, World!!"); } } print("Hello, World!!") PYTHON ⇒ 출력 성공
  • 15.
    How can Irun? public class Hello { public static void main (String[] args) { System.out.println("Hello, World!!"); } } print("Hello, World!!") PYTHON 같은 결과
  • 16.
    Hello, World!! print("Hello, World!!") publicclass Hello { public static void main (String[] args) { System.out.println("Hello, World!!"); } }
  • 17.
    Hello, World!! -Python print("Hello, World!!") ⇒ 괄호안에 인자로 입력 받은 값을 출력하라
  • 18.
    Hello, World!! -Python print("Hello, World!!") ⇒ 괄호안에 인자로 입력 받은 값을 출력하라 표준출력함수 출력대상
  • 19.
    Hello, World!! -Java public class Hello { public static void main (String[] args) { System.out.println("Hello, World!!"); } } ⇒ 괄호안에 입력 받은 값을 출력하라
  • 20.
    Hello, World!! -Java public class Hello { public static void main (String[] args) { System.out.println("Hello, World!!"); } } ⇒ ……. 괄호안에 입력 받은 값을 출력하라 ㅡㅡㅋ 접근제한자 클래스 클래스이름 정적함수 함수 반환값 Main 함수 문자열 배열 인자 표준 입/출력 클래스 출력 출력함수 개행포함 출력대상 명령어 종료 블록 시작 블록종료
  • 21.
    split() text = "Ilove 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.
    split() - Python text= "I love Python Programming" for word in text.split(): print(word) ⇒ 변수 text 의 문자열을 문자 단위로 출력하라 루프문 시작 문자열 쪼갠 뒤 리스트 반환 반복문들여쓰기 문자 대입 코드 실행시 변수 타입 결정 (동적 타입)
  • 23.
    split() - Java publicclass SplitText { public static void main (String[] args) { String text = "I love Python Programming"; for (String word: text.split(" ")) System.out.println(word); } } 문자열 타입 지정 (정적 타입) 문자열을 “ ” 를 구분자로 쪼갠 뒤 리스트 반환 문자 대입 괄호 주의 중괄호 생략 문자열 타입 지정 (정적 타입) 반복문 ⇒ 변수 text 의 문자열을 문자 단위로 출력하라
  • 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.
    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.
    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.
    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.
    Run Time Comparison ⇒0.323 초 ⇒ 0.198 초(IntStream.range()) ⇒ 0.086 초 (Traditional Loop) x 1.6 x 2.3 x 3.8
  • 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.
    Development Time Comparison PythonSource Code (.py) Interpreter Java Source Code (.java) Java Compiler Bytecode (.class) Bytecode Interpreter
  • 31.
    Development Time Comparison PythonSource Code (.py) Interpreter Java Source Code (.java) Java Compiler Bytecode (.class) Bytecode Interpreter
  • 32.
    Development Time Comparison PythonSource Code (.py) Interpreter Java Source Code (.java) Java Compiler Bytecode (.class) Bytecode Interpreter
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 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/ 첫 모임 오후 열린공간