자바 (프로그래밍 언어)

L위키, 시민들이 참여하여 가꾸는 리버럴 위키
자바
Java programming language logo.svg
패러다임멀티 패러다임: 객체 지향 프로그래밍 (클래스 기반 프로그래밍), 함수형 프로그래밍, 반응형 프로그래밍 , 명령형 프로그래밍, 병행 컴퓨팅
설계자제임스 고슬링
개발자오라클
발표일1995년 5월 23일 (26년 전)(1995-05-23)[1]
자료형 체계Static, strong, safe, nominative, manifest
파일 확장자.java, .class, .jar, .jmod
웹사이트oracle.com/java/
영향을 받은 언어
CLU,[2] Simula67,[2] Lisp,[2] Smalltalk,[2] 에이다 83, C++,[3] C#,[4] Eiffel,[5] Mesa,[6] Modula-3,[7] Oberon,[8] Objective-C,[9] UCSD Pascal,[10][11] Object Pascal[12]
영향을 준 언어
Ada 2005, BeanShell, C#, Chapel,[13] Clojure, ECMAScript, Fantom, Gambas,[14] Groovy, Hack,[15] Haxe, J#, 코틀린, PHP, 파이썬, 스칼라, Seed7, Vala, 자바스크립트, JS++

자바는 현재 오라클에 합병된 썬 마이크로시스템즈가 개발한 프로그래밍 언어이다. 이름의 유래는 여러가지 설이 있으나 인도네시아의 자바섬에서 나는 자바 커피라는 것이 정설이다.

특징[편집 | 원본 편집]

public class Main {
	public static void main(String[] args) {
	    System.out.println("I love NY.");
	}
}

I love NY를 콘솔창에다가 출력시키는 코드.

자바 하면 가장 떠올리는 특징은 가상머신 위에 돌아간다는 것이다. 가상머신 위에서 돌아가기 때문에 속도는 떨어지지만 자바만의 큰 이점이 있는데 바로 플랫폼 독립적이라는 이점을 갖게 되었다. 이러한 특징 때문에 자바가 흥한 이유가 되었다. C/C++은 OS나 아키텍쳐 등이 달라지면 그에 맞게 다시 프로그래밍을 해야 하지만 자바는 이러한 수고를 거의 거치지 않는다는 점이 장점. 물론 플랫폼별 차이는 있기 때문에 자바도 타 플랫폼별 처리를 해주어야 하는 부분이 있지만, C/C++로 짜는 것에 대해서는 이러한 수고가 매우 덜 하다.

자바는 컴파일 언어로 분류되지만 자바 컴파일러는 C/C++ 등과 달리 기계어가 아닌 자바 바이트 코드로 컴파일을 한다. 이 자바 바이트 코드를 JVM라는 약자[16]로 주로 불리오기도 하는 자바 가상 머신[17]이 기계어로 바꾸는 식으로 동작한다. 이러한 점 때문에 자바는 C/C++, Go 등의 같은 컴파일 언어지만 기계어로 컴파일되는 언어랑은 다르게 구별된다.

자바는 객체지향 언어라는 특징 또한 가지고 있다. 완전 객체 지향 언어는 아니지만 그대로 C++ 대비 객체지향을 많이 구현했다고 평가되며, 이 때문에 자바는 생산성 면에서 이점을 가져갈 수 있게 되었다.

장점[편집 | 원본 편집]

수많은 레퍼런스와 개발자[편집 | 원본 편집]

단점[편집 | 원본 편집]

긴 코드 길이 등 장황한 언어[편집 | 원본 편집]

자바의 단점으로 거론되는 것 중 하나. 전술했듯 I love NY를 콘솔에서 출력시키는 코드는 다음과 같다.

public class Main {
	public static void main(String[] args) {
	    System.out.println("I love NY.");
	}
}

그런데 요즘 초보자용 언어로 채택되는 파이썬으로 같은 일을 하는 코드를 짜보면,

print("I love NY.")

자바만큼 길게 짤 필요도 없이 이만큼만 짜주면 된다. 일부 컴공 학부에서 첫 언어로 가르치는 C언어에서는...

#include <stdio.h>

int main() { 
    puts("I love NY.");
}

이렇게만 짜도 콘솔에서 I love NY를 출력시킬 수 있다. 루비의 경우에는,

puts "I love NY."

이렇게만 짜도 콘솔에 I love NY가 출력된다. 한때 웹 언에 시장에서 자바랑 경쟁한 PHP는...

<?php echo "I love NY."; ?>

역시나 자바만큼 길게 짤 필요가 없다. 자바를 많이 밴치마킹한 C#

Console.WriteLine("I love NY.");

역시 자바마냥 길게 짤 필요가 없으며 자바처럼 클래스 문법 등을 포함하더라도 자바만큼은 길어지지 않는다.

이 처럼 자바는 같은 일을 하려면 타 프로그래밍 언어 대비 길게 코드를 짜야 한다. 물론 자바를 개발할때 사용하는 IDE는 이에 대한 대응이 되어 있어 대표적인 자바 IDE인 인텔리제이 같은 경우에도 sout만 치면 출력 관련 코드가 나오도록 지원하고 있다. 문제는 에러나 버그 등이 발생한 코드를 디버깅 할때. 자바는 코드 길이로 인해 가독성이 떨어지며 오타 같은 사소한 실수를 하기에도 딱 좋지 때문에 에러 발생시 해당 원인을 찻기 위한 코드 리딩이 타 언어대비 매우 번거롭다. 코드 길이 등 자바는 장황한 요소가 많아 장황함에 대해 많은 비판을 받고 있다

타 JVM 기반 언어는 이러한 장황한 문제를 해결해서 나오기도 하며 대표적인 케이스가 코틀린. 코틀린은 확실히 자바 특유의 장황함 문제를 줄여놓았다.

각주[편집 | 원본 편집]

  1. Binstock, Andrew (May 20, 2015). “Java's 20 Years of Innovation”. 《Forbes》. March 14, 2016에 원본 문서에서 보존된 문서. March 18, 2016에 확인함. 
  2. 2.0 2.1 2.2 2.3 Barbara Liskov with John Guttag (2000). 《Program Development in Java - Abstraction, Specification, and Object-Oriented Design》. USA, Addison Wesley. ISBN 9780201657685. 
  3. Chaudhary, Harry H. (2014년 7월 28일). “Cracking The Java Programming Interview :: 2000+ Java Interview Que/Ans”. 2016년 5월 29일에 확인함. 
  4. Java 5.0 added several new language features (the enhanced for loop, autoboxing, varargs and annotations), after they were introduced in the similar (and competing) C# language. [1] Archived March 19, 2011, - 웨이백 머신. [2] Archived January 7, 2006, - 웨이백 머신.
  5. Gosling, James; McGilton, Henry (May 1996). “The Java Language Environment”. May 6, 2014에 원본 문서에서 보존된 문서. May 6, 2014에 확인함. 
  6. Gosling, James; Joy, Bill; Steele, Guy; Bracha, Gilad. “The Java Language Specification, 2nd Edition”. August 5, 2011에 원본 문서에서 보존된 문서. February 8, 2008에 확인함. 
  7. “The A-Z of Programming Languages: Modula-3”. Computerworld.com.au. January 5, 2009에 원본 문서에서 보존된 문서. June 9, 2010에 확인함. 
  8. Niklaus Wirth stated on a number of public occasions, e.g. in a lecture at the Polytechnic Museum, Moscow in September 2005 (several independent first-hand accounts in Russian exist, e.g. one with an audio recording: Filippova, Elena (2005년 9월 22일). “Niklaus Wirth's lecture at the Polytechnic Museum in Moscow”. 2020년 12월 1일에 원본 문서에서 보존된 문서. 2011년 11월 20일에 확인함. ), that the Sun Java design team licensed the Oberon compiler sources a number of years prior to the release of Java and examined it: a (relative) compactness, type safety, garbage collection, no multiple inheritance for classes틀:Snd all these key overall design features are shared by Java and Oberon.
  9. Patrick Naughton cites Objective-C as a strong influence on the design of the Java programming language, stating that notable direct derivatives include Java interfaces (derived from Objective-C's protocol) and primitive wrapper classes. [3] Archived July 13, 2011, - 웨이백 머신.
  10. TechMetrix Research (1999). “History of Java” (PDF). 《Java Application Servers Report》. December 29, 2010에 원본 문서 (PDF)에서 보존된 문서. The project went ahead under the name green and the language was based on an old model of UCSD Pascal, which makes it possible to generate interpretive code. 
  11. “A Conversation with James Gosling – ACM Queue”. Queue.acm.org. August 31, 2004. July 16, 2015에 원본 문서에서 보존된 문서. June 9, 2010에 확인함. 
  12. In the summer of 1996, Sun was designing the precursor to what is now the event model of the AWT and the JavaBeans component architecture. Borland contributed greatly to this process. We looked very carefully at Delphi Object Pascal and built a working prototype of bound method references in order to understand their interaction with the Java programming language and its APIs.White Paper About Microsoft's Delegates
  13. “Chapel spec (Acknowledgements)” (PDF). Cray Inc. October 1, 2015. February 5, 2016에 원본 문서 (PDF)에서 보존된 문서. January 14, 2016에 확인함. 
  14. “Gambas Documentation Introduction”. Gambas Website. October 9, 2017에 원본 문서에서 보존된 문서. October 9, 2017에 확인함. 
  15. “Facebook Q&A: Hack brings static typing to PHP world”. 《InfoWorld》. March 26, 2014. February 13, 2015에 원본 문서에서 보존된 문서. January 11, 2015에 확인함. 
  16. Java Virtual Machine의 약자
  17. Java Virtual Machine(자바 버츄얼 버신). 아예 다 직역하여 자바 가상 기계라고도 부르기도 한다.
Copyright.svg 이 문서의 일부 내용은 영어 위키백과의 Java 문서 02:26, 24 October 2021판에서 파생되었습니다.