포스트

자바 시작

자바 개요


자바(Java)

  • 자바(Java)는 C++과는 달리 처음부터 객체 지향 언어로 개발된 프로그래밍 언어이다.
  • 또한, 자바는 자바 가상 머신(JVM)을 사용하여 어느 운영체제에서나 같은 형태로 실행될 수 있다. 현재 자바는 전 세계에서 가장 많이 사용하는 프로그래밍 언어 중 하나이다.


자바 기초


자바란?

  • 자바(Java)는 C언어에 객체 지향적 기능을 추가하여 만든 C++과는 달리, 처음부터 객체 지향 언어로 개발된 프로그래밍 언어이다.
  • 자바는 자바 가상 머신(JVM, Java Virtual Machine)을 사용하여, 운영체제와는 독립적으로 동작할 수 있다. 따라서 자바는 어느 운영체제에서나 같은 형태로 실행될 수 있다. 바로 이러한 점이 수많은 개발자로 하여금 자바를 사용하게 하는 원동력이 되고 있다.

자바의 역사

  • 처음에 자바는 가전제품 내에서 동작하는 임베디드 프로그램을 위한 언어로 썬 마이크로시스템즈(Sun Microsystems)사의 제임스 고슬링(James Gosling) 팀에 의해 개발되었다.
  • 1991년에 오크(Oak)라는 이름으로 시작하여, 1996년에 발표된 1.0.2 버전부터 자바(Java)라는 이름을 사용하게 된다.
  • 1998년 발표된 J2SE 1.2에서는 웹에서도 자바를 돌릴 수 있게 해 주는 자바 애플릿(Java Applet)이 추가되며, 자바의 인기는 급상승하게 된다.
  • 그 후 버전이 업데이트될 때마다 다양한 기능이 지원되며 자바는 꾸준한 인기를 누리게 된다.
  • 이후 2009년에 썬 마이크로시스템즈사가 오라클과 인수 합병됨에 따라 자바 또한 오라클로 소유권이 넘어간다.

자바의 특징

  • 자바 언어가 가지는 장점은 다음과 같다.

    1. 자바는 운영체제와는 독립적으로 실행할 수 있다.

    2. 자바는 불필요한 기능을 과감히 제거하여 다른 언어에 비해 배우기가 쉽다.

    3. 자바는 자동 메모리 관리 등을 지원하여 다른 언어에 비해 안정성이 높다.

    4. 자바는 연산자 오버로딩을 금지하고 제네릭을 도입함으로써 코드의 가독성을 높였다.

    5. 자바에 관한 수많은 참고 자료를 찾을 수 있다.


  • 자바 언어가 가지는 단점은 다음과 같다.

    1. 자바는 실행을 위해 자바 가상 머신을 거쳐야 하므로, 다른 언어에 비해 실행 속도가 느리다.

    2. 자바는 예외 처리가 잘 되어 있지만, 개발자가 일일이 처리를 지정해 줘야 한다는 불편함이 있다.

    3. 자바는 다른 언어에 비해 작성해야 하는 코드의 길이가 긴 편이다.


자바 표준

  • 썬 마이크로시스템즈사는 1997년에 ISO/IEC에서 표준화 절차를 밟았으나 성사되지 못한다. 이후 자바는 자발적 표준(de facto)으로써 자바 커뮤니티 프로세스(Java Community Process)를 통해 관리된다.
  • 2007년에 썬 마이크로시스템즈사는 자바의 코어 부분을 대부분 GPL 라이선스로 오픈한다.
  • 이후 2009년에 썬 마이크로시스템즈사가 오라클과 인수 합병됨에 따라 자바에 대한 권리 및 유지보수 또한 현재는 오라클에서 수행하고 있다.
  • 자바의 버전은 보통 JDK 또는 Java SE 버전으로 나타낸다. 초기 버전인 1.0/1.1 버전에서는 JDK(Java Development Kit)를 사용했지만, JDK 1.2를 발표하면서 J2SE로 변경한다.
  • J2SE(Java2 Standard Edition)라는 명칭 또한, 2006년 JDK 1.6부터 Java SE(Java Standard Edition)로 변경된다.
  • Java SE 8는 2014년에 발표되었으며, 그 이후에도 계속해서 새로운 버전이 발표되고 있다. 이전에 많이 사용되던 버전 중 하나인 Java SE 8에 대한 더 자세한 사항은 다음 페이지를 참고하면 된다.

    The Java™ Language Specification : Java SE 8 Edition

  • Java SE 버전이름에 대한 변천사에 대해서는 아래와 같다.
    • JDK 1.0/1.1
    • JDK 1.2부터 J2SE(Java 2 Standard Edition)
    • JDK 1.6부터 Java SE(Java Standard Edition)로 변경됨
  • 자바 플랫폼의 최신 버전 및 관련 정보는 공식 Oracle Java 웹사이트나 Java Community Process 웹사이트에서 확인할 수 있다.


자바 프로그래밍


자바 프로그램의 실행 과정

  • 자바로 작성된 프로그램은 다음과 같은 순서로 실행된다.

이미지


자바 컴파일러(Java compiler)

  • 자바 컴파일러는 자바를 가지고 작성한 자바 소스 코드를 자바 가상 머신이 이해할 수 있는 자바 바이트 코드로 변환한다.
  • 자바 컴파일러는 자바를 설치하면 javac.exe라는 실행 파일 형태로 설치된다.

자바 바이트 코드(Java bytecode)

  • 자바 바이트 코드(Java bytecode)자바 가상 머신이 이해할 수 있는 언어로 변환된 자바 소스 코드를 의미한다.
  • 자바 컴파일러에 의해 변환되는 코드의 명령어 크기가 1바이트라서 자바 바이트 코드라고 불리고 있다. 이러한 자바 바이트 코드의 확장자는 .class이다.
  • 자바 바이트 코드는 자바 가상 머신만 설치되어 있으면, 어떤 운영체제에서라도 실행될 수 있다.

자바 가상 머신(JVM)

  • 자바 가상 머신(JVM, Java Virtual Machine)이란 자바 바이트 코드를 실행시키기 위한 가상의 기계라고 할 수 있다.
  • 자바로 작성된 모든 프로그램자바 가상 머신에서만 실행될 수 있으므로, 자바 프로그램을 실행하기 위해서는 반드시 자바 가상 머신이 설치되어 있어야 한다.
  • 따라서 오라클은 대부분의 주요 운영체제뿐만 아니라 웹 브라우저, 스마트 폰, 가전기기 등에서도 자바 가상 머신을 손쉽게 설치할 수 있도록 지원하고 있다.

이미지

  • 위의 그림처럼 서로 다른 운영체제라도 자바 가상 머신만 설치되어 있다면, 같은 자바 프로그램이 아무런 추가 조치 없이 동작할 수 있다. 따라서 개발자는 한 번만 프로그램을 작성하면, 모든 운영체제에서 같이 사용할 수 있는 장점이 있다.
  • 단, 자바 프로그램과는 달리 자바 가상 머신(JVM)은 운영체제에 종속적이므로, 각 운영체제에 맞는 자바 가상 머신을 설치해야 한다.
  • 또한, 자바 프로그램은 일반 프로그램보다 자바 가상 머신이라는 한 단계를 더 거쳐야 하므로, 상대적으로 실행 속도가 느리다는 단점을 가지고 있다.

자바 가상 머신의 구성

  • 자바 가상 머신(JVM)은 다음과 같이 구성된다.
    1. 클래스 로더(class loader)
    2. 자바 인터프리터(interpreter)
    3. JIT 컴파일러(Just-In-Time compiler)
    4. 가비지 컬렉터(garbage collector)
  • 자바는 동적으로 클래스를 읽어오므로, 프로그램이 실행 중인 런타임에서야 모든 코드가 자바 가상 머신과 연결된다. 이렇게 동적으로 클래스를 로딩해주는 역할을 하는 것이 바로 클래스 로더(class loader)이다.
  • 자바 컴파일러에 의해 변환된 자바 바이트 코드를 읽고 해석하는 역할을 하는 것이 자바 인터프리터(interpreter)이다.
  • JIT 컴파일러(Just-In-Time compiler)란 프로그램이 실행 중인 런타임에 실제 기계어로 변환해 주는 컴파일러를 의미한다. 동적 번역(dynamic translation)이라고도 불리는 이 기법은 프로그램의 실행 속도를 향상시키기 위해 개발되었다. 즉, JIT 컴파일러는 자바 컴파일러가 생성한 자바 바이트 코드를 런타임에 바로 기계어로 변환하는 데 사용한다.
  • 자바 가상 머신은 가비지 컬렉터(garbage collector)를 이용하여 더는 사용하지 않는 메모리를 자동으로 회수해 준다. 따라서 개발자가 따로 메모리를 관리하지 않아도 되므로, 더욱 손쉽게 프로그래밍을 할 수 있도록 도와준다.


자바 프로그램


간단한 자바 프로그램

  • 자바 프로그램은 한 개 이상의 클래스(class)로 구성된다. 이러한 클래스는 한 개 이상의 필드(field)나 메소드(method)로 구성된다.
  • 간단한 자바 프로그램의 기본 구조는 다음과 같다.
1
2
3
4
5
6
7
8
9
// 예제
class 클래스이름 {
    필드의 선언
    필드의 선언
    ...
    메소드의 선언
    메소드의 선언
    ...
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Test {
	int field1;
	String field2;

	public void method1() {
		System.out.println("자바 프로그래밍!!");
	}
}

public class prog {
	public static void main(String[] args) {
		Test myTest = new Test();
		myTest.method1();
	}
}

이미지


main() 메소드

  • 자바 프로그램이 실행되면 맨 먼저 main() 메소드를 찾아 그 안의 모든 명령문을 차례대로 실행한다.
  • 따라서 하나의 자바 프로그램에는 main() 메소드를 가지는 클래스가 반드시 하나는 존재해야 한다.
  • 자바에서 main() 메소드는 다음과 같이 선언한다.
1
2
3
4
5
6
// 원형
public static void main(String[] args) {

    ...

}
  • 위의 원형처럼 main() 메소드는 반드시 public static void로 선언되어야 한다.
  • public, static과 같은 제어자에 대한 더 자세한 사항은 제어자에서 확인할 수 있다.
  • 자바 클래스 파일(*.java)public 클래스(class)가 존재하면 소스 파일의 이름은 반드시 해당 public 클래스의 이름과 같아야 한다. 이러한 public 클래스는 자바 클래스 파일마다 단 한개만 가질 수 있다.

명령문(statement)

  • 자바 프로그램의 동작을 명시하고, 이러한 동작을 컴퓨터에 알려주는 데 사용되는 문장을 명령문(statement)이라고 한다.
  • 자바의 모든 명령문은 반드시 세미콜론(;)으로 끝나야 한다.

주석(comment)

  • 주석이란 코드에 대한 이해를 돕는 설명을 적거나 디버깅을 위해 작성하는 일종의 메모이다.
  • 자바 컴파일러는 주석은 무시하고 컴파일하므로, 실제 실행 결과에는 아무런 영향을 주지 않는다.
  • 자바에서 주석을 작성하는 문법은 다음과 같이 두 가지 방법이 있으며, 그 차이는 전혀 없다.
  • 자바의 한 줄 주석은 시작위치에 //을 사용하고, 여러 줄 주석은 /*로 시작해서 반드시 */로 끝나야 한다.
1
2
3
4
5
6
7
1. // 한 줄 주석

2. /* 여러

   줄

   주석 */
1
2
3
4
5
6
// 자바에서 여러 줄 주석 안에 또 다른 한 줄 주석을 중첩해서 삽입하는 예제
/* 여러 줄

     // 이렇게 두 줄 주석 안에 또 다른 한 줄 주석을 삽입할 수 있다.

주석입니다. */
  • 위의 예제처럼 자바에서는 여러 줄 주석 안에 또 다른 한 줄 주석을 삽입할 수 있다. 하지만 다음 예제처럼 여러 줄 주석 안에 또 다른 여러 줄 주석을 중첩해서 삽입할 수는 없다.
1
2
3
4
5
 /* 여러 줄

②     /* 또 다른 여러 줄 주석입니다. */

 주석입니다. */
  • 위의 예제처럼 여러 줄 주석 안에 또 다른 여러 줄 주석을 삽입하면, ②번 라인에서 삽입한 주석의 종료 기호(*/)를 ①번 라인에서 시작한 첫 번째 주석이 자신의 종료 기호(*/)로 잘못 인식하게 된다.
  • 따라서 위 예제의 ③번 라인은 주석으로 인식되지 못하고, 컴파일 시 오류가 발생하게 된다. 그러므로 자바에서 여러 줄 주석은 절대로 중첩해서 사용해서는 안 된다.


System.out.println()


자바 표준 입출력 클래스

  • 사용자가 프로그램과 대화하기 위해서는 사용자와 프로그램 사이의 입출력을 담당하는 수단이 필요하다.
  • 자바에서는 모든 것이 객체로 표현되므로, 입출력을 담당하는 수단 또한 모두 객체이다.
  • C언어의 printf() 함수나 scanf() 함수처럼 자바에서는 System이라는 표준 입출력 클래스를 정의하여 제공하고 있다. 이러한 System 클래스는 java.lang 패키지에 포함되어 제공된다.
  • System 클래스에는 표준 입출력을 위해 다음과 같은 클래스 변수(static variable)가 정의되어 있다.

    1. System.in

    2. System.out

    3. System.err

  • 자바에서는 System.in 스트림을 사용하여 표준 입력 작업을 수행한다.
  • 또한, System.out 스트림이나 System.err 스트림을 사용하여 표준 출력 작업을 수행한다.

System.out.println()

  • System.out.println() 메소드를 사용하면 모니터에 전달된 데이터를 출력한 후에 줄 바꿈까지 해준다.
  • println() 메소드를 사용하는 문법은 다음과 같다.
1
2
// 문법
System.out.println(출력할데이터);
  • 이렇게 표준 출력 스트림에 전달된 데이터는 스트림을 통해 출력 장치로 전달되어 출력된다.
1
2
3
4
5
6
7
8
9
10
public class prog {
	public static void main(String[] args) {
		System.out.print(7);			// print() 메소드는 줄바꿈을 하지 않는다.
		System.out.println(3);			// 정수 출력
		System.out.println(3.14);		// 실수 출력
		System.out.println("자바!!");	// 문자열 출력
		System.out.println("문자열끼리의 " + "연결도 가능합니다.");
		System.out.println("숫자" + 3 + "과 문자열의 연결도 가능합니다.");
	}
}

이미지

  • println() 메소드와는 달리 print() 메소드는 전달된 데이터를 출력한 후에 줄 바꿈을 하지 않는다.
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.