언어/JAVA

[JAVA] ch01. 자바 시작

rngPwns 2024. 12. 28. 11:43

1.2 자바의 출현과 WORA

  • 자바는 타 언어와 달리 플랫폼 독립성 가짐(WORA)
  • 자바 가상기계와 바이트코드
    • 바이트코드: 자바 컴파일러가 자바소스 프로그램을 컴파일한 일종의 기계어(중립적 코드)
      • 자바가상기계(JVM)에 의해 실행되는 바이너리 코드- 플랫폼 종속적
      • CPU에 의해 직접 실행되지 않고 자바가상기계에 의해 interpreter바이식으로 한 명령씩 해석되어 실행
        • 자바 프로그램의 입장에서 JVM은 운영체제이자 컴퓨터.
          • 플랫폼에 적합하게 서로 다르게 구현-> 플랫폼 종속적(BUT 동일한 자바 프로그램에게 동일한 인터페이스와 실행환경 제공

자바 컴파일러는 자바소스프로그램을 컴파일하여 바이트코드를 클래스파일에 저장(자바프로그램 실행을 위해서는 개발자가 작성한 자바 프로그램 외에 자바 플랫폼에서 제공하는 다양한 클래스 라이브러리(자바 APIs) 반드시 필요

 

  • 자바 가상기계는 사용자가 작성한 클래스 파일 로딩-> 바이트 코드 하나씩 실행.
  • 프로그램 실행 도중 JRE의 클래스 파일이나 사용자가 작성한 다른 클래스 파일이 필요하면 그 때 필요한 클래스파일 로딩&실행.
    • 메모리가 충분한 PC에서는 실행 중 클래스 로딩으로 인한 시간 지연 줄이기 위해 사용자 클래스 파일, 필요한 JRE 파일 미리 로딩해둠

 

1.3 개발 도구와 자바 플랫폼

JDK와 JRE

  • JDK(JAVA Development Kit): 자바 개발자에게 무료배포하는 소프트웨어 - 자바 컴파일러등의 개발도구와 JRE(JAVA Runtime Environment: 자바 API-이미 컴파일된 다양한 클래스 라이브러리, 자바가상기계 포함)로 구성. 

  • 모듈: 자바 패키지들, 이미지, XML파일 등의 자원을 묶은 단위

 

1.5 이클립스를 이용한 자바 프로그램 개발

  • IDE: 소스코드 편집, 컴파일, 디버깅을 한꺼번에 할 수 있는 소프트웨어 통합 개발 환경(Visual studio, 이클립스)

 

1.7 자바의 특징

클래스 D는 클래스 C 내에 작성된 내부클래스

  • 플랫폼 독립성, 객체지향, 클래스로 캡슐화(변수나 메소드는 반드시 클래스 내에 구현, 클래스 안에 내부클래스 만들 수 있음)
  • 자바소스가 컴파일된 클래스파일(.class)에는 반드시 하나의 자바 클래스만이 들어있다.
    • 하나의 자바소스파일에 여러개의 클래스를 작성한 경우, 컴파일하면 클래스마다 별도의 클래스파일 생성
  • 하나의 자바 소스 파일에 작성된 클래스 중 오직 한 클래스만 public으로 선언할 수 있다.
    • 소스파일 내에 public으로 선언된 클래스의 이름과 소스파일의 이름이 동일하게 작성되어야 한다.
  • 자바응용프로그램은 한 개 이상의 클래스파일로 구성, 다수의 클래스파일을 jar 파일형태로 압축하여 배포 및 실행 가능.
    • 자바의 실행은 main()메소드에서 시작, 하나의 클래스 파일에 두 개 이상의 main()메소드가 있을 수 없다.
      • 각 클래스 파일이 main()메소드 갖는 것은 상관없음.
  • 서로 관련있는 클래스는 패키지로 묶어 관리한다.(폴더처럼)
    • ex. java.lang.System 클래스는 java\lang 폴더의 System. class 파일. 여기서 java.lang : 패키지
  • 멀티스레드: 하나의 자바 프로그램에서 다수의 스레드가 동시에 실행할 수 있는 환경 지원.
    • 타언어들과 달리 운영체제의 도움 없이 멀티스레드 프로그래밍 가능
  • 가비지 컬렉션
    • 자바언어는 메모리를 할당받는 기능은 있지만 메모리를 반환하는 기능은 없음. -> 프로그램 내에 사용되지 않는 메모리는 자바가상기계의 가비지 컬렉션 기능에 의해 자동으로 회수. 
  • 실시간 응용 시스템에 부적합.
    • 자바 응용프로그램은 실행도중 예측할 수 없는 시점에 가비지컬렉션 실행 -> 프로그램 실행이 일시적으로 중단. 
      • 일정시간 내에 반드시 실행결과를 내야만 하는 실시간 시스템에는 적합 x
  • 타입체크 매우엄격, 포인터개녑 x -> 안전

'언어 > JAVA' 카테고리의 다른 글

ch05. 상속  (0) 2025.03.26
[JAVA] ch04. 클래스와 객체  (0) 2025.01.06
[JAVA] ch03. 반복문과 배열 그리고 예외 처리  (0) 2025.01.03
[JAVA] ch02. 자바 기본 프로그래밍  (0) 2025.01.01