다오의 개발일지

TIL-9 자바 기초 변수, 문자열, 형변환 본문

JAVA

TIL-9 자바 기초 변수, 문자열, 형변환

다오__ 2023. 5. 22. 21:56

프로그램 언어란?

사람이 컴퓨터와 소통하기 위해 만든 도구 컴퓨터는 01만을 이해할 있다.

 

A언어

핵심기능 /출력, 문맥

 

*시스템 : input output 있는

 

B언어

A언어 기능 + 기계식 데이터 타입, 연산기능, 메서드

 

*메서드 : 행동을 정의한

 

C언어

B언어  기능에 다향한 데이터타입을 정의하고 자료구조에 담을 있는 언어

 

Java

C언어 기능+ 공통 실행환경, 클래스, 객체

C언어 기능에 여러 기기에서 실행가능 하도록 도와주는 공통실행환경, 그리고 데이터와 메서드를 담은 클래스를 통해 객체를 만들 있는 언어

공통 실행환경이 있어서 여러 기기에서 실행 가능합니다.

여러 기기의 운영체제에서 실행할 있는 언어

 

특히 앱개발에 적합

 

  1. 자바는 세상과 닮아있는 개발언어라서 코드를 이해하기 쉽고 유지 보수가 쉽다.
  2. 안정성이 높아 오류 방지하고 보안상 안전
  3. 대규모 개발이 가능
  4. 자바를 배우면 다양한 개발 도구와 라이브러리를 사용 가능

 

JVM이란?

Java Virtual Machine 자바 가상 머신

여러가지의 기기위에 자바프로그램을 실행 시킬 있는 가상의 기기를 만들어주는 의미한다.

 

어디서든 어떤 환경에서든 자바코드를 구동할 있게 되었다.

 

바이트 코드 = .class 파일, 운영체제가 읽을 있는 코드

 

Java 컴파일러 = .java .class 변환해주는 파일

 

인터프리터 = 운영체제가 읽은 바이트코드(.class) 기계가 실행할 있는 기계어로 번역

 

JIT 컴파일러

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

 

메모리 영역

Java 데이터를 저장하는 영역

운영체제로부터 JVM 할당 받은 메모리 영역

 

클래스 로더

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

JVM으로 .class 파일을 불러와서 메모리에 저장함

 

가비지 컬렉터

Java 쓰레기청소기

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

 

Runtime = 프로그램이 실행중인 상테

Runtime System = 프로그램이 실행중인 상태를 관리하는 시스템

 

 

 

 

JVM 설치하기 위해선 JRE 설치해야한다.

 

하지만 이는 자바 프로그램을 실행만 시킬 있다. (.class파일만 실행가능)

JDK javac 명령을 통해 .java파일을 실행가능한 .class파일로 변환해준다.

 

JDK?

Java Development Kit , 자바 개발 키드

JDK JRE(JVM) 기능을 포함하고 있다.

.java 파일을 .class파일들로 변환해주는 자바 컴파일러 기능이 있다.

코드를 디버깅하는 jdb 기능이 있.

 

JDK 디버깅

내가 작성한 코드 라인에 '중단점' 설정하고 디버그 모드로 프로그램을 실행하면 프로그램이 중단점의 코드라인을 수행할 프로그램 흐름이 일시정지되며 변수들을 있게 도와준다.

 

정리.

JDK

compiler : .java -> .class 변환해주는 번역기

JRE : Java Runtime Environment

JDB : 디버깅

 

 

main 메서드 : 자바 프로젝트는 제일 먼저 클래스의 main 메서드를 실행시킨다 = JVM 약속

 

public  : 제어자, 어디까지 접근하게 할지를 정한다. 공공의 공통의, 어디서든 접근 가능하다. 외부에서도 실행 시킬 있다.

 

static : 프로그램이 실행될 무조건 실행이 된다.

 

void : output 없는 메서드

 

객체 : 특징(속성, 변수), 행동(메서드)

System.out.println() 

 

. 하위요소를 표현할 사용하는 것

 

데이터타입에는 크게 2가지가 있다 기본형과 참조형

기본형 : 숫자형, 문자형, boolean 등

참조형 : 어딘가에 별도로 저장한 주소 값을 참조하는

 

기본형 변수

  문자형 변수 : char

  정수형 변수 : byte short int long

 

  실수형 변수 : float, double

  실수는 표현범위가 매우 넓어서 정수형 변수에서 담지 못할 있다.

 

  부동소수점 : 1.xxx * 10^n

 

  고정소수점  : 2.125

 

  Float long보다 넓은 범위를 표현하기 때문에 자동 형변환이 안된다.

 

 

참조형 변수

  공간에 대한 주소값을 저장해 놓는

 

  문자열 변수 : String

 

  Object, Array,List

 

  래퍼 클래스 변수 : 기본형 변수를 랩핑(감싸)변수 라고 생각하면 된다.

 

한번 감싸면 래퍼클래스를 통해서 가지고 있는 유용한 기능들(메서드) 사용할 있다.

형변환

 

1byte = 8bit

Bit = 0, 1 표현 1byte 2^8

 

숫자와 문자

문자는 어떻게 숫자로 저장할까?

자바에서는 기본적으로 아스키 코드라는 규칙 으로문자를 저장하고 있다.

아래의 중요한 세가지 숫자는 꼭 기억하자

 

숫자 0 아스키코드로 48이다

알파벳 A는 아스키코드로 65이다

알파벳 a는 아스키코드로 97이다

 

 

 

 

 

기본형과 참조형의 차이

선언 관점에서 차이점

문자 : 기본형

char alpahabet = 'A' //문자 하나를 저장

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

1byte만 쓰기때문에 끝을 알아서 필요가 없다.

 

문자열 : 참조형

String message = "Hello Workld";

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

개의 byte를 쓸지 모르기 때문에 끝을 표시해야 한다.

 

참조형?

참조형 변수 = 주소형 변수?

다른 기본형 변수가 실제 값을 저장하는 저장공간 이라면 참조형 변수는 실제값이 아닌 원본값의 주소값을 저장한다.

 

다시말해 참조형 변수는 주소값을 조장하는 주소형 변수라고도 한다.

저장관점에서 차이점

기본형 변수 : 원본값이 Stack 영역에 있다.

참조형 변수 : 원본값이 Heap 영역에 있다.

 

Heap영역은 참조형 변수를 위한 별도 공간이다.

 

 

 

 

 

 

비트&바이트

바이트를 만들어 냈는가?

모든 데이터를 1bit단위로 저장하게 되면 비효율적인 리소스낭비가 되기 때문

Bit

0,1 형태의 2진수 데이터로써 컴퓨터가 저장할 있는 최소단위

정수형 값은 10진수 숫자이며 2진수Bit로 표현(저장)한다.

4개의 Bit로 16진수 숫자범위를 2진수Bit로 표현(저장)한다. 0010

 

Byte

8개의 비트로 구성 되어있다

1Byte내에서 숫자 변수는 Bit 2진수를 10진수로 표현(저장)한다.

10진수로는 0~255까지 표현(저장)한다.

1Byte내에서 문자 변수의 경우만 Bit 2진수를 16진수로 표현(저장)한다.

 

 

 

 

변수 타입 바꾸기(형 변환)

//실수 -> 정수

double doubleNumber = 10.1010;

float floatNumber = 10.1010f;

 

Int inNumber;

intNumber = (int) doubleNumber;

 

// 정수 -> 실수

Int intNumber = 10;

Double doubleNumber = (double)intNumber;

 

//변수 타입별 크기 순서

Byte(1) -> short(2) -> int(4) -> long(8) -> float(4) -> double(8)

 

//문자열 -> 정수 or 실수

래퍼클래스로 감싼다음에 형변환이 가능하다.

String value = "10";

Int intNumber;

 

intNumber = Integer.parseInt(value);

 

//정수로 나누기

Int intNumber = 10;

Int iResult = intNumber / 4;

= 2

 

//실수로 나누기

Int intNumber = 10;

Double dResult = intNumber/ 4.0

= 2.5

 

//정수 or 실수 -> 문자열

String 클래스로 감싼다음에 형변환이 가능하다.

Int intNumber = 10;

String value;

 

value = String.valueof(intNumber);