TIL - Java 기초(1)

김지현·2023년 4월 3일
0

항해99

목록 보기
1/16

2023-04-03


Java

역사

  • A 언어
    - 첫 개발언어라는 의미에서 A Programming Language 약자
    - 프로그램을 만들기위해 기본적으로 필요한 기능 입/출력, 문맥 기능만 구현가능한 언어

  • B 언어
    - Bell 사에서 개발해서 B 언어
    - A언어 기능 + 기계식 데이터 타입, 연산기능, 메서드 구현이 가능한 언어

  • C 언어
    - B언어에 비해 더 좋은 언어라는 의미로 알파벳 B 다음인 알파벳 C를 따서 C 언어
    - B언어 기능 + 자료형 데이터 타입, 자료구조

  • Java 언어
    - 어디서나 동작 가능한 자바 커피에서 이름을 따서 만든 언어
    - C언어 기능 + 공통 실행환경, 클래스, 객체

JVM

자바 가상 머신 (Java Virtual Machine)
https://coding-factory.tistory.com/827

  • 여러가지의 기기위에 Java 프로그램을 실행시킬 수 있는 가상의 기기를 만들어주는 것

바이트 코드

운영체제가 읽을 수 있는 코드

Java 컴파일러

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

인터프리터

java .class 코드 해석기

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

JIT 컴파일러

Java .class 코드 서포터 해석기

  • 인터프리터의 효율을 높여주는 서포터 해석기

메모리 영역

Java 데이터를 저장하는 영역

클래스 로더

Java .class 바이트 코드를 메모리 영역에 담는 운반기

  • JVM으로 class(바이트 코드)를 불러와서 메모리에 저장함

가비지 컬렉터

Java 쓰레기 청소기

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

JRE

자바 실행 환경 (Java Runtime Environment)

  • .class 파일만 실행 가능함

JDK

자바 개발 키트 (Java Development Kit)

  • JRE(JVM)의 기능을 포함하고 있음
  • .java 파일들을 .class 파일들로 변환해주는 Java Compiler(javac) 기능이 있음
  • 디버깅 : 코드를 따라가면서 변수를 볼 수 있음

변수 (저장공간)

선언

Java 프로그램에서 값을 다루기 위해서는 값을 저장해둘 저장공간의 선언이 필요함

int number;

int : 저장공간 타입
number : 저장공간 이름

저장

초기화

  • 선언과 동시에 저장
int number = 10;

int : 저장공간 타입
number : 저장공간 이름
10 : 저장할 값

덮어쓰기

  • 선언 이후에 값을 저장
int number = 10;			// 초기화
number = 12;				// 덮어쓰기

변수

변하는 저장공간

int number = 10;			// 1. 변수로 선언 및 초기화
number = 12;				// 2. 변수의 값을 바꿈 (덮어쓰기)

상수

변하지 않는 저장공간

  • 저장효율을 위해 "변하지 않을 값"을 따로 저장하는 공간이 있음
final int number = 10;		// 1. 상수로 선언 (데이터 타입 앞에 final을 붙임)
number = 12;				// 오류! 변수의 값을 바꿀 수 없음

종류

기본형

  • 실제 값을 저장하는 저장공간
  • 원본값이 Stack 영역에 있음

- 논리형 : boolean

  • True / False 값만 저장
boolean flag = true;		// 1. 논리형 변수 boolean으로 선언 및 true 값으로 초기화
flag = false;				// 2. False 값으로도 저장할 수 있음

- 문자형 : char

  • 'A', '1'와 같은 문자 하나만 저장
char alphabet = 'A'			// 쌍따옴표("")는 에러남

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

  • 0, 1, 2, 99와 같은 정수형 숫자값 저장
  • 각 변수들의 표현 범위를 잘 알아야 함
  • 1byte = 8bit
    - bit : 0과 1을 표현하는 최소 단위
byte byteNumber = 127;				// 1byte
// byte 는 -128 ~ 127 범위의 숫자 저장

short shortNumber = 32767;			// 2byte
// short 는 -32,768~32,767 범위의 숫자 저장

int intNumber = 2147483647;			// 4byte
// int 는 -21억~21억 범위의 숫자 저장

long longNumber = 2147483647L;		// 8byte
// long 은 숫자뒤에 알파벳 L 을 붙여서 표기하며 매우 큰 수를 저장

- 실수형 : float, double

  • 0.123, 0.9999 와 같은 소수점 실수값 저장
  • 표현범위가 매우 넓어서 정수형 변수에서 담지 못할 수 있음
    byte(1) -> short(2) -> int(4) -> long(8) -> float(4) -> double(8)
float floatNumber = 0.123F;         // 4byte (long보다 큼)
// float 는 숫자뒤에 알파벳 F 를 붙여서 표기하며
// 3.4 * -10^38 ~ 3.4 * 10^38 범위의 숫자 저장

double doubleNumber = 0.123123123;  // 8byte (long보다 큼)
// double 은 1.7 * -10^308 ~ 1.7 * 10^308 범위의 숫자 저장

참조형

  • 실제 값이 아닌 원본값의 주소값을 저장 (= 주소형 변수)
  • 원본값이 Heap영역에 있음
  • Stack 영역 : 정적으로 할당된 메모리 영역
  • Heap 영역 : 동적으로 할당된 메모리 영역

- 문자열 : String

  • "Apple", "텍스트"와 같은 문장을 저장
String message = "Hello World!"

- 그 외 Object, Array, List ...

  • 객체, 배열, 리스트와 같은 단일 저장공간에 담을 수 없는 값을 저장

래퍼 클래스

(Wrapper Class)
기본형 변수를 클래스로 한번 랩핑(감싸는) 변수
클래스로 변수를 관리하면 객체지향의 많은 기능을 사용할 수 있게 됨

  • 박싱 : 기본 타입 변수 -> 래퍼 클래스 변수
  • 언박싱 : 래퍼 클래스 변수 -> 기본 타입 변수

형변환

  • 형변환은 주로 기본형 변수인 정수 <-> 실수 <-> 문자 들 사이에서 일어나며 어떤 변수형을 다른 형으로 변환함
실수 -> 정수

double doubleNumber = 10.101010;
float floatNumber = 10.1010

int intNumber;
intNumber = (int)doubleNumber;		// double -> int 형변환
intNumber = (int)floatNumber;		// float -> int 형변환
// 실수형의 소수점 아래자리는 버려짐
정수 -> 실수

int intNumber = 10;

double doubleNumber = (double)intNumber;	// int -> double 형변환
float floatNumber = (float)intNumber;		// int -> float 형변환

자동 형변환

1) 작은 크기의 타입에서 큰 크기의 타입으로 저장될 때 큰 크기로 자동 형변환이 발생함
2) 작은 크기의 타타입이 큰 크기의 타입과 계산될 때 큰 크기의 타입으로 자동 형변환이 발생함

  • 값의 손실이 없음

강제 형변환

(= 캐스팅)

  • 값의 손실이 발생함

코드 해석

public class Main {
	public static void main(String[] args) {
		System.out.println("Hello world!");
	}
}

public class Main

  • 클래스 정의
  • public : 접근 제어자
  • class : 객체를 만드는 클래스라고 선언
  • Main : 클래스 명
    - 파일명과 일치시켜야 함

public static void main

  • main 메서드 정의
  • public : 접근 제어자
  • static : Java 컴파일러가 바이트 코드를 변환할 때 미리 정의되는 메서드 표기
    - 앱 실행 시 한번만 정의되며 static 메서드 또는 변수(데이터)끼리만 호출할 수 있음
  • void : 메서드의 응답값을 정의하는 곳
    - void 는 응답할 값이 없다는 정의
    • int는 정수, char는 문자, String은 문자열 등

(String[] args)

  • 메서드가 시작될 때 넘겨받을 데이터들(변수들)
  • String[] : 문자열 여러개 데이터 타입
  • args : 변수 이름 (아무거나 써도 됨)

아스키코드

  • 숫자(int)를 문자(char)로 매핑해서(짝을 지어서) 표현함

1주차 숙제

package week02;

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        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();
        String input4 = sc.nextLine();
        String input5 = sc.nextLine();
        String input6 = sc.nextLine();
        String input7 = sc.nextLine();
        String input8 = sc.nextLine();
        String input9 = sc.nextLine();
        String input10 = sc.nextLine();

        System.out.println("[ " + title + " ]");

        int intRate = (int)rate;
        System.out.println(intRate);

        double percentageRate = intRate * 100 / 5.0;
        System.out.println(percentageRate);

        System.out.println("1." + input1);
        System.out.println("2." + input2);
        System.out.println("3." + input3);
        System.out.println("4." + input4);
        System.out.println("5." + input5);
        System.out.println("6." + input6);
        System.out.println("7." + input7);
        System.out.println("8." + input8);
        System.out.println("9." + input9);
        System.out.println("10." + input10);
    }
}

0개의 댓글

관련 채용 정보