Home 바닥부터 Java 파해치기 : 자바를 시작하기 앞서
Post
Cancel

바닥부터 Java 파해치기 : 자바를 시작하기 앞서

자바란?

  • 자바는 썬 마이크로 시스템즈에서 개발하여 1996년 1월에 공식적으로 발표한 객체지향 프로그래밍 언어이다.(현재는 오라클 사에 인수되었다.)
  • 자바의 가장 중요한 특징은 플랫폼(운영체제)에 독립적이라는 것이다.
  • 또한 C++의 장점을 채택하는 동시에 잘 사용되지 않는 부분들은 제외시킴으로써 비교적 배우기 쉽고 이해하기 쉬운 간결한 표현이 가능하도록 했다.
  • 자바는 꾸준히 성능을 개선하며 새로운 버전을 발표하고 있으며, 모바일(J2ME), 대규모 기업환경(J2EE), XML 등의 다양한 최신 기술을 지원하며 활동영역이 넓다.

자바의 역사

  • 초기에 애플릿(Applet)을 활용해 정적인 웹페이지에 사운드와 애니메이션 등의 멀티미디어적인 요소를 제공하였다.
  • 이후 보안상의 이유로 최신 웹 브라우져에서 더이상 지원하지 않게 되었고, 대신 서버 쪽 프로그래밍을 위한 서블릿(Servlet)과 JSP(Java Server Pages)가 사용되었다.

자바언어의 특징

  • 운영체제에 독립적이다
    • 일종의 에뮬레이터인 자바가상머신(JVM)을 통해 자바 응용 프로그램은 운영체제나 하드웨어가 아닌 JVM하고만 통신하고 JVM이 자바 응용프로그램으로부터 전달받은 명령을 해당 운영체제가 이해할 수 있도록 변환하여 전달한다.
  • 객체지향언어이다
    • 상속, 캡슐화, 다형성이 잘 적용된 순수한 객체지향언어이다.
  • 비교적 배우기 쉽다.
    • 자바의 연산자와 기본구문은 C++에서, 객체지향관련 구문은 small-talk이라는 객체지향언어에서 가져왔다.
  • 자동 메모리 관리(Garbage Collection)
    • 자바로 작성된 프로그램이 실행되면, 가비지컬렉터(garbage collector)가 자동적으로 메모리를 관리해주기 때문에 프로그래머는 메모리를 따로 관리 하지 않아도 된다.
    • 즉 프로그래머가 사용하지 않는 메모리를 체크하고 반환하는 일을 수동적으로 처리해주지 않아도 된다.
    • 자동으로 메모리를 관리한다는 것이 비효율적인 측면도 있지만, 프로그래머가 보다 프로그래밍에 집중할 수 있게 해준다.
  • 네트워크와 분산처리를 지원한다.
    • 인터넷과 대규모 분산환경을 염두해 둔 까닭인지 풍부하고 다양한 네트워크 프로그래밍 라이브러리(Java API)를 통해 비교적 짧은 시간에 네트워크 관련 프로그램을 쉽게 개발 할 수 있도록 지원한다.
  • 멀티 스레드를 지원한다.
    • 일반적으로 멀티쓰레드(multi-thread)의 지원은 사용되는 운영체제에 따라 구현방법도 상이하며, 처리 방식도 다르다. 그러나 자바에서 개발되는 멀티쓰레드 프로그램은 시스템과는 관계없이 구현 가능하며, 관련된 라이브러리(Java API)가 제공되므로 구현이 쉽다.
    • 그리고 여러 쓰레드에 대한 스케줄링(scheduling)을 자바 인터프리터가 담당하게 된다.
  • 동적 로딩(Dynamic Loading)을 지원한다.
    • 자바는 동적 로딩을 지원하지 때문에 실행 시에 모든 클래스가 로딩되지 않고 필요한 시점에 클래스를 로딩하여 사용할 수 있다.
    • 그 외에도 일부 클래스가 변경되어도 전체 애플리케이션을 다시 컴파일하지 않아도 되며, 애플리케이션의 변경사항이 발생해도 비교적 적은 작업만으로도 처리할 수 있는 유연한 애플리케이션을 작성할 수 있다.
  • 참고
    • 자바의 단점으로는 속도문제가 대표적인데 바이트코드(byte code)를 하드웨어의 기계어로 바로 변환해주는 JIT컴파일러와 Hotspot과 같은 신기술의 도입으로 JVM의 기능이 향상됨으로써 속도 문제가 개선됨

JVM(Java Virtual Machine)

  • JVM은 자바를 실행하기 위한 가상 컴퓨터이다.(가상 컴퓨터란, 소프트웨어로 구현된 하드웨어를 뜻한다)
  • 자바는 JVM을 통해서만 실행되기 때문에, 반드시 필요하다.
    • 일반 애플리케이션의 코드는 OS만을 거치고 하드웨어로 전달되는데 비해 Java 애플리케이션은 JVM을 한 번 더 거치기 때문에, 그리고 하드웨어에 맞게 완전히 컴파일된 상태가 아니고 실행 시에 해석(interpret)되기 때문에 속도가 느리다는 단점을 가지고 있다.
  • Java는 JVM하고만 상호작용을 하기 때문에 OS와 하드웨어에 독립적이어도, JVM은 OS에 종속적이기 때문에 해당 OS에서 실행가능한 JVM이 필요하다.

JDK와 사용법

  • JDK(Java Development Kit)을 설치하고 bin할을 path에 추가 해준다면(macOS에서는 자동으로 추가되던데 window는 모르겠다)
  • 다음과 같은 bin디렉토리의 실행파일들을 실행시킬 수 있다
    1
    2
    3
    4
    5
    6
    
    javac Hello.java #자바 컴파일러, 자바소스코드를 바이트코드로 컴파일한다.
    java Hello #자바 인터프리터, 컴파일러가 생성한 바이트코드를 해석하고 실행한다.
    javap Hello #역어셈블러, 컴파일된 클래스파일을 원래의 소스로 변환한다.( 원래의 소스 전체가 아닌 선언부만 보여지지만 -c 옵션을 추가하면 바이트코드로 컴파일된 내용도 볼 수 있다.)
    javadoc Hello.java #자동문서생성기, 소스파일에 있는 주석(/** */)를 이용하여 java API문서와 같은 형식의 문서를 자동으로 생성한다.
    jar cvf Hello.jar Hello1.class Hello2.class #압축할 때
    jar xvf Hello.jar #압축 풀 때
    
  • 참고
    • 바이트코드: JVM이 이해할 수 있는 기계어를 말한다. JVM은 바이트 코드를 해당 OS의 기계어로 변환하여 OS로 전달한다.
    • JRE : 자바실행환경(Java Runtime Environment). 자바로 작성된 응용 프로그램이 실행되기 위한 최소 환경(JDK = JRE + 개발에 필요한 실행파일, JRE = JVM + 클래스 라이브러리)
    • 여기를 클릭하면 공식 문서를 다운 받을 수 있는 oracle 홈페이지가 나온다. 다운 받으면 local에서 Java API 문서를 필요할 때 찾아볼 수 있다.

자바 프로그램의 실행과정

  • 내부적인 진행 순서는 다음과 같다
  1. 프로그램의 클래스에 필요한 클래스(*.class파일)를 로드한다.
  2. 클래스파일을 검사한다.(파일형식, 악성코드 체크)
  3. 지정된 클래스에서 main(String[] args)를 호출한다.
This post is licensed under CC BY 4.0 by the author.

Java 자료구조 : Hash Table

part1.백엔드 시작하기