Java 기본 및 응용

김민혁·2022년 1월 17일
0

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)이란?

  • 데이터의 종류
    • Primitive Type(기본형)
      • 미리 정해진 크기의 메모리 사이즈로 표현
      • 변수 자체에 값 저장
    • Reference Type(참조형)
      • 크기가 미리 정해질 수 없는 데이터의 표현
      • 변수에는 실제 값을 참조할 수 있는 주소만 저장
  • 자바에서는 boolean형에 true와 false만 가능(0이나 1 불가능)
  • boolean 타입의 크기는 jdk 구현 방식에 따라 다르다
  • 값의 범위에서 비트 하나가 적은 이유는 한 비트는 sign bit로 사용되기 때문이다.
  • int는 20억쯤이라는 것 정도는 기억하자
  • int와 double은 정수형과 실수형의 기본형이다.
  • 프로그램에서 1000단위 구분자로 쉼표 대신 언더바를 쓴다
  • ex. 1000_000_000_000_000
  • 리터럴로 정수값을 적을 때 그것이 int 범위를 넘어선다면 L을 붙여서 long타입임을 명시해줘야 한다.
  • Java에서 long이상의 매우 큰 정수를 사용할 때 BingInteger 객체를 생성하여 사용한다.
    BigInteger l2 = new; BigInteger("100000000000000000000000000000");
  • long형에는 숫자 끝에 l이나L을, float형에는 f나F를 붙여서 할당한다.
  • 문자는 single quotation으로 문자 하나를 표현하고 문자열은 double quotation으로 문자 여러개르 표현함
  • 기억할 ASCII 코드
    • 48: '0'
    • 65: 'A'
    • 97: 'a'
  • 실수의 연산은 근사값으로 하므로 정확하지 않다. 따라서 자리수를 알고 있다면 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
    • 최초 메모리 할당 이후 변경할 수 없음
    • 개별 요소는 다른 값으로 변경이 가능하나, 삭제할 수는 없음
    • 크기를 늘리거나 줄일 수 없음
profile
학생

0개의 댓글