본문 바로가기
네이버클라우드/JAVA 웹 프로그래밍

JAVA 4일차 (2023-05-25) 자바 기초 DAY2

by prometedor 2023. 5. 26.

.gitignore 파일 설정

ㄴ git 에서 백업 시 특정 파일을 백업하지 않겠다고 작성하는 파일

 

https://www.toptal.com/developers/gitignore/

 

gitignore.io

Create useful .gitignore files for your project

www.toptal.com

 

ㄴ gitignore.io 에서 git 에서 백업 시 백업하지 않을 특정 파일 목록을 입력하여 자동으로 코드 생성

 

ㄴ 생성된 코드를 복사하여 VSCode 에 있는 .gitignore 파일에 복사해넣기

 

 

** 참고

git 은 한 번 백업을 하면 그 내역을 지울 수 없고, 이미 올라간 것을 숨기는 정도는 가능

git => 조작을 못 하게 하는 것이 목표

 

git add

ㄴ add 는 백업 명단을 작성하는 명령어임

ㄴ add 를 실행 할 경우 삭제한 내역도 백업됨

 

git commit

ㄴ add 한 내역을 원격저장소로 저장

 

git pull

ㄴ 원격저장소에 업데이트 되어있는 최신 버전으로 local 저장소를 업데이트

 

 

문자열

ㄴ 문자열은 ""(double quotation) 안에 설정하고, ''(single quotation) 안에 설정하면 문법 오류가 발생함

ㄴ 문자를 ""(double quotation) 안에 설정하면 해당 문자는 문자열로 인식됨

ㄴ ""(double quotation) 안에 빈 상태로 설정하면 빈 문자열로 인식됨

ㄴ 문자열은 문자 개수 + α 메모리를 사용함

 

문자

ㄴ 문자는 ''(single quotation) 안에 설정하고, ''(single quotation) 안에 문자열을 설정하면 문법 오류가 발생함

ㄴ 문자는 2byte 메모리를 사용함

 

숫자

ㄴ 숫자는 정수와 부동소수점으로 나뉨

ㄴ 정수는 4byte 와 8byte 로 사용 가능한데, 4byte 메모리를 주로 사용하며 약 -21억 ~ +21억의 범위를 가짐

ㄴ 8byte 정수일 경우 숫자 뒤에 L 을 붙이며 소문자 l 은 1과 구분하기 힘든 경우가 있어 L 을 주로 사용하고, 8byte 메모리를 사용하며 -922경 ~ +922경의 범위를 가짐

ㄴ 큰 수에 L 을 붙이지 않으면 error 가 발생함

ㄴ 부동소수점은 4byte 와 8byte 로 사용 가능한데, 4byte 부동소수점일 경우 4byte 메모리를 사용하고 유효자리수(소수점을 제외한 숫자 개수)가 6~7자리를 차지함 => 10.2f, 3.14f 로 표현

ㄴ 8byte 부동소수점은 8byte 메모리를 사용하고 유효자리수(소수점을 제외한 숫자 개수)가 15~16자리를 차지함 => 10.2D / 10.2d 로 표현

 

논리

ㄴ 논리는 true, false 로 구성되는데, int 크기로 4byte 메모리를 사용함

ㄴ 단, 배열일 경우 1byte 메모리를 사용함

 

 

https://docs.oracle.com/javase/specs/jls/se17/html/index.html

 

The Java® Language Specification

James Gosling Bill Joy Guy Steele Gilad Bracha Alex Buckley Daniel Smith Gavin Bierman

docs.oracle.com

ㄴ java language spec 파일에서는 찾지 못함

 

https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-2.html#jvms-2.3.4

 

Chapter 2. The Structure of the Java Virtual Machine

Conditional branch: ifeq, ifne, iflt, ifle, ifgt, ifge, ifnull, ifnonnull, if_icmpeq, if_icmpne, if_icmplt, if_icmple, if_icmpgt if_icmpge, if_acmpeq, if_acmpne.

docs.oracle.com

ㄴ java virtual machine spec 파일에서 확인한 결과 JVM 은 Java 프로그래밍 언어의 boolean 배열을 Java 가상 머신 바이트 배열로 인코딩하여 사용하는데, 이때 각 boolean 요소는 8비트(1바이트)로 표현

 

레퍼런스(주소)

ㄴ c 언어와 달리 java 에서는 표기할 수 없음

 

 

ㄴ 위에서 System 은 상자이며, 이를 클래스(class) 라고 함

ㄴ 위에서 out 은 도구이고 객체(object)라고하며, Instance 라고도 함

ㄴ println 은 기능(function)이고, 이는 메서드(method)라고 함

ㄴ 위에서 "홍길동" 은 기능 수행에 필요한 값으로 argument 라고 하고 parameter 라고도 하는데 엄밀히 말하면 둘은 다름

 

 

정수 리터럴

ㄴ 숫자로 표현된 정수 값

ㄴ 10진수와 16진수를 가장 많이 사용함

ㄴ 16진수는 2진수를 간결하게 표현할 수 있음

 

부동 소수점 리터럴

ㄴ 실수 값을 표현하는 데 사용되는 값

ㄴ floating point 는 소수점이 둥둥 떠다니는다는 의미로 부동소수점의 '.' 을 의미함

ㄴ 일반 표기법은 3.14 처럼 표기하는데, 31.4E 처럼 지수 표기법을 사용하여 나타내면 여기서 E는 10의 지수를 의미하며, -1은 지수의 값임

 

 

ㄴ '\u' 라는 escape character 를 이용하여 유니코드(unicode) 를 표현할 수 있음

ㄴ '가' 를 유니코드로 표현하면 'AC00' 이고 앞에 escape character 인 '\u' 를 붙여주어 '\uAC00' 으로 표현함

ㄴ 'A' 를 유니코드로 표현하면 '0041' 이고 앞에 escape character 인 '\u' 를 붙여주어 '\u0041' 으로 표현함

ㄴ 문자열 안에 유니코드 표기법을 삽입할 수도 있음

 

 

1. Sign-Magnitude 방식

ㄴ Sign-Magnitude 방식은 부동소수점의 가수부 값을 저장할 때 사용함

ㄴ 2진수의 맨 앞 첫 번재는 부호비트임 (1은 음수, 0은 양수를 의미)

 

2. 1의 보수

ㄴ 양수 값은 그대로 2진수로 변경하면 됨

ㄴ 음수 값은 0은 1로 1은 0으로 뒤집어주면 됨

ㄴ 음수 값은 1의 보수로 저장하고 더했을 때 넘어가는 1을 버린 결과에 1을 더해주면 됨

 

2. 2의 보수

ㄴ 양수 값은 그대로 2진수로 변경하면 됨

ㄴ 음수 값은 0은 1로 1은 0으로 뒤집어주고 미리 1을 더함

ㄴ 음수 값은 1의 보수로 저장하고 더했을 때 넘어가는 1을 버림

ㄴ 현재 컴퓨터는 2의 보수 방식으로 정수를 다룸

 

2. Excess - K

ㄴ Excess - K 방식은 부동소수점의 지수부 값을 저장할 때 사용함

ㄴ 2^(비트수-1) - 1 = K  는 IEEE-754 명세에서 사용하고 이는 부동소수점을 2진수로 변환시키는 규칙임

 

 

 

 

부동소수점의 리터럴 - 2진수로 변경된 것을 확인하기

자바가 부동소수점을 다룰 때 IEEE 754 규칙에 따라 2진수로 변환하는 것을 확인해 보자

 

Test1.java 파일 컴파일하기

ㄴ javac -d bin/main src/main/java/com/eomcs/lang/ex03/Test1.java 

 

Hex Editor 플러그인 설치

 

클래스 파일로 부동소수점 값 확인하기

ㄴ Test1.class 를 Hex Editor 로 열어서 12.375의 2진수 값인 0100_0001_0100_0110_0000_0000_0000_0000을 찾아보자

    ㄴ 보통 에디터에서는 2진수를 16진수로 바꿔 보여주기 때문에 16진수 값 0x41460000을 찾아보자


부동소수점 정규화 과정

1) 소수점 이상 부분을 2진수로 변환
ㄴ 12 (10진수) => 1100 (2진수)

2) 소수점 이하 부분을 2진수로 변환
ㄴ .375
소수점을 2로 곱하여 나온 결과에서 정수 부분만을 차례대로 표기
소수 부분이 0이거나 반복되면 계산을 멈추기
     ㄴ 예: 0.375(10진수)
     ㄴ 0.375 * 2 = 0.75  --> 0
     ㄴ 0.75 * 2  = 1.5   --> 1
     ㄴ 0.5 * 2   = 1.0   --> 1
      => 0.011(2진수)  (0 1 1 차례대로)

 3) 소수점 이상 2진수와 소수점 이하 2진수 합치기
     => 12(1100) + .375(0.011) = 1100.011

4) 정규화
     => 소수점 위치를 조정하여 가수부와 지수부를 분리
     4-1) 소수점 왼쪽에 1이 한개만 남도록 소수점 위치를 이동
              => 1.100011 x 2^3 = 1100.011
     4.2) 소수점 앞의 1은 무조건 1이기 때문에 버리기
              => .100011 x 2^3

     4.3) 가수부와 지수부로 분리
            - 가수부(23비트)
            ㄴ Sign-Magnitude로 표현
                  => 따라서 음수나 양수나 같은 2진수 값을 가짐
                  => 예) 100011
            - 지수부(8비트)
                  ㄴ 2의 제곱승 값
                  ㄴ Excess-K 로 표현
                  ㄴ K값은 2^(8-1) - 1 = 2^7 - 1 = 128 - 1 = 127
                   => 예) 3(2의 제곱승) + 127(K값; bias) = 130
                   => 예) 130 = 10000010(2진수)

     4.4) 32비트 메모리에 담기
           ㄴ [1:부호비트][8:지수부][23:가수부] = 32비트
           ㄴ예) 0_10000010_10001100000000000000000
                = 01000001_01000110_00000000_00000000
                = 41_46_00_00(16진수)

     4.5) 64비트 메모리에 담기
           ㄴ [1:부호비트][11:지수부][52:가수부] = 64비트
           ㄴ부호비트(1) = 0
           - 지수부(11) = 3 + (2**(11-1) - 1) = 3 + (1024 - 1) = 3 + 1023 = 1026
                                = 100_0000_0010
           - 가수부(52) = 100011
           => 예) 0_10000000010_1000110000000000000000000000000000000000000000000000
                        = 01000000_00101000_11000000_00000000_00000000_00000000_00000000_00000000
                        = 40_28_c0_00_00_00_00_00(16진수)