자바 언어는 플랫폼에 독립적으로 설계되었다.
자바 코드는 운영체제나 CPU 등 플랫폼에 상관없이 자바 가상 기계(JVM)만 있으면 어떤 컴퓨터에서든 동일하게 실행된다. 이를 WORA(Write Once Run Anywhere) 라고 한다.
한 번 작성된 자바 프로그램은 수정 없이 실행 가능하다.
바이트 코드(byte code)는 자바 컴파일러가 자바 소스 프로그램을 컴파일한 일종의 기계어로서, 자바 가상 기계(Java Virtual Machine, JVM)에 의해 실행되는 바이너리 코드(binary code)이다.
바이트 코드는 자바 가상 기계에 의해 인터프리터 방식으로 한 명령씩 해석되어 실행된다.
자바 프로그램 입장에서 볼때 자바 가상 기계는 운영체제이자 컴퓨터이다.
자바 가상 기계는 플랫폼에 적합하게 서로 다르게 구현되므로 플랫폼 종속적이다.
자바 컴파일러는 자바 소스 프로그램을 컴파일하여 바이트 코드를 클래스 파일(class file)에 저장한다.
자바 프로그램이 실행되기 위해서는 개발자가 작성한 자바 프로그램 외에 자바 플랫폼에서 제공하는 다양한 클래스 라이브러리(자바 APIs)가 반드시 필요하다.
C/C++는 컴파일한 목적 파일을 링크시켜 하나의 실행파일(exe)을 만들며, 이 실행 파일 하나만 있으면 실행 가능하다. 그리고 이 실행 파일은 컴퓨터의 CPU가 바로 실행한다.
Java의 경우 링크 과정이 없으며 자바 가상 기계가 컴파일된 클래스 파일을 실행한다.
JDK(Java Development Kit)는 자바 개발자를 위한 상업용 소프트웨어로, 자바 컴파일러 등의 개발 도구와 JRE(Java Runtime Environment)로 구성된다.
JRE는 자바 응용프로그램이 실행될 때 필요한 소프트웨어들로 개발자가 활용할 수 있는 자바 API(이미 컴파일된 다양한 클래스 라이브러리)와 자바 가상 기계를 포함한다.
IDE(Integrated Development Environment)란 소스 코드 편집, 컴파일, 디버깅을 한꺼번에 할 수 있는 소프트웨어 통합 개발 환경을 일컫는다.
C/C++ → 비주얼 스튜디오 / Java → 이클립스(eclipse)
이클립스는 자바 언어로 개발된 데스크톱 응용프로그램이다.
플랫폼 독립성 - 자바 가상 기계만 있으면 자바 프로그램의 실행이 가능하다.
객체 지향 - 캡슐화, 상속, 다형성 등을 지원한다. 객체 지향 프로그램은 해결할 과제를 실제 세상의 객체와 객체간의 상호 관계로 모델링하여 인간의 사고에 가깝게 표현한다.
클래스로 캡슐화 - 자바는 변수나 메소드는 반드시 클래스 내에 구현하도록 한다.
소스와 클래스 파일 - 자바 소스가 컴파일된 클래스 파일(.class)는 반드시 하나의 자바 클래스만이 들어있다.
실행 코드 배포 - 다수의 클래스 파일을 jar 파일 형태로 압축하여 배포 및 실행이 가능하다.
패키지 - 서로 관련 있는 클래스는 패키지로 묶어 관리한다.
멀티스레드 - 하나의 자바 프로그램에서 다수의 스레드가 동시에 실행할 수 있는 환경을 지원한다.
가비지 컬렉션 - 자바 언어는 메모리를 반환하는 기능이 없다. 프로그램 내에 사용되지 않는 메모리는 자바 가상 기계의 가비지 컬렌셕 기능에 의해 자동으로 회수된다.
실시간 응용 시스템에 부적합 - 자바 응용프로그램은 실행 도중 예측할 수 없는 시점에 가비지 컬렉션이 실행되므로, 프로그램이 일시적으로 중단된다.
public class Hello {
...
}
public 은 다른 클래스에서 Hello 클래스를 자유롭게 참조할 수 있다.
public static void main(String[] args) {
...
}
main()은 반드시 public static void 로 선언되어야 하며, 한 클래스는 두 개 이상의 main()을 가질 수 없다.
메소드
C/C++ 함수를 자바에서는 메소드(method)라고 부르며, 반드시 클래스 내에 작성되어야 한다.
화면 출력
System.out.println("Hello"); // "Hello" 문자출력
정수, 문자, 문자열 등 데이터를 화면에 출력하기 위해 System.out.println()을 이용한다.
식별자(identifier): 클래수, 변수, 상수, 메소드에 붙이는 이름을 말한다.
식별자 이름 규칙
특수문자 ‘_’, ‘$’만 사용 가능하다.
한글을 사용할 수 있다.
숫자는 사용 가능하나, 첫 번째 문자로는 사용할 수 없다.
if, while등 자바 언어의 키워드는 사용할 수 없다.
true, false, null은 사용할 수 없다.
대소문자를 구별한다.
길이 제한이 없다.
Java 10부터는 var 키워드를 사용하여 변수의 타입을 생략하고 간단히 변수를 선언할 수 있다.
컴파일러는 var 키워드로 선언된 문장을 추론하여 변수의 타입을 자동으로 결정한다.
var price = 200; // price는 int 타입으로 결정
var name = "junyong"; // name은 String 타입으로 결정
var pi = 3.14; // pi는 double 타입으로 결정
var point = new Point(); // point는 Point 타입으로 결정
var v = new Vertor<Integer>(); // v는 Vector<integer> 타입으로 결정
var 키워드는 지역 변수에만 한정되며, 초기값이 주어지지 않으면 오류가 발생한다.
public class Var {
public static void main(String[] args) {
var price = 200; // int 타입
var name = "junyong"; // String 타입
var pi = 3.14; // double 타입
System.out.println("price = " + (price + 1000));
System.out.println("name = " + name);
System.out.println("pi = " + pi * 10);
}
}
결과: price = 1200 // name = junyong // pi = 31.4
키보드에서 입력된 키를 문자나, 정수, 실수, 문자열등 사용자가 원하는 타입으로 변환해주는 고수준(high-level) 스트림 클래스 Scanner를 사용할 것을 권한다.
Scanner는 키 입력을 위한 목적으로 자바 패키지에서 제공하는 클래스이다.
Scanner scanner = new Scanner(System.in);
Scanner 클래스는 사용자가 입력하는 키 값을 공백으로 구분되는 토큰 단위로 읽는다.
Scanner를 사용하기 위해서는 프로그램의 맨 앞줄에 다음 import 문이 필요하다.
import java.util.Scanner;
import문은 Scanner 클래스의 결로명이 java.util.Scanner임을 알려준다.
Scanner 스트림 닫기 : Scanner의 사용을 종료하려면 다음과 같이 닫아 준다.
scanner.close();
import java.util.Scanner;
public class ScannerEx {
public static void main(String args[]) {
System.out.println("이름, 도시, 나이, 체중, 독신 여부를 빈칸으로 분리하여 입력하세요");
Scanner scanner = new Scanner(System.in);
String name = scanner.next(); // 문자열 토큰 읽기
System.out.println("당신의 이름은 " + name + "입니다.");
String city = scanner.next(); // 문자열 토큰 읽기
System.out.println("당신이 사는 도시는 " + city + "입니다.");
int age = scanner.nextInt(); // 정수 토큰 읽기
System.out.println("당신의 나이는 " + age + "살입니다. ");
double weight = scanner.nextDouble(); // 실수 토큰 읽기
System.out.println("당신의 체중은 " + weight + "kg입니다. ");
boolean single = scanner.nextBoolean(); // 논리 토큰 읽기
System.out.println("당신의 독신 여부는 " + single + "입니다. ");
scanner.close(); // scanner 스트림 닫기
}
}
기존에 나는 터미널에서 “java -version” 입력했을 때, JDK 버전이 18이였다.
하지만, 11로 바꿔야 하는 방법을 몰라서 여러 구글링과 커뮤니티의 도움을 받아 해결했다.
어떻게 JDK 버전을 18 -> 11로 해결하게 됐는지 정리한다.
Java IDE인 IntellJ에서 JDK버전을 바꾸는 방법(m1 macOS 전용)
이 글은 컴퓨터학부 확률과통계 수업에서 배운 자료들을 정리한 내용입니다.
4.1 The Uniform Distribution
4.2 The Exponential Distribution + ALOHA
4.3 The Gamma Distribution
이 카테고리는 경영학부 전자금융의 이해 수업을 듣고 정리한 내용을 바탕으로 글을 작성하였습니다.