자바 시작(프로그래밍 심화)(명품 JAVA Programming )
용어정리
WORA :
write once run anywhere, 자바 프로그램은 어디서 한번 작성하면 다시 컴파일하거나 수정하지 않고, 어떤 하드웨어에서나 운영체제에서도 실행시킬 수 있음을 의미하는 단어
바이트 코드 :
자바 가상 기계에서만 실행되는 기계어, CPU와 관계없는 바이너리 코드
자바 가상 기계 :
서로 다른 플랫폼에서 자바 프로그램이 실해오디는 동일한 환경을 제공
JDK(Java Development Kit) :
자바 컴파일러 등의 개발 도구와 JRE(Java Runtime Enviroment)를 합친 것, 자바 개발자를 위한 상업용 소프트웨어
본문정리
플랫폼 독립성 : 독립적인 바이트 코드로 컴파일되며 자바 가상 기계만 있으면 하드웨어/운영체제를 막론하고 자바 프로그램의 실행이 가능하다.
객체 지향 : 객체 간의 상호관계로 모델링하여 인간의 사고와 가깝게 표현한다(이게 뭔 소리일까... 그냥 좋다는 말인가...)
클래스로 캡슐화 : 원칙 중 하나로 변수나 메소드는 반드시 클래스 내에서 구현되어야한다.
소스와 클래스 파일 : 클래스 파일에는 반드시 하나의 자바 클래스만 들어있다.(파일에 여러 개의 클래스가 있으면 컴파일 시 자동으로 나뉜다), 오직 한 클래스만 public으로 선언 할 수 있다. 소스 파일 내에 public으로 선언된 클래스의 이름으로 자바 소스 파일을 저장해야 한다.(이걸로 언젠가 한번 사고 칠 것 같다)
실행 코드 배포 : 다수의 클래스 파일은 jar 파일 형태로 압축하여 배포된다. 하나의 클래스 파일에 두 개 이상의 main() 메소드가 있을 순 없지만, 각 클래스 파일에 main() 메소드를 가지는 건 상관 없다.
패키지 : 서로 관련 있는 클래스는 패키지로 묶어 관리한다.
멀티스레드 : 하나의 자바 프로그램이 다수의 작업을 처리할 수 있도록 다수의 스레드가 동시에 실행할 수 있는 환경을 지원한다. (이해가 안되는데 13장에서 알려준다고 한다)
가비지 컬렉션 : 메모리를 할당받는 기능은 있지만, 메모리 반환하는 기능은 없다.(오 malloc에서 free를 선언 할 필요가 없다는 의미인가?)
실시간 응용 시스템에 부적합 : 예측할 수 없는 시점에 가비지 컬렉션이 진행 되므로 일시적으로 프로그램 실행이 중단된다.
자바 프로그램은 안전하다 : 포인터의 개념이 없다.
프로그램 작성이 쉽다 : 포인터 개념이 없다.(이게 왜 웃긴거지 미친건가 ㅎ)
실행 속도를 개선하기 위해 JIT 컴파일러가 사용된다 : 원래 실행이 c나 c++보다 느리지만 실행 도중 프로그램을 해당 CPU의 기계어 코드로 컴파일하고 CPU가 바로 기계어를 실행하도록하는 JIT 컴파일 기법을 이용하므로 비슷하다.
연습문제
Q1. C언어 소스 파일의 확장자는 .C이고 컴파일하면 .obj 파일이 만들어진다. 그러면 자바 소스 파일의 확장자와 컴파일된 파일의 확장자는 무엇인가?
소스 파일의 확장자는 .java이고 컴파일하면 .class가 생성된다.(본문 정리 중 소스와 클래스 파일의 내용이 이에 해당되는 듯?)
Q2. 자바 언어를 처음 개발한 사람은?
제임스 고슬링
Q3. 언어 개발 순서
Q4. 자바 언어를 처음 개발한 목적은 무엇이었는가?
기존의 프로그래밍 언어는 플랫폼 간에 호환성이 없었고, 다양한 플랫폼을 갖는 가전제품을 위해 플랫폼에 독립적인 언어의 필요성이 대두 되었다. 가전 제품에 들어가는 제어 장치는 매우 적은 양의 메모리를 사용해야 했다.
Q5. 개발자가 작성한 자바 프로그램을 직접 실행하는 것은 무엇인가?
이클립스
Q6. "자바는 한 번 작성하면 하드웨어나 운영체제에 상관없이 어디에서나 실행가능하다."를 줄여서 무엇이라 하나?
WORA
Q7. 자바 언어에 대한 설명 중 맞는 것은?
자바의 컴파일된 클래스 파일은 바이트 코드이다.
자바의 클래스 파일은 자바 가상 기계가 설치된 어떤 곳에서도 실행된다.
자바는 링크 과정 없이 컴파일러가 바로 바이트 코드로 생성한다.
Q8. 자바 응용프로그램을 개발하고자 한다면 JDK와 JRE는 중 어떤 것이 필요한가?
JDK
Q9. 다음 중 자바의 특징을 맞게 설명한 것은?
가비지 컬렉션의 기능이 있어 스스로 사용하지 않는 메모리를 수거한다.
포인터가 없기 때문에 프로그램 작성이 쉽다.
서로 관련 있는 클래스 코드들을 패키지에 모아 베포한다.
Q10. 다음 자바 소스 프로그램은 어떤 이름의 파일로 저장해야 하는가?
public class Shape{
public static void main(String [] args) {
System.out.println("Shape") ;
}
}
Shape.java
Q11. 하나의 자바 파일에 저장된 소스 코드이다.
public class A{
........
class B{
........
}
}
class C{
........
class D{
........
}
}
이 자바 소스 코드를 저장하는 파일이름은 무엇인가?
이 자바 소스가 컴파일되면 어떤 클래스 파일이 생성되는가?
A.java, A.class, A$B.class, C.class, C$D.class
Q12. 용어들 중 거리가 가까운 것은?
플랫폼 독립적, 자바 프로그램은 자바 가상 기계가 있는 곳에는 모두 실행됨, WORA
Q1. 화면에 다음을 출력하는 자바 프로그램을 작성하라.
Welcome!!
자바 세계로 오신 것을 환영합니다.
public class Welcone {
public static void main(String[ ] args) {
System.out.print("Welcome!!\n");
System.out.println("자바 세계로 오신 것을 환영합니다.");
}
}
print, printf, println 의 차이점을 알게 되었다 오!
Q2. 화면에 다음을 출력하는 자바 프로그램을 작성하라.
sorry~~
재밌어서 미안합니다~~
public class Sorry {
public static void main(String [] args) {
System.out.printf("sorry~~\n재밌어서 미안합니다~~");
}
}