Java 특징
Write Once, Run Anywhere
컴파일 후 생성된 바이트코드는 JVM에서 실행된다.
다른 OS에서 컴파일 된 바이트코드도 다른 OS의 JVM에서 실행될 수 있다.
Garbage Collection(GC)
- 더 이상 사용하지 않는 메모리를 자동으로 정리하는 기능
String hello = new String("Helllo");
System.out.println(hello);
hello =null;
객체지향 특징
- OOP is A.P.I.E
- Abstraction
- Polymorphism
- Inheritance
- Encapsulation
문법
변수(Variable)란?
- 수학에서는 변하는 수
- 컴퓨터에서는 메모리 공간(그릇)
- 메모리 공간에 값(value)을 할당(assign) 후 사용
- 공간의 크기는 타입별로 달라짐
형(Type)이란?
- long형에는 숫자 끝에 l이나L을, float형에는 f나F를 붙여서 할당한다.
- 문자는 single quotation으로 문자 하나를 표현하고 문자열은 double quotation으로 문자 여러개르 표현함
- 기억할 ASCII 코드
- 실수의 연산은 근사값으로 하므로 정확하지 않다. 따라서 자리수를 알고 있다면 int로 형변환 후 계산하거나 BigDecimal을 사용하거나 반올림을 하여 사용한다.
- float과 double은 정밀도 차이이다.
형 변환(Type Casting)이란?
- 변수의 타입을 다른 타입으로 변환하는 것
- primitive는 primitive끼리 reference는 reference끼리 형 변환 가능
- boolean은 다른 기본 타입과 호환되지 않음
- 기본 타입과 참조형의 형변환을 위해서 Wrapper 클래스 사용
- 형 변호나 방법
- 형 변환 연산자(괄호) 사용
double d = 100.5;
int result = (ind)d;
- 타입의 표현 범위가 큰형을 작은형으로 변환할 경우 값 손실이 발생하나 작은형을 큰형으로 변환할 경우 값 손실이 없다.
- 전자의 경우 명시적 형 변환을 해야하나 후자의 경우 묵시적 형 변환(promotion)이 가능하다
- 값의 크기, 타입의 크기가 아닌 타입의 표현 범위가 커지는 방향으로 할당할 경우는 묵시적 형변환 발생
- float이 long보다 작지만 실수형이 정수형보다 타입의 표현 범위가 크다.
- byte -> short -> int -> long -> float -> double
char ->
- 묵시적 형변환은 JVM이 서비스 해줌
- 값의 크기가 더 작아도 타입의 표현 범위가 더 크다면 명시적 형 변환이 필요하다.
- byte형에 할당할 때 값이 byte 범위 일경우 예외적으로 명시적 형변환 없이 정수 할당이 가능하다.
연산자
- 우선순위: 최단산쉬관논삼대
- 산술 이항 연산자는 연산 전에 피 연산자의 타입을 일치시킨다
- 피연산자의 크기가 4바이트(int)미만이면 int로 변경한 후에 연산 진행
- 두개의 피연산자 중 큰 타입으로 형 변환 후 연산 진행
- 단항 연산자는 변수에만 사용할 수 있다.
- 쉬프트 연산자
- '<<' : 빈자리 0으로 채움, 곱하기 2와 동일
- '>>' : 빈자리 음수는 1, 양수는 0으로 채움(부호를 유지시킴), 나누기 2와 동일
- '>>>' : 빈자리 0으로 채움(무조건 양수)
- short circuit 연산자
-논리 연산자는 뒤에까지 검사하지만 short circuit 연산자는 값이 결정될 경우 추가적인 검사는 하지 않는다.(ex. &&, ||)
Random 수 구현하기
- Math.random() : 0.0<=d<1.0
- Random rand = new Random();rand.nextInt(N);: rand.nextInt(N) -> 0<=i<N,rand.nextInt(N)+1 -> 1<=i<=N
조건문(Conditional Statement)
- if 조건 : 논리형, 비교식, Method Call
- swithch 조건 : 정수호환, Enum(Day.Monday), Class.Object(Wrapper 클래스 타입), Method Call
- Nested if: 중첩 if
반복문
- 개행문자 %n은 \n과 달리 os독립적이다.
- for
- 변수초기화, 반복 조건, 증감식
- 실행문
- 몇번 반복할지 예측이 될 때 주로 쓴다.
- while
-변수초기화
- 반복조건
- 실행문
- 증감식
- 몇번 반복할지 정확하지 않을 때 주로 쓴다.
- break, continue
- 가까운 반복문에 작용함
- label : 해당하는 라벨에 작용함
배열
- 일괄처리를 위한 자료구조이다.
- 일차원 선형 구조이다.
- 동일한 타입의 데이터 0개 이상을 하나의 연속된 메모리 공간에서 관리하는 것
- 요소에 접근하는 속도가 매우 빠르다
- 한번 생성하면 크기 변경 불가
- ex. int[] points = new int[3];
- 반복문을 돌릴때 리터럴값이 아닌 배멸.lenght 값으로 사용하자
- 배열과 생성을 따로 할 때 'new 타입'를 생략할 수 없다.
- 배열을 만들때 []의 위치는 어디든 상관없다.
- 배열 선언시 배열에 저장하는 타입에 따라 초기화된다.
- ex. 참조형 저장시 null을 default값으로 가짐
for each with Array
int intArray[] = {1,3,5,7,9};
for(int x : intArray){
System.out.println(x);
}
- 인덱스를 안쓸때는 이런식으로 편하게 쓸 수 있다.
- forEach 문장은 read only 이다. -> 수정가능하나 이를 다시 접근할 시 에러가 발생하므로 수정하지 말자(ConcurrentModificationException)
- Array is Immutable
- 최초 메모리 할당 이후 변경할 수 없음
- 개별 요소는 다른 값으로 변경이 가능하나, 삭제할 수는 없음
- 크기를 늘리거나 줄일 수 없음