1. jvm이란 어느 기기에서나 java를 실행 시킬 수 있는 가상의 기기를 만들어 주는것
(가상의 기기를 만들어주는걸 가상 머신 이라한다)
만약 JVM이 없으면 모바일에서,데스크탑에서 설정들 다 일일이 해줘야한다.
2. java컴파일러는 java파일을 class파일로 변환해주는 작업이다. 컴파일을 하면 바이트 코드로 변환해서 그게 class파일이 된다.
3. JVM 구성
4. java의 놀이터에 대해
*JRE 는 java runtime environment인 자바 실행 환경 이라는걸 뜻한다. 즉 jre는 .class파일만 실행한다.
*JDK 는 java development kit인 자바 개발 키트 라는걸 뜻한다.jdk는 .java파일들을 .class파일로 변환해주는 컴파일 기능이 있다. 그리고 코드를 디버깅 하는 jdb등의 기능도 있고 jdk가 jre를 포함한다.
5. 기본형 변수는 boolean,char,byte,short,int,long,float,double형등이 있다.
byte,short,int,long범위↓
float,double범위 ↓
float floatNumber = 0.123f; // float 는 4byte 로 3.4 * 10^38 범위를 표현하는 실수값
double doubleNumber = 0.123123123; // double 은 8byte 로 1.7 * 10^308 범위를 표현하는 실수값
( long이랑 float형은 값뒤에 l,f을 붙인다. 이런걸 접미사라하고
ex) long num= 2147483647L )
*참조형 변수는 어느 공간에 있는 주소값을 바라보고 있는 변수이고
String,객체(object),배열(Array),리스트(List)등이 있다.
*wrapper 클래스 변수는 ↓ 이 있고 래퍼클래스 변수 사용 이유는
클래스는 객체지향 언어인 Java 의 핵심기능이고 그렇기 때문에 클래스로 변수를 관리하면 객체지향의 많은 기능을 사용할 수 있다.
6. 기본형 변수가 실제 값을 저장하는 공간 이라면 참조형 변수는 실제 값이 아닌 원본값의 주소값을 저장한다.
즉 기본형 변수는 값 자체를 저장,참조형 변수는 별도의 공간에 값을 저장후 그 주소를 저장함
기본형 참조형 차이 이미지 ↓
7.명시적 형변환 vs 암시적 형변환
사전적 의미로 명시적은 분명하게 드러내 보이는걸 뜻하고 암시적은 명확히 드러내지 않고 알리는걸 뜻한다
명시적은 예를들어 ↓ (타입형) 하는 방법이고
암시적은 java프로그램 안에서 자동으로 형을 바꿔주는 케이스.
직접적인 무슨형으로 변환한다 안하고 계산할때 자동으로 그거에 맞은 형으로 변환하고
변수 타입별 크기랑 관련이 있다.
8. 타입이 다른걸 연산할땐 작은 크기의 타입이 큰 타입으로 형 변환하고 연산한다.
9. 입력받는 Scanner 클래스
형태는 예를들어 Scanner sc = new Scanner(System.in); 이고
입력받은면서 변수에 넣을때는 타입에 따라 다른데 int형일경우 => int i = sc.nextInt(); 이런다.
*nextLint() 이랑 next()둘다 String형 입력 받는건데 차이점은
nextLine()메소드는 Enter를 치기 전까지 쓴 문자열을 모두 리턴한다는 것이고
next() 메소드는 스페이스 즉 공백 전까지 입력받은 문자열을 리턴한다는 것이다
예를들어 "안녕하세요 환영합니다" 입력했을때 nextLine은 다 리턴하고 next는 "안녕하세요"까지만 리턴한다.
10. 1주차 문제에서 Strig형 제목 => float형 평점 => String형 문자열 들을 입력받는 코드를 적으라 해서 해봤는데 알 수 없는 오류가 있었다.
Scanner sc = new Scanner(System.in);
String title = sc.nextLine();
float rate = sc.nextFloat();
String input1 = sc.nextLine();
String input2 = sc.nextLine();
String input3 = sc.nextLine();
이코드에서 rate입력하고 그다음 input1을 건너뛰고 input2를 입력받는거다.
이유를 알아보니 Enter 키 입력을 끝으로 인식하지 않아서 그런다 한다.
그러므로 nextLine()입력 제외한 다른거 A를 사용하고 그다음 바로 nextLine() B를 사용할경우
A,B사이에 sc.nextLine()을 추가해줘야 한다!!
(10번 사진 ↑ 참고)
11. 그리고 다른 곳을 돌아다니다 발견했는데 Scanner작업이 끝난 코드밑에 close()를 해줘야한다.
sc.close() 를 안해도 지금 작은 코드에서는 오류 안나지만 나중 큰 작업을 할땐 문제 일어 날 수도 있으니 습관 들일뿐
이거에 대해 알아보니 먼처 GPT는 " 프로그램이 사용하지 않는 리소스를 해제하여 메모리 누수를 방지할 수 있습니다."라는 답변이 나왔고
다른 어떤 사이트에서는 "가비지컬렉션이 자동으로 해체하지 않냐??" 해서 보니
"가비지컬렉션의 자동 해제하는 대상은 사용중이지 않은 데이터를 대상으로만 한다" 그런데 이거랑은 관련이 없는듯 하다.
close 메소드의 진짜 목적은 OS자원을 다시 되돌리는거라는데
표준 입출력은 프로세스마다 부여되고 System.in 이게 표준입력인 os자원을 이용하는거라 자원 사용후 되돌리려고 close를 한다.
추가로 System.in말고 다른거를 넣을수 있다=> 파일을 읽어오거나, 웹에서 크롤링한값등등
'Java' 카테고리의 다른 글
Java_5주차-(1) (0) | 2023.10.16 |
---|---|
Java_4주차 (0) | 2023.10.16 |
Java_3주차-(2) (0) | 2023.10.13 |
Java_3주차-(1) (0) | 2023.10.13 |
Java_2주차 (0) | 2023.10.12 |