본문 바로가기
스터디일지/JAVA

[2023.08.14] 자바 1주차 문법 강의

by 똥쟁이핑크 2023. 8. 14.

https://3553248446-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M5HOStxvx-Jr0fqZhyW%2F-MG7lYH7h3eKB140HOuL%2F-MG7oGnFMcDEj0nvLhBK%2Fjdk-jvm.png?alt=media&token=40631b1f-50b8-4ba4-8831-66c09c97d98e

 

자바의 JRE

  • 자바의 실행 환경
  • Java 프로그램을 실행만 시킬 수 있다. → .class 파일만 실행 가능하다.

 

 

자바의 JDK

  • Java Development Kit → 자바 개발 키트
  • 컴파일러 기능이 있다. = .java 파일 → .class 파일로 변환이 가능하다
  • 코드를 디버깅 하는 JDB 기능이 있다.
    • 디버깅은 코드를 한줄씩 실행 하면서 변화는 과정을 볼 수 있다.

 

 

자바의 JVM

  • Java Virtual Machine → 자바 가상 머신
  • 기기에 상관없이 자바를 실행시킬 수 있는 환경을 만들어준다.

 

 

자바의 컴파일러

  • 프로그램 변환코드
  • 작성한 코드를 를 바이트 코드로 바꿔준다. → 바이트 코드로 바뀌어야 운영체제가 읽을 수 있기 때문이다.
  • .java 파일을 .class로 변환 시켜준다.

 

 

자바의 인터프리터

  • 바이트 코드가 컴파일러를 통해 변환되면 실행 할 수 있는 기계어로 번역해준다. → 코드 해석기다
  • 서포터 해주는 해석기는 JIT 컴파일러라 한다.

 

 

자바의 메모리

  • JVM이 할당 받은 메모리 영역인데 데이터를 저장한다.

 

 

자바의 클래스 로더

  • 바이트 코드를 메모리 영역에 옮겨준다.
  • JVM으로 class를 불러오고 메모리에 저장한다.

 

 

자바의 가비지 컬렉터

  • 메모리 영역에 있는 데이터 중에 안쓰는 데이터를 주기적으로 정리한다.

 

 

자바 프로그램 실행 하기

// 기본 실행 코드
public class Main { 
    public static void main(String[] args) { 
    	System.out.println("Hello world!"); 
    }
}


// 기본 실행 코드에 대한 설명
public class Main { // public → 접근 제어자, class → 객체를 만드는 클래스라고 선언, Main → 클래스 명
    public static void main(String[] args) { // main 메서드를 정의한다.
    // public → 접근제어자, static → 컴파일러가 바이트 코드로 변환 할때 미리 정의 되는 메서드를 표기 - 여기서는 static 메서드가 표기됨
    // void → 메서드의 응답값을 정의하며 여기서는 응답할 값이 없다는 의미
    // String[] → 문자열 여러개인 데이터타입, args → 문자열 여러개 데이터의 이름
    
    	System.out.println("Hello world!"); // 데이터를 출력하는 명령어
    }
}

 

 

자바의 변수

  • 저장공간과 값을 저장해야 한다.
  • 변수 → 값이 변하는 저장공간
  • 상수 → 값이 변하지 않는 저장공간
// 변수 예시
int number = 10;
number = 20;
System.out.println(number); // 결과는 20

// 상수 예시
final int number = 10;
number = 20;
System.out.println(number); // 결과는 에러
  • final → 값이 변하지 않게 선언하고 싶으면 맨 앞에 선언한다.
  • int → 저장공간의 타입을 의미한다. - 여기서는 숫자 타입을 의미한다.
  • number → 저장공간의 이름을 의미한다.
  • 10 → 저장공간의 값이 10을 의미
  • ; → 코드 선언 종료

 

 

자바의 변수 타입

https://t1.daumcdn.net/cfile/tistory/9941E63B5B42224F06

  • 기본형 변수
    • boolean → 논리형 변수로 true / false 라는 2가지 값만 저장한다.
    • char → 문자형 변수로 'A', '1' 처럼 하나의 문자만 저장한다.
    • 정수형 변수 → byte, short, int, long로 다양한 정수의 범위를 표현하기 위해 타입을 선언한다.
      1. byte → -128 ~ 127까지의 숫자만 저장 가능하다.
      2. short → 2byte이며 -32,768 ~ 32,767 까지의 숫자만 저장 가능하다.
      3. int → 4byte이며 -21억 ~ 21억 까지의 숫자만 저장 가능하다.
      4. long → 8byte이며 9백경 정도의 매우 큰수를 저장 가능하다.
    • 실수형 변수 → float, double로 실수의 범위를 표현하기 위해 타입을 선언한다.
      1. float → 4byte이며 long 보다 큰 범위의 숫자를 저장 할 수 있다. → 부동 소수점 방식으로 저장하기 때문에 long 보다 더 큰 숫자의 범위를 저장하는 것이 가능하다. → 소수점 7자리 까지 저장이 가능하다
      2. double → 8byte이며 long 보다 큰 범위의 숫자를 저장 할 수 있다. → 소수점 16자리 까지 저장이 가능하다.
// 사용 예시
byte byteNumber = 127; 
short shortNumber = 32767; 
int intNumber = 2147357457; 
long longNumber = 2138993213747L; // L을 붙여서 사용한다. int와 long의 데이터값 구분을 위해 사용한다.
float floatNumber = 0.123f; // f을 붙여서 사용한다. float와 double의 데이터값 구분을 위해 사용한다.
double doubleNumber = 0.123123123;

 

  • 참조형 변수
    • String → 문자열 변수 - 문장을 저장한다.
    • Object, Array, List 등등이 있다. - 단일 저장 공간에 담을 수 없는 값을 저장 할때 사용한다.

 

  • 래퍼 클래스 변수
    • 박싱과 언박싱이 있다.
    • 박싱 → 기본 타입을 래퍼 클래스 변수로 감싸는 것을 말한다.
    • 언박싱 → 래퍼 클래스 변수를 기본 타입으로 가져오는 것을 말한다.
    • 객체 지향의 많은 기능을 사용하기 위해 래퍼 클래스를 사용한다.
기본타입 래퍼 클래스
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
boolean Boolean

 

 

자바의 Stack 영역과 Heap 영역

스파르타코딩클럽 이미지 참조

 

 

https://goldenrabbit.co.kr/wp-content/uploads/2021/11/%E1%84%8C%E1%85%A1%E1%84%87%E1%85%A1-%E1%84%86%E1%85%A6%E1%84%86%E1%85%A9%E1%84%85%E1%85%B5-%E1%84%86%E1%85%A9%E1%84%83%E1%85%A6%E1%86%AF_02.png

  • Stack
    • 정적으로 할당된 메모리 영역이다.
    • 크기가 정해져 있는 기본형 변수를 저장한다.
    • 크기가 정해져 있는 참조형 변수의 주소값도 저장한다.
  • Heap
    • 동적으로 할당된 메모리 영역이다.
    • 크기가 계속 늘어 날수 있는 참조형 변수의 원본을 저장한다.
    • 참조형 변수
      • 원본 값이 Heap 영역에 있다.
      • 주소 값을 저장하는 주소형 변수
      • 기본형 변수가 실제 값을 저장하는 저장공간이라면 참조형 변수는 실제 값이 아닌 원본 값의 주소값을 저장한다.

 

 

자바의 형변환

  • 형변환은 기본형 변수인 정수, 실수, 문자 사이에서 일어난다.
// 기본 사용 예시
    double doubleNumber = 10.101010;
    float floatNumber = 10.1010

    int intNumber; // intNumber 변수 선언

    // int로 형변환 하기
    intNumber = (int)doubleNumber; 
    intNumber = (int)floatNumber; 


    int intNumber = 10;
    
    // double로 형변환 하기
    double doubleNumber = (double)intNumber; 
    // float로 형변환 하기
    float floatNumber = (float)intNumber;

 

  • 자동 형변환
    • 작은 크기에서 큰 크기의 타입으로 저장할 때 자동으로 큰 크기의 타입으로 형변환이 발생한다.
    • 형변환을 할 때 값의 손실이 없다. → 자동으로 된다.
    • 변수 타입별 크기 - byte(1) → short(2) → int(4) → long(8) → float(4) → double(8)
    • 큰 크기에서 작은 크기로 바뀔때는 강제 형변환이 되는데 값의 손실이 발생된다. → 값의 손실이 생겨서 개발자가 선택하여 형변환을 한다.
// 기본 사용 예시
int intNumber = 10;
double doubleNumber = 5.5;
double result = intNumber + doubleNumber; // 결과는 15.5


intNumber = 10;
int iResult = intNumber / 4; // 결과는 2

intNumber = 10;
double dResult = intNumber / 4.0; // 결과는 2.5

 

1주차 강의의 숙제

// 나의 숙제 코드
 String food = "떡볶이";
float num = 4.5f;
String[] receipe = {"냄비에 물을 뭍는다.",
       "물을 끓이면서 고추장, 설탕, 간장 등등으로 소스를 만든다.",
       "물이 끓기를 기다린다.",
       "끓으면 떡을 넣는다.",
       "오뎅을 넣는다.",
       "삶을 계란을 넣는다..",
       "라면 사리를 넣는다.",
       "소스가 졸여질때까지 불을 줄이고 끓인다",
       "맛있게 먹는다.",
       "남으면 소스에 밥과 김가루를 뿌리고 볶아 먹는다."}; // 내맘대로 쓴 레시피

System.out.println("[ " + food + " ]");
System.out.println("별점 : " + num + "(" + (num * 100) / 5 + "%)");
for(int i = 0; i < 10; i++){
    System.out.println((i + 1) + "." + receipe[i]);
}