SlideShare a Scribd company logo
조인석
파이콘 코리아
● (현) 두산중공업 소프트웨어 개발팀
소프트웨어 아키텍트 & 애자일 전도사
● (전) 삼성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/
첫 모임 오후 열린공간

More Related Content

PDF
모두의 JIT 컴파일러
PDF
니름: 쉬운 SOA 단위 테스트
PDF
알고리즘 시각화 라이브러리 ipytracer 개발기
PDF
GopherCon Korea 2015 - Python 개발자를 위한 Go (이경찬)
PDF
PyCon 12월 세미나 - 실전 파이썬 프로그래밍 책 홍보
PPTX
Let's Go (golang)
PDF
Javascript개발자의 눈으로 python 들여다보기
PDF
20150306 파이썬기초 IPython을이용한프로그래밍_이태영
모두의 JIT 컴파일러
니름: 쉬운 SOA 단위 테스트
알고리즘 시각화 라이브러리 ipytracer 개발기
GopherCon Korea 2015 - Python 개발자를 위한 Go (이경찬)
PyCon 12월 세미나 - 실전 파이썬 프로그래밍 책 홍보
Let's Go (golang)
Javascript개발자의 눈으로 python 들여다보기
20150306 파이썬기초 IPython을이용한프로그래밍_이태영

What's hot (20)

PPTX
파이선 실전공략-1
PPTX
문과생 대상 파이썬을 활용한 데이터 분석 강의
PPTX
[KGC 2011]Boost 라이브러리와 C++11
PPTX
Python - Module
PDF
파이썬 데이터과학 레벨1 - 초보자를 위한 데이터분석, 데이터시각화 (2020년 이태영)
PDF
Writing Fast Code (KR)
PPTX
파이썬 스터디 9장
PPT
Boost라이브러리의내부구조 20151111 서진택
PDF
PPTX
Python 생태계의 이해
PPTX
파이썬 스터디 15장
PDF
[KGC 2012]Boost.asio를 이용한 네트웍 프로그래밍
PPTX
PDF
파이썬 데이터과학 레벨2 - 데이터 시각화와 실전 데이터분석, 그리고 머신러닝 입문 (2020년 이태영)
PPTX
WTL 소개
PPTX
20150212 c++11 features used in crow
PPTX
[NDC2015] C++11 고급 기능 - Crow에 사용된 기법 중심으로
PDF
H3 2011 파이썬으로 클라우드 하고 싶어요
 
PDF
사례를 통해 살펴보는 프로파일링과 최적화 NDC2013
PPTX
Kth개발자 세미나 1회
파이선 실전공략-1
문과생 대상 파이썬을 활용한 데이터 분석 강의
[KGC 2011]Boost 라이브러리와 C++11
Python - Module
파이썬 데이터과학 레벨1 - 초보자를 위한 데이터분석, 데이터시각화 (2020년 이태영)
Writing Fast Code (KR)
파이썬 스터디 9장
Boost라이브러리의내부구조 20151111 서진택
Python 생태계의 이해
파이썬 스터디 15장
[KGC 2012]Boost.asio를 이용한 네트웍 프로그래밍
파이썬 데이터과학 레벨2 - 데이터 시각화와 실전 데이터분석, 그리고 머신러닝 입문 (2020년 이태영)
WTL 소개
20150212 c++11 features used in crow
[NDC2015] C++11 고급 기능 - Crow에 사용된 기법 중심으로
H3 2011 파이썬으로 클라우드 하고 싶어요
 
사례를 통해 살펴보는 프로파일링과 최적화 NDC2013
Kth개발자 세미나 1회
Ad

Similar to Python vs Java @ PyCon Korea 2017 (20)

PPTX
빠르게 활용하는 파이썬3 스터디(ch1~4)
PPTX
불어오는 변화의 바람, From c++98 to c++11, 14
KEY
2시간만에 자바 데이터처리를 쉽게 배우고 싶어요.
PDF
HI-ARC PS 101
PPTX
Java mentoring of samsung scsc 2
PDF
Scala
PDF
KTH_Detail day_화성에서 온 개발자 금성에서 온 기획자 시리즈_5차_데이터분석_조범석_20120613
PPT
자바스터디(6기) 3
PDF
파이썬 데이터 분석 (18년)
PDF
파이썬으로 익히는 딥러닝
PPT
Ai C#세미나
PPTX
Nexon Developers Conference 2017 Functional Programming for better code - Mod...
PDF
Realm은 어떻게 효율적인 데이터베이스를 만들었나?
PDF
[SOPT] 데이터 구조 및 알고리즘 스터디 - #02 : 스택, 큐, 수식 연산
PDF
5장 객체와클래스
PDF
//BUILD/ Seoul - .NET의 현재와 미래. 그 새로운 시작
PDF
[NEXT 프연 Week3] C# Data Type
PPTX
함수형 프로그래밍
PPTX
Google Protocol buffer
PDF
[Td 2015]java script에게 형(type)이 생겼어요. typescript(박용준)
빠르게 활용하는 파이썬3 스터디(ch1~4)
불어오는 변화의 바람, From c++98 to c++11, 14
2시간만에 자바 데이터처리를 쉽게 배우고 싶어요.
HI-ARC PS 101
Java mentoring of samsung scsc 2
Scala
KTH_Detail day_화성에서 온 개발자 금성에서 온 기획자 시리즈_5차_데이터분석_조범석_20120613
자바스터디(6기) 3
파이썬 데이터 분석 (18년)
파이썬으로 익히는 딥러닝
Ai C#세미나
Nexon Developers Conference 2017 Functional Programming for better code - Mod...
Realm은 어떻게 효율적인 데이터베이스를 만들었나?
[SOPT] 데이터 구조 및 알고리즘 스터디 - #02 : 스택, 큐, 수식 연산
5장 객체와클래스
//BUILD/ Seoul - .NET의 현재와 미래. 그 새로운 시작
[NEXT 프연 Week3] C# Data Type
함수형 프로그래밍
Google Protocol buffer
[Td 2015]java script에게 형(type)이 생겼어요. typescript(박용준)
Ad

Python vs Java @ PyCon Korea 2017

  • 2. ● (현) 두산중공업 소프트웨어 개발팀 소프트웨어 아키텍트 & 애자일 전도사 ● (전) 삼성SDS 방법론팀 / 프레임워크 팀 소프트웨어 아키텍트 ● (전) 현대정보기술 해외금융기술팀 소프트웨어 엔지니어 ● (전) 육군전산소 S/W 개발병 ● 컴퓨터공학 학사(2004) 조인석 (Chris Cho)
  • 5. Python’s Spectrum of Users ※ ※
  • 6. Type of language Python Source Code (.py) Interpreter Java Source Code (.java) Java Compiler Bytecode (.class) Bytecode Interpreter
  • 7. How can I run? print("Hello, World!!") PYTHON
  • 8. How can I run? print("Hello, World!!") PYTHON ⇒ 파이썬 번역기로 실행
  • 9. How can I run? print("Hello, World!!") PYTHON ⇒ 출력 성공!!
  • 10. How can I run? public class Hello { public static void main (String[] args) { System.out.println("Hello, World!!"); } } print("Hello, World!!") PYTHON
  • 11. How can I run? public class Hello { public static void main (String[] args) { System.out.println("Hello, World!!"); } } print("Hello, World!!") PYTHON ⇒ 자바 컴파일러로 컴파일
  • 12. How can I run? public class Hello { public static void main (String[] args) { System.out.println("Hello, World!!"); } } print("Hello, World!!") PYTHON ⇒ 바이트코드 클래스 파일 생성
  • 13. How can I run? public class Hello { public static void main (String[] args) { System.out.println("Hello, World!!"); } } print("Hello, World!!") PYTHON ⇒ 바이트코드 번역기로 실행
  • 14. How can I run? public class Hello { public static void main (String[] args) { System.out.println("Hello, World!!"); } } print("Hello, World!!") PYTHON ⇒ 출력 성공
  • 15. How can I run? public class Hello { public static void main (String[] args) { System.out.println("Hello, World!!"); } } print("Hello, World!!") PYTHON 같은 결과
  • 16. Hello, World!! print("Hello, World!!") public class 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 = "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. split() - Python text = "I love Python Programming" for word in text.split(): print(word) ⇒ 변수 text 의 문자열을 문자 단위로 출력하라 루프문 시작 문자열 쪼갠 뒤 리스트 반환 반복문들여쓰기 문자 대입 코드 실행시 변수 타입 결정 (동적 타입)
  • 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. 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 Python Source Code (.py) Interpreter Java Source Code (.java) Java Compiler Bytecode (.class) Bytecode Interpreter
  • 31. Development Time Comparison Python Source Code (.py) Interpreter Java Source Code (.java) Java Compiler Bytecode (.class) Bytecode Interpreter
  • 32. Development Time Comparison Python Source Code (.py) Interpreter Java Source Code (.java) Java Compiler Bytecode (.class) Bytecode Interpreter
  • 39. ➔ 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/ 첫 모임 오후 열린공간