오늘부터는 미니프로젝트가 끝난 뒤, java문법 기초강의가 시작했다.
처음 배운 내용은 컴퓨터 언어의 역사 java언어가 생기게 된 이유인데, 여기서 예전에 배웠던 C언어가 왜 C언어인지도 알 수 있었다.
처음엔 A언어가 시작이었으면 기능이 추가되어서 Bell사에서 만들어서 B언어가 탄생, 그 뒤 B언어보다 나은 기능이라는 의미에서 B다음 알파벳인 C언어가 되었다. C언어에서 공통실행환경이 생기고 객체지향 개념이 들어간 JAVA언어가 탄생했다.
JVM
JVM은 무엇일까?
JVM은 JavaVirtualMachine의 약자로 여러 OS위에 JAVA프로그램을 실행 시킬 수 있는 가상의 기기를 만들어주는 장치이다.
바이트 코드
- 내가 작성한 .java코드를 운영체제가 읽을 수 있는 .class코드로 변환한 코드
인터프리터
- 위에서 변환한 코드를 기계가 읽을 수 있도록 기계어로 변환해주는 해석기
JIT컴파일러
- 인터프리터의 효율을 높혀주는 서포터 해석기
메모리영역
- 운영체제로부터 JVM이 할당받은 JAVA데이터를 저장하는 메모리영역
클래스로더
- JVM으로 바이트코드를 불러와 메모리에 담아준다.
가비지 컬렉터
- 메모리 영역에서 안 쓰는 데이터를 주기적으로 흡수해가는 청소부
그림으로보면 다음과 같다.
위 그림을 개발자의 시선으로 본다면
JDK
- JDK는 개발자가 JAVA개발을 하기위해 설치해야하는 Java Development Kit의 약어 입니다.
- JDK에는 앞서 설명한 JVM기술 외에도 코드를 디버깅하는 jdb의 기능도 있습니다.
JDK설치
- https://teamsparta.notion.site/Mac-JDK-cd42768710404e50a742ce0e187975bf
- https://teamsparta.notion.site/Window-JDK-f646c4cfdbd34daf81b4315f7abeba1d
변수
변수는 박스와 같다. 박스에 데이터를 담고 그 박스에 이름을 정해두는 것이다.
그래서 필요할 때마다 박스이름을 찾아 그 박스안에 저장되어있는 데이터를 꺼내 쓸 수 있다.
따라서 int number = 10; 과 같이 사용할 수 있으며
상수는 앞에 final을 붙이면 저장한 값을 바꿀 수 없도록 만들어진 변수이다.
final int number = 10; //이 값은 10에서 더이상 바꿀 수 없다.
변수의 형태
변수의 형태는 크게 2개지로 나눌 수 있다.
기본형
논리형 변수
- boolean
문자형 변수
- char
정수형 변수
- byte
- short
- int
- long
실수형 변수
- float
- double
참조형
문자열 변수
- String
그 외
- Object
- Array
- List
- ...
변수를 래핑해서 클래스 형태로 변수를 관리하는 래퍼 클래스 변수도 존재한다.
설명한 모든 변수는 래퍼클래스 변수가 존재한다.
래퍼 클래스 변수를 사용하는 이유는 변수를 클래스로 관리하면 변수에 해당하는 여러 기능들을 편하게 사용할 수 있다.
참조형 변수와 기본형 변수의 차이
참조형 변수와 기본형 변수의 가장 큰 차이는 참조형 변수는 변수 자체의 값이 아닌 그 변수의 주소값을 갖는데 있다.
따라서 기본형 변수는 원본값이 Stack영역에 존재하고,
참조형 변수는 원본값이 Heap영역에 존재한다.
Stack 영역 vs Heap 영역
- Stack의 경우에는 정적으로 할당된 메모리 영역입니다.
- 그래서, 크기가 몇 byte 인지 정해져 있는 기본형 변수를 저장합니다.
- 추가로, 크기가 정해져 있는 참조형 변수의 주소 값도 저장합니다.
- Heap의 경우에는 동적으로 할당된 메모리 영역입니다.
- 그래서, 크기가 계속 늘어날 수 있는 참조형 변수의 원본을 저장합니다.
자바의 입출력
입력
자바는 입력을 받을 때 Scanner를 이용한다.
상단에 import java.util.Scanner를 입력한다.
그 뒤 Scanner를 할당받은 함수를 이용해 next()함수를 호출해 입력받는다.
출력
출력시에는 sout을 이용하는데, System.out.printf()를 이용한다. sout을 입력하면 자동 완성된다.
형 변환
정수 실수간 형변환은 앞쪽에 ()내에 형변환할 변수형태를 입력해 간단하게 변환할 수 있다.
작은 값 -> 큰값 으로 갈땐 값손실이 일어나지 않지만, 큰값 -> 작은값 으로 갈 땐 값 손실이 발생한다.
아래는 java1주차 과제인 요리레시피 입출력 과제이다.
package src;
import java.util.Scanner;
public class Main {
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
System.out.println("요리이름");
String cookName = sc.nextLine();
System.out.println("요리평점");
String strScore= sc.nextLine();
double cookScore = Double.parseDouble(strScore);
System.out.println("요리에대한 레시피 10문장.");
String cookDesc1 = sc.nextLine();
String cookDesc2 = sc.nextLine();
String cookDesc3 = sc.nextLine();
String cookDesc4 = sc.nextLine();
String cookDesc5 = sc.nextLine();
String cookDesc6 = sc.nextLine();
String cookDesc7 = sc.nextLine();
String cookDesc8 = sc.nextLine();
String cookDesc9 = sc.nextLine();
String cookDesc10 = sc.nextLine();
System.out.println("[ "+ cookName+" ]");
int result = (int)cookScore;
System.out.print("평점 : " + result);
System.out.println("("+ result*20 + "%)");
System.out.println("1. "+cookDesc1);
System.out.println("2. "+cookDesc2);
System.out.println("3. "+cookDesc3);
System.out.println("4. "+cookDesc4);
System.out.println("5. "+cookDesc5);
System.out.println("6. "+cookDesc6);
System.out.println("7. "+cookDesc7);
System.out.println("8. "+cookDesc8);
System.out.println("9. "+cookDesc9);
System.out.println("10. "+cookDesc10);
}
}