2023.10.12.<Java>문법1_Java, 변수

2023. 10. 12. 20:19콛/Til

Chapter 1 : 개발언어 Java

 

·  Java의 특징 : JVM, 클래스 + 객체지향

·  JVM : 어느 장비(PC, 모바일, 서버..) 에서든 JVM을 깔아주면 Java가 놀 수 있는 놀이터

· Java 컴파일러(compiler)란 ? 

- 내가 작성한 Java 코드들(.java 파일)을 운영체제가 읽을 수 있는 바이트 코드(.class 파일)로 변환하는 변환기

 

·  인터프리터

- 운영체제가 읽은 바이트 코드를 기기(기계)가 실행할 수 있는 기계어 (row레벨 언어)로 번역

·  JIT 컴파일러

- 인터프리터의 효율을 높여주는 코드 해석기

 

·  메모리 영역

- Java 데이터를 저장하는 영역 = 운영체제(window..)로부터 JVM(가상기계)이 할당받은 메모리 영역

 

·  클래스 로더

- JVM으로 Java.class 바이트코드를 불러와서 메모리에 저장하는 운반기

 

·  가비지 컬렉터

- Java 쓰레기 청소기

- 메모리 영역에서 안쓰는 데이터를 주기적으로 흡수해가는 청소기

Runtime 시스템 : 구동이 되는 시스템

 

· JDK (Java Development Kit)

- JRE(Java Runtime Environment) 기능 가지고 있음

- .java 파일들을 .class파일로 변환해주는 기능 = Java Compiler(javac) 가짐

- 코드 디버깅 = jdb기능 가짐

 

· 기본 형태 해석

// 클래스
// public : (접근)제어자, public(공공의, 공통의)
public class Main {

    //JDk
    // (1) compiler : .java -> .class
    // (2) JRE
    // (3) JDB : 디버깅


    // main 메소드
    // 자바 프로젝트(앱)는, 제일 먼저 클래스의 main 메소드를 실행시킨다.
    // =JVM의 약속
    // static : 이 프로그램이 시작될 때 무조건 실행되는 녀석임을 표현

    //output
    // void : 메서드의 출력값의 데이터 타입
    // void : "아무것도 없다." -> 출력은 없다.

    //input
    // String[] args : 매개변수 자리
    //args : 변수명, 아무렇게나 써도 상관이 없다.

    public static void main(String[] args) {

        // 객체 : 특징(속성, 변수), 행동(메소드)
        // print -> 줄바꿈 하지 x
        // println -> 줄바꿈 o
        // ln : Line
    }
}

 

Chapter 2 : 변수 

· 변수 : 하나의 값을 저장할 수 있는 저장공간

· 상수 : 변하지 않는 값 ex) pi

 

· 저장공간의 선언과 값의 저장

선언과 동시에 저장 == 초기화

· 기본형 변수

 - 논리형 변수 : boolean (True :1, False :0)

 - 문자형 변수 : char (문자 하나 'A' , '1' 하나만 저장)

 - 실수형 변수 : float(4byte), double(8byte)

 - 정수형 변수 : byte, short, int, long

byte byteNumber = 127; // byte 는 -128 ~ 127 범위의 숫자만 저장 가능합니다.

short shortNumber = 32767; // short 는 -32,768~32,767 범위의 숫자만 저장 가능합니다.

int intNumber = 2147483647; // int 는 -21억~21억 범위의 숫자만 저장 가능합니다.

long longNumber = 2147483647L; // long 은 숫자뒤에 알파벳 L 을 붙여서 표기하며 매우 큰수를 저장 가능합니다.

 

· 참조형 : 뭔가 복잡한..., 별도 저장

 - 문자열 변수 : String ("apple")

 - 배열 Array 

int[] a = {1,2,3};

 - 출력시

public class Main {
    public static void main(String[] args) {
        int[] a= {1,2,3};
        System.out.println(a); //[I@6d311334
        System.out.println(Arrays.toString(a)); //[1, 2, 3]
    }
}

 - 그 외 : Object, Array, List... (단일 공간에 담을 수 없는 값)

* 1byte : 8bit  →2^8 =256 == -128 ~ 127

* bit : 0과 1을 표현

 

· 래퍼 클래스(Wrapper Class 변수)

public class Main {
    public static void main(String[] args) {
        int number =21;
        Integer num = number;
        //boxing
        System.out.println(num.intValue());
        //unboxing
    }
}

 

· 문자와 문자열 저장 관점에서의 차이점

 - 문자 

 : 문자 뒤에 \0(널문자)가 없다.

 

- 문자열

 : 문장 끝에 \0(널문자)가 함께 저장된다.

 

 

· 기본형 변수 vs 참조형 변수의 저장관점에서의 차이점

<Stack 영역 : 정적 / Heap 영역 : 동적> 으로 할당된 메모리 영역

 

· 형변환

 - 변수 타입별 크기 순서

 - byte(1) < short(2) < int(4) < long(8) < float(4) < double(8)

 

· 자동 형변환 vs 강제 형변환

- 작은타입 > 큰타입( 자동형변환)

 값의 손실이 없기에 컴파일러가 자동으로 형변환 해줌

 

- 큰타입 > 작은타입 (강제 형변환 = 캐스팅)

 값의 손실이 생기기 대문에 개발자가 선택하여 형변환

 

· 입력과 출력

 - 입력

 - scanner.in 객체의 next() 명령을 사용해서 입력받는다.

Scanner sc = new Scanner(System.in); // Scanner 객체를 new 명령어로 생성합니다.
String input = sc.next();  // sc(Scanner)의 .next(); 를 실행하면 input 변수에 입력한 글자를 받을 수 있습니다.

 - 출력

 -  System.out 객체의 println() 명령을 사용해서 출력

Scanner sc = new Scanner(System.in);
String input = sc.next();  

System.out.println("입력값 : " + input);  // 입력한 글자를 출력합니다.

// 실행 결과
{입력}
입력값 : {입력}