자바 프로그램을 개발하기 위해
javac 명령어로 컴파일java 명령어 사용한다.자바 프로그램은 완전한 기계어가 아닌 바이트 코드 파일 (.class)로 구성된다. 바이트 코드 파일은 완전한 기계어 아님 → 운영체제에서 바로 실행할 수 없고 JVM이라는 번역기 필요하다.
java 명령어를 실행하면 JVM은 바이트 코드 파일을 해당 운영체제에서 실행 가능한 기계어로 번역하여 실행
| 정수형 | 문자형 | 실수형 | 논리형 | |
|---|---|---|---|---|
| 1바이트 | byte | - | - | boolean |
| 2바이트 | short | char | - | - |
| 4바이트 | int | - | float | - |
| 8바이트 | long | - | double | - |
int로 십진수 10을 표현하면
00000000 00000000 00000000 00001010 로 표현하게 되면 가장 좌측의 비트 하나는 부호를 나타내는 부호 비트이다.
byte는 1바이트 단위의 자료형 동영상, 음악 파일, 실행 파일의 자료를 처리할 때 사용하고 short는 2바이트 단위의 자료형 C/C++ 언어와 호환 시 사용한다.
실수는 정수보다 정밀하기 때문에 정수와 다른 방식으로 표현한다.


자바에서는 실수의 기본 타입은 dobule을 사용 함
지수와 가수로 나타내는 부동 소수점 방식에서는 지수부가 0을 표현할 수 없기 때문에 약간의 오차가 발생할 수 있다
public class DoubleTest2 {
public static void main(String[] args) {
double dnum = 1;
for(int i = 0; i<10000; i++) {
dnum = dnum + 0.1;
}
System.out.println(dnum);
}
}
위 코드를 출력하면 1001.000000000159가 출력된다.
문자도 정수로 표현한다.
어떤 문자를 컴퓨터 내부에서 표현하기 위해 특정 정수 값을 정의 (A 는 65)
문자세트 : 각 문자를 얼마로 표현할 것인지 코드 값을 모아둔 것을 문자세트(charater set)라 함
(ex. ASKII, euc-kr, utf-8, utf-16)
자바는 문자를 나타내기 위해 전세계 표준인 UNICODE를 사용한다. utf-16 인코딩을 사용 (모든 문자를 2바이트로 표시)
character set: 문자를 숫자로 변환한 값의 세트
encoding: 문자가 숫자로 변환되는 것
decoding: 숫자에서 다시 문자로 변환되는 것
ASKII code: 알파벳과 숫자 특수 문자등을 1바이트에 표현하는데 사용하는 문자세트
UNICODE: 전 세계 표준으로 만든 문자 세트
UTF-8: 1바이트에서 4바이트까지 다양하게 문자를 표현할 수 있음
UTF-16: 2바이트로 문자를 표현
public class LocalVariableType {
public static void main(String[] args) {
var i = 10;
var j = 10.0;
var str = "hello";
System.out.println(i);
System.out.println(j);
System.out.println(str);
str = "test";
//str = 3;
}
}
== , != 연산과 NullPointerException자바의 타입은 크게 기본타입과 참조타입으로 분류된다. 참조타입이란 객체의 번지를 참조하는 타입으로 배열, 열거, 클래스, 인터페이스를 말한다.
기본타입으로 선언된 변수와 참조 타입으로 선언된 변수의 차이점은 저장되는 값.
기본타입은 실제 값을 저장하지만 참조타입은 메모리의 번지를 변수 안에 저장.
JVM은 운영체제에서 할당받은 메모리영역을 (Runtime Data Area) 아래와 같이 세부영역으로 구분한다.

프레임 내부에는 로컬 변수 스택이 있는데, 기본 타입 변수와 참조 타입 변수가 추가되거나 제거된다. 스택영역에 변수가 생성되는 시점은 초기화가 될 때, 즉 최초로 변수에 값이 저장될 때. 변수는 선언된 블록 안에서만 스택에 존재하고 블록을 벗어나면 스택에서 제거된다.
데이터 중 몇 가지로 한정된 값만 가지는 경우가 있다. 예를 들어 요일에 대한 데이터는 월~일 7개의 값만 가지고 계절에 대한 데이터는 봄~겨울 4개의 값만 가진다. 이처럼 한정된 값만을 갖는 타입을 열거 타입이라 한다.
열거 타입은 한정된 값인 열거 상수 중에서 하나의 상수를 저장하는 타입
열거 타입을 선언하기 위해서는 먼저 열거타입의 이름을 정하고 해당 이름으로 소스파일을(.java) 생성해야한다.
public enum Week {
MON,
TUE,
WED,
THUR,
FRI,
SAT,
SUN
}
위처럼 선언한 열거 타입을 사용하여 변수를 선언할 수 있다.
Week today;
today 변수에 저장할 수 있는 것은 Week에 선언된 7개의 열거 상수 중 하나
today = Week.FRI;
열거타입 변수 Week의 경우 MON~SUN까지의 열거상수는 총 7개의 Week 객체로 생성된다. (힙 영역에 올라감) 그리고 메소드 영역에 생성된 열거 상수가 해당 Week 객체를 각각 참조하게 된다.

열거 타입 변수 today는 스택 영역에 생성됨. today에 저장되는 값은 Week.SUN 열거 상수가 참조하는 객체의 번지이다.

따라서 아래의 코드는 출력값이 true가 된다.
Week week1 = Week.SAT;
Week week2 = Week.SAT;
System.out.println(week1 == week2);
객체 지향 프로그램을 구현하기 위해서 객체를 정의 하고, 각 객체별로 제공하는 기능들을 구현하고, 각 객체가 제공하는 기능들 간의 소통(메세지 전달)을 통하여 객체간의 협력을 구현한다.
클래스는 객체의 청사진이라고 생각하면 된다.
객체의 속성은 클래스의 맴버 변수로 선언한다.
학생 클래스
public class Student {
int studentNumber;
String studentName;
int majorCode;
String majorName;
int grade;
}
주문 클래스
public class Order {
int orderId;
String buyerId;
String sellerId;
int productId;
String orderDate;
}
함수 구현 예제
public class FunctionTest {
public static int addNum(int num1, int num2) {
int result;
result = num1 + num2;
return result;
}
public static void sayHello(String greeting) {
System.out.println(greeting);
}
public static int calcSum() {
int sum = 0;
int i;
for(i = 0; i<=100; i++) {
sum += i;
}
return sum;
}
public static void main(String[] args) {
int n1 = 10;
int n2 = 20;
int total = addNum(n1, n2);
sayHello("안녕하세요");
int num = calcSum();
System.out.println(total);
System.out.println(num);
}
}

