하드웨어 > 운영체제 > 프로그램
소스코드.c -컴파일러가컴파일-> 목적코드.obj -링커가링크-> 실행파일.exe
다른 운영체제에서 실행하려면 다시 컴파일, 링크 해야한다
하드웨어 > 운영체제 > JVM(자바가상머신) > 클래스파일
소스코드.java -컴파일러(javac.exe)-> 바이트코드.class -자바런처(java.exe)가 JVM 구동 -> 자바 프로그램 구동
자바는 링크 과정(바이트코드를 실행파일로 만드는 과정)이 없다.
자바는 OS가 바뀌어도 JVM으로 실행이 가능해서 확장성이 좋다.
main() 메소드를 가진 클래스부터 실행한다.
필요할 때 클래스 파일을 로딩해서 적은 메모리로도 실행 가능하다.
자바 개발 환경
JDK의 bin 디렉토리에 포함된 주요 개발 도구
자바 실행 환경
api = application programming interface
JDK에 포함된 클래스 라이브러리이다.
주요한 기능들을 미리 구현해놓은 클래스 라이브러리의 집합이다.
API를 이용해서 쉽고 빠르게 개발할 수 있다.
관련된 클래스들을 묶어 놓은 것을 패키지라 한다.
boolean
1bit
true, false
1이나 0으로 사용할 수 없음
char
2byte
//아스키코드값을 활용해 char -> int
char c = '6';
System.out.println(c-48);
//String -> int
String s = "25";
System.out.println(Integer.parseInt(s));
정수 자료형
실수 자료형
레퍼런스 타입
var 키워드는 지역 변수에 선언에만 사용할 수 있다.
컴파일러가 변수 타입을 추론한다
var 키워드로 변수를 선언할 때는 선언과 동시에 초기화 해야한다.
var num = 3;
var alpha = 'a';
링크텍스트
final은 상수 선언에 사용한다.
어떻게 사용하느냐에 따라 의미가 다르다
위 링크 참고할 것
final 필드의 경우 한번만 초기화함
(자료형)자료
의 형식으로 사용함 public class test {
public static void main(String[] args) {
int num = 3;
float num2 = (float)num;
System.out.print(num2);
}
}
import java.util.Scanner;
public class test {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
//Scanner.next()로 String 입력받는다
String name = s.next();
//다른 자료형은 next자료형이름(); 으로 입력받는다
int age = s.nextInt();
System.out.print(name+" "+age);
}
}
배열도 인스턴스(객체)다.
public static void main(String[] args) {
//참조변수의 선언
int[] ref;
//객체의 생성
ref = new int[3];
}
참조변수 ref가 인스턴스를 가리킨다.
//배열 선언
int arr1[]; //자료형 배열명[];
int[] arr2; //자료형[] 배열명;
//배열 생성
arr1 = new int[3]; //배열명 = new 자료형[칸수]
int arr3[] = new int[3]; //배열 선언과 생성 동시에
//배열 선언과 동시에 초기화
int arr4[] = {1,2,3}; // 원소의 개수만큼 공간 생성
주의
자바 배열의 길이는 배열명.length로 접근할 수 있다.
메소드 (배열명.length()) 가 아님에 주의하자.
//배열 선언
int arr1[][];
int[][] arr2;
int[] arr3[];
//배열 생성
arr1 = new int[3][3];
//배열 생성과 선언을 동시에
int arr4[][] = new int[3][3];
//배열 생성과 동시에 초기화
int arr5[][] = {
{1,2,3},
{4,5,6},
{7,8,9}
};
2차원 배열을 다음과 같이 생성하면
int[][] arr = new int[3][4]
arr가 참조하는 배열은 각 행이 arr[0]
, arr[1]
, arr[2]
인 형태이다. 따라서 arr.length
는3 이 된다.
그리고 각 행의 arr가 길이가 4인 배열을 참조한다. 즉 arr[0].length
는 4가 된다.
public class Main {
public static void main(String[] args) {
int[][] arr = new int[3][4];
System.out.println(arr.length); //3
System.out.println(arr[0].length); //4
}
}
정방형 배열은 각 행의 열의 개수가 동일한 배열이다.
비정방형 배열은 각 행의 열의 개수가 다른 배열이다.
int arr[][] = new int[3][];
arr[0] = new int[3];
arr[1] = new int[4];
arr[2] = new int[5];
먼저 행만 new로 생성해 놓고 각 행에 대해 열을 new로 생성해서 비정방형 배열을 선언할 수 있다.
\0
public static void main(String[] args) {
int arr[] = {1,2,3};
System.out.print(arr.length);
}
int arr[][]= {
{1,2,3},
{4,5},
{6}
};
//행의 개수
System.out.println(arr.length);
//행 0의 열의 개수
System.out.println(arr[0].length);
2차원 배열에서는 배열명.length로 행의 개수를 참조한다.
배열명[인덱스].length로 해당 행의 열의 개수를 참조한다.
int arr[] = {1,2,3};
for (int data : arr) {
System.out.println(data);
}
for each문을 이용해서 배열의 원소를 하나씩 참조할 수 있다.
배열을 반환하는 메소드는 배열의 레퍼런스를 반환하는 것이다.
public class test {
public int[] makeArr() {
int[] arr = {1,2,3};
//배열의 레퍼런스를 반환함
return arr;
}
public static void main(String[] args) {
test t = new test();
int arr[] = t.makeArr();
System.out.println(arr[0]);
}
}
makeArr은 static 메소드가 아니라 클래스를 생성 후 메소드를 사용했다.
그리고 makeArr에서는 배열의 레퍼런스를 반환한다.
함수호출이 끝난다고 해서 메모리공간의 배열이 사라지지 않고, 참조변수 arr이 배열을 가리킨다.
생성자는 객체 멤버의 초기화를 위해 객체 생성 시 최초 1회만 호출되는 함수다.
생성자의 조건
또한 생성자에 매개변수를 전달해서 객체의 인스턴스를 초기화 할 수 있다.
public class test {
//멤버변수
int num1;
String word;
public test() {
num1 = 10;
word = "무야호";
}
//생성자
public test(int n, String s) {
//생성자 매개변수를 이용해 멤버 변수 초기화
num1 = n;
word = s;
}
public static void main(String[] args) {
test t = new test();
System.out.println(t.num1);
}
}
생성자를 이용해 객체를 생성한다.
static 멤버변수, 멤버함수는 객체 내에 존재하지 않는다.
jvm이 클래스 로딩할 때 메모리에 생성되며 해당 타입의 객체들이 공유한다.
객체를 생성하지 않아도 변수명, 함수명 만으로 참조, 호출할 수 있다.
public class test {
//멤버변수
int num1;
String word;
public test() {
num1 = 10;
word = "무야호";
}
//생성자
public test(int n, String s) {
//생성자 매개변수를 이용해 멤버 변수 초기화
num1 = n;
word = s;
}
public static int addNum(int a,int b) {return a+b;}
public static void main(String[] args) {
System.out.println(addNum(2,3));
}
}
addNum은 static 함수여서 객체를 생성하지 않아도 호출할 수 있다.