자바 시작
자바 개요
자바(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년에 썬 마이크로시스템즈사가
오라클과 인수 합병
됨에 따라 자바 또한 오라클로 소유권이 넘어간다.
자바의 특징
자바 언어가 가지는 장점은 다음과 같다.
자바는
운영체제와는 독립적으로 실행
할 수 있다.자바는 불필요한 기능을 과감히 제거하여 다른 언어에 비해 배우기가 쉽다.
자바는
자동 메모리 관리
등을 지원하여 다른 언어에 비해 안정성이 높다.자바는
연산자 오버로딩을 금지
하고제네릭을 도입함으로써 코드의 가독성
을 높였다.자바에 관한 수많은 참고 자료를 찾을 수 있다.
자바 언어가 가지는 단점은 다음과 같다.
자바는 실행을 위해 자바 가상 머신을 거쳐야 하므로, 다른 언어에 비해 실행 속도가 느리다.
자바는 예외 처리가 잘 되어 있지만, 개발자가 일일이 처리를 지정해 줘야 한다는 불편함이 있다.
자바는 다른 언어에 비해 작성해야 하는 코드의 길이가 긴 편이다.
자바 표준
- 썬 마이크로시스템즈사는 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에 대한 더 자세한 사항은 다음 페이지를 참고하면 된다.
- 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)은 다음과 같이 구성된다.
- 클래스 로더(class loader)
- 자바 인터프리터(interpreter)
- JIT 컴파일러(Just-In-Time compiler)
- 가비지 컬렉터(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)
가 정의되어 있다.System.in
System.out
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 라이센스를 따릅니다.