ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 파이썬과 자바 비교
    카테고리 없음 2020. 6. 12. 22:45

    다음 프로젝트에 Java 또는 Python을 선택해야합니까? 당신은 선택을 할만 큼 운이 좋습니까? 이 언어 중 하나가 더 나은 옵션입니까?

    GitHub의 연례 Octoverse 보고서에 따르면 Java와 Python은 4 년 연속으로 두 번째 및 세 번째로 인기있는 언어 입니다. 같은 이야기에 따르면, 파이썬은 가장 빠르게 성장하는 10 대 언어 중 하나입니다. 다른 많은 이득을 얻은 사람들은 대부분 새로운 언어이지만 파이썬은 Java보다 오래되었습니다.

    글을 쓰는 시점에서 TIOBE 인덱스 는 Java를 목록의 최상위에 배치하고 Python을 3 위에 배치합니다. 파이썬은 이달 (2018 년 12 월)에 1 년 넘게 4 위에 올랐다.

    Digital Ocean의 최근 언어 조사에 따르면 Python은 오픈 소스 프로젝트를위한 언어 목록에서 2 위를 차지했습니다. Java는 4 위에 있으며 파이썬 채택의 절반에 불과합니다.

    따라서이 두 언어는 인기가 있고 어디로도 가지 않습니다. 어느 것이 최선의 선택입니까?

     

    2019 년 자바와 파이썬

    Java와 Python에는 많은 유사점이 있습니다. 두 언어 모두 강력한 크로스 플랫폼 지원과 광범위한 표준 라이브러리를 가지고 있습니다. 그들은 모두 (거의) 모든 것을 대상으로 취급합니다. 두 언어 모두 바이트 코드로 컴파일되지만 Python은 런타임에 (일반적으로) 컴파일됩니다. 비록 파이썬이 Java보다 C / C ++에서 더 멀리 떨어져 있지만 둘 다 Algol 패밀리의 멤버입니다.

    Python 2.x에 대한 지원은 2020 년 1 월 1 일에 종료됩니다. 오랫동안 Python 개발은 버전 2.7과 새 3.x 버전의 정식 릴리스 사이에서 조각화되었습니다. 그러나 일년이 지나면 Python 2의 수명이 다한 날짜와 함께 사용할 버전에 대한 문제가 해결됩니다. 커뮤니티는 Python 3을 중심으로했습니다.

    한편, 오라클의 새로운 Java 릴리스 모델 은 소프트웨어 커뮤니티에서 많은 두려움, 불확실성 및 의심을 불러 일으켰습니다. 발표가 무료 (맥주에서와 같이) 옵션과 명확한 업그레이드 경로를 제공했지만 혼동은 계속됩니다 . Red Hat 및 Amazon과 같은 여러 플랫폼 제공 업체가 OpenJDK를 지원하기 시작했습니다. 그러나 한때 통합 된 Java 커뮤니티는 Python보다 훨씬 더 단편적입니다. Java와 Python의 유사점과 차이점을 자세히 살펴 보겠습니다.

     

    자바 대 파이썬 입력

    Python과 Java는 모두 객체 지향 언어이지만 Java는 정적 유형을 사용하지만 Python은 동적입니다. 이는 가장 중요한 차이점이며 기본 방식으로 프로그램을 디자인, 작성 및 문제 해결하는 방법에 영향을줍니다. 두 가지 코드 예제를 살펴 보겠습니다.

    먼저 파이썬에서는 데이터가 담긴 배열을 만들어서 콘솔에 출력합니다.

     

    stuff = ["Hello, World!", "Hi there, Everyone!", 6]
    for i in stuff:
        print(i)

     

    다음으로 Java로 사용해 봅시다.

    public class Test {
        public static void main(String args[]) {
            String array[] = {"Hello, World", "Hi there, Everyone", "6"};
            for (String i : array) {
              System.out.println(i);
            }
        }
    }

     

    파이썬에서는 두 개의 문자열과 정수를 같은 배열에 넣고 내용을 인쇄했습니다. Java의 경우 문자열 목록을 선언하고 세 개의 문자열 값을 넣습니다.

    Java 배열에서는 유형을 혼합 할 수 없습니다. 코드가 컴파일되지 않습니다.

     

     String array[] = {"Hello, World", "Hi there, Everyone", 6};
    

    배열을 String 대신 Object를 포함하는 것으로 선언하고 Java 유형 시스템을 재정의 할 수 있습니다. 그러나 숙련 된 Java 개발자가 언어를 사용하는 방식은 아닙니다.

    파이썬에서는 배열을 선언 할 때 타입을 제공 할 필요가 없으며 원하는 것을 넣을 수 있습니다. 내용을 오용하지 않도록하는 것은 우리의 책임입니다.

    예를 들어, 위의 코드를 수정하여 수정하면 어떻게됩니까?

     

    stuff = ["Hello, World!", "Hi there, Everyone!", 6]
    for i in stuff:
        print(i + " Foobar!")

    위의 코드는 문자열에 정수를 추가 할 수 없으므로 실행할 때 오류가 발생합니다. 동적 타이핑 및 정적 타이핑의 장점과 단점은 무엇입니까?

    정적 입력은 컴파일 타임에 유형 오류를 포착합니다. 따라서 문자열과 정수를 혼합하지 않으려는 경우 Java 컴파일러는 실수를 잡습니다. 컴파일 타임 검사의 이점 중 일부  일부 분야 에서 논쟁의 여지가 있습니다 . 그러나 정적 타이핑은 일부 개발자가 인정하는 원칙을 시행합니다.

    정적 타이핑이 오류를 방지하는지 여부에 관계없이 코드 실행 속도가 빨라집니다. 정적으로 유형이 지정된 코드로 작업하는 컴파일러는 대상 플랫폼에 더 잘 최적화 될 수 있습니다. 또한 런타임 유형 오류를 피하여 다른 성능 향상을 추가하십시오.

    동적 유형으로 작성된 코드는 정적 언어보다 덜 장황한 경향이 있습니다. 변수는 유형으로 선언되지 않으며 유형이 변경 될 수 있습니다. 새 변수 선언에 대한 사본 또는 유형 변환이 저장됩니다.

    Java와 Python에 대해 토론 할 때 코드 가독성 문제가 자주 발생합니다. 다음에 살펴 보겠습니다.

     

    코드 가독성 및 포맷

    Java와 Python에서 예제를 가져 와서 비교해 봅시다. 이 예에서는 큰 텍스트 파일을 열고 각 줄을 쉼표로 구분 된 50 개의 레코드 세트로 수집해야합니다. 파이썬 코드는 다음과 같습니다.

     

    def get_symbols(file_name):
        with open(file_name, "r") as in_file:
            records = []
            count = 0
            symbol_set = ""
            for line in in_file:
                symbol_set = symbol_set + line[:-1] + ','
                count = count + 1
                if count % 50 == 0:
                    records.append(symbol_set)
                    symbol_set = ""
    
            symbols.append(symbol_set)
            return records

    Java 코드는 다음과 같습니다.

     

    List<String> getSymbols(String filename) throws IOException {
      List<String> records = new ArrayList<>();
      try (BufferedReader reader = new BufferedReader(new FileReader(filename))) {
        String line;
        int count = 0;
        StringBuilder symbol_set = new StringBuilder();
        while ((line = reader.readLine()) != null) {
          symbol_set.append(line).append(",");
          count++;
          if ((count % 50) == 0) {
            records.add(symbol_set.toString());
            symbol_set.setLength(0);
          }
        }
        records.add(symbol_set.toString());
        return records;
      }
    }

     

    공백

    공백은 Python 구문의 일부이지만 Java는이를 무시합니다. 파이썬은 중첩을 위해 탭을 사용하고 루프와 조건부 블록을 시작하기 위해 전체 콜론을 사용합니다. Java는 공백을 무시하고 세미콜론, 괄호 및 중괄호를 사용합니다. 정적 및 동적 타이핑에 대한 토론과 같이 어떤 코드를 더 읽기 쉬운 지에 대한 논쟁은 주관적입니다. 어떤 사람들은 파이썬 코드가 자바보다 간결하고 균일하다고 말합니다. 포맷 선택이 더 제한적이기 때문입니다. 파이썬에서 공백을 사용하면 코드를 포맷하는 방법에 대한 논쟁이 끝납니다. 남겨둔 유일한 옵션은 빈 줄을 사용하는 방법입니다.

    파이썬 스 니펫은 자바 스 니펫보다 몇 줄 더 짧으며, 더 큰 프로그램에 추가되는 차이점입니다. 차이점은 닫는 괄호가 없기 때문입니다. 그러나 자바와 비교했을 때 파이썬의 간결함은 더 깊어집니다.

     

    짧음

    두 언어가 파일을 처리하는 방법을 살펴 보겠습니다.

    여기 파이썬이 있습니다 :

    with open(file_name, "r") as in_file:
    

     

    여기 자바가 있습니다 :

    try (BufferedReader reader = new BufferedReader(new FileReader(filename))) {
    

     

    두 경우 모두 선언은 블록을 만듭니다. 파일 리소스는 범위 내에 있으며 코드가 블록을 종료하면 언어가이를 닫습니다.

    파이썬에서는 파일을 열어서 읽습니다. 루프가 파일의 끝에 도달하면 루프가 종료됩니다.

    for line in in_file:
    

     

    자바는 더 복잡하다. FileReader를 전달하여 BufferedReader를 열고 있습니다. 우리는 독자로부터 줄을 소비합니다. 파일이 끝날 때 null을 확인하는 것은 우리의 책임입니다.

    while ((line = reader.readLine()) != null) {
    

    이것은 파이썬에서 텍스트 파일을 다루기가 더 쉽다는 것을 보여줍니다. 그러나 Java보다 파이썬이 더 장황한 경향이 있음을 보여줍니다. "Pythonic"구성은 더 간결하고 덜 까다 롭습니다. Java는 Java 7에서 리소스를 사용하여 시도하고 Java 8에서 람다를 도입하여 지난 몇 가지 릴리스에서 발전했지만 여전히 장황한 언어입니다.

    첫 번째 예를 다시 살펴 보겠습니다.

     

    다음은 파이썬입니다.

     

    stuff = ["Hello, World!", "Hi there, Everyone!", 6]
        for i in stuff:
            print(i)

     

    여기 자바가있다 :

    public class Test {
        public static void main(String args[]) {
            String array[] = {"Hello, World", "Hi there, Everyone", "6"};
            for (String i : array) {
              System.out.println(i);
            }
        }
    }

     

    이 스 니펫은 모두 그대로 빌드되고 실행됩니다. 파이썬은 파일의 처음부터 끝까지 스크립트를 실행합니다. Java에는 main이라는 정적 메소드 인 하나 이상의 진입 점이 필요합니다. JVM (Java Virtual Machine)은 명령 행에서 전달 된 클래스에서이 메소드를 실행합니다.

    파이썬 프로그램을 구성하는 것은 자바보다 빠르고 쉬운 경향이 있습니다. 이것은 특히 파일을 조작하거나 웹 리소스에서 데이터를 검색하기위한 유틸리티 프로그램에 해당됩니다.

     

    성능

    Java와 Python은 모두 바이트 코드로 컴파일되어 가상 머신에서 실행됩니다. 이렇게하면 운영 체제 간의 차이와 코드가 분리되어 언어가 크로스 플랫폼이됩니다. 그러나 중요한 차이점이 있습니다. Python은 일반적으로 런타임에 코드를 컴파일하는 반면 Java는 코드를 미리 컴파일하고 바이트 코드를 배포합니다.

    대부분의 JVM은 프로그램 전체 또는 일부를 기본 코드로 적시에 컴파일하여 성능을 크게 향상시킵니다. 주류 파이썬은 이것을하지 않지만 PyPy 와 같은 몇 가지 변형 이 있습니다.

    Java와 Python의 성능 차이는 경우에 따라 중요한 경우가 있습니다. 간단한 이진 트리 테스트는 Python보다 Java에서 10 배 빠르게 실행됩니다.

     

    Java 대 Python에 대한 최종 생각

    그렇다면 어떤 언어가 최선의 선택입니까?

    오라클의 새로운 지원 모델은 Java 환경을 변화시킵니다. 여전히 무료 옵션이 있지만 새로운 출시 일정 및 지원 모델을 통해 개발자는 재고를 확보 할 수 있습니다. Java 클라이언트는 지원 비용을 Oracle에 지불하고, 정기적으로 OpenJDK 버전을 변경하거나 수정 및 보안 업데이트를 위해 Red Hat 또는 Amazon과 같은 타사에 의존해야합니다.

    동시에 Python은 Python 3의 중요한 장애물을 해결했습니다. Python은 처음으로 Java보다 통합 된 지원 모델을 가지고 있으며 오픈 소스 개발자는 최신 버전의 언어에 집중하고 있습니다. 파이썬에게 우위를 제공해야합니다.

    파이썬의 동적 타이핑이 Java의 정적 접근법보다 나은지 여부는 주관적입니다. 두 모델 사이의 논쟁은 두 모델 모두에 우선하며, 당신과 당신의 팀에 가장 적합한 것이 무엇인지에 대한 질문입니다.

    두 언어로 큰 프로젝트를 수행 한 후에 파이썬 구문이 Java보다 간결하다는 것이 안전하다고 생각합니다. Java에서보다 Python에서 새 프로젝트로 빠르게 시작하고 실행하는 것이 더 쉽습니다. 파이썬이 다시 이깁니다.

    성능은 Java가 Python보다 실질적인 이점입니다. Java의 JIT (Just-In-Time) 컴파일은 Python의 해석 성능보다 이점을 제공합니다. 대기 시간에 민감한 응용 프로그램에는 어떤 언어도 적합하지 않지만 Java는 여전히 Python보다 훨씬 빠릅니다.

    고려 된 모든 것, 파이썬의 장점은 단점보다 중요합니다. 아직 고려하지 않았다면 다시 한 번 살펴보십시오.

    모든 프로젝트에서 Python 또는 Java를 선택하든 Raygun 플랫폼에서 오류가 없는지 확인하십시오. Raygun은 정교한 오류 모니터링, 실제 사용자 모니터링 및 응용 프로그램 성능 모니터링을 통해 오류 및 성능 문제를 자동으로 감지합니다.

    댓글

Designed by Tistory.