도서/자바의 신

[도서/자바의 신] #4 정보를 어디에 넣고 싶은데

yulee_to 2022. 12. 20. 05:20

자바의 신

✔️이 글은 [자바의 신 - 이상민 지음] 도서를 바탕으로 정리한 글입니다. 


자바에서는 네 가지의 변수가 존재해요

모든 프로그래밍 언어에서는 내용을 담아두기 위해 "변수"를 사용한다. 

변수의 4가지 종류

  • 지역 변수 (local variables)
    • 중괄호 내에 선언된 변수
    • 지역 변수를 선언한 중괄호 내에서만 유효
  • 매개 변수 (parameters)
    • 메소드에 넘겨주는 변수
    • 메소드가 호출될 때 생명이 시작되고, 메소드가 끝나면 소멸
  • 인스턴스 변수 (instance variables)
    • 메소드 밖에, 클래스 안에 선언된 변수
    • 객체가 생성될 때 생명이 시작되고, 그 객체를 참조하고 있는 다른 객체가 없으면 소멸
  • 클래스 변수 (class variables)
    • 인스턴스 변수처럼 메소드 밖에, 클래스 안에 선언된 변수 중에서 타입 선언 앞에 static이라는 예약어가 있는 변수
    • 클래스가 처음 호출될 때 생명이 시작되고, 자바 프로그램이 끝날 때 소멸
    • 자바에서는 C/C++처럼 메모리에서 지워달라는 예악어가 없고 가비지 컬렉터(Garbage collector)라는 것이 알아서 메모리를 지워준다. 

변수의 이름은 이렇게

기본적인 규칙

  • 길이 제한 없음
  • 첫 문자는 유니코드 문자, 알파벳, $, _만 올 수 있음(보통은 유니코드 문자나 알파벳으로 시작)
  • 두번째 문자부터는 유니코드 문자, 알파벳, 숫자, $, _ 중 아무거나 올 수 있음
  • 첫 문자는 소문자로 시작하는 단어, 두 번째 단어부터는 첫문자만 대문자
  • 상수(constant value, 절대 변하지 않는 값)의 경우 모두 대문자로 지정하며, 단어와 단어 사이는 _로 구분
  • 변수의 이름은 그 용도에 맞게 지어주는 게 좋음

 

크게 보면 자바에는 두 가지 자료형이 있답니다

  • 기본 자료형 (Primitive data type) : 바로 초기화가 가능한 것
  • 참조 자료형 (Reference data type) : new를 사용해서 초기화

예외) String 초기화는 두 가지 방법 다 가능 

  • String str = "God of Java"; 처럼 바로 초기화
  • String str = new String("God of Java"); 처럼 new를 사용해서 초기화

기본 자료형은 8개에요

기본자료형은 숫자과 boolean 타입으로 나뉘고, 숫자는 다시 정수형과 소수형으로 나뉜다.

  • 정수형 : byte, short, int, long, char
  • 소수형 : float, double
  • 기타 : boolean

자료형의 범위

타입 최소 최대
byte -128(-2^7) 127(2^7-1)
short -32,768(-2^15) 32,767(2^15-1)
int -2,147,483,648(-2^31) 2,147,483,647(2^31-1)
long -9,223,372,036,854,775,808(-2^63) 9,223,372,036,854,775,807(2^63-1)
char 0 ('\u0000')(0) 65,535 ('\uffff')(2^16-1)

2진수로 표현한 값을 보면 지수 부분이 2^n-1(n=3,4,5,6)으로 되어 있는 것을 알 수 있다.

즉, 각 타입이 나타낼 수 있는 숫자의 범위가 2배씩 증가한다.

8비트와 byte 타입

0과 1을 표현할 수 있는 공간인 bit가 8개 모인 것을 1 byte라고 한다. 

가장 오른쪽에서부터 2^0, 2^1, .. 순서로 값을 표현한다. 

2^7 2^6 2^5 2^4 2^3 2^2 2^1 2^0
0 0 0 0 0 0 1 1

이 경우엔 2^1 + 2^0 = 3을 의미한다.

 

맨 앞 1bit는 값의 부호를 나타내는 값으로 sign bit라 하고 0이면 양수, 1이면 음수를 나타낸다.

sign bit가 0이고 나머지 bit가 다 1이면 127을 의미하고

sign bit가 1이고 나머지 bit가 다 0이면 -128을 의미한다.

 

책에는 나와있지 않지만 컴퓨터가 사용하는 2진수를 10진수로 바꿀 때 sign bit가 1이면(음수이면) 

모든 bit를 반대로 바꿔주고(1이면 0으로, 0이면 1로)

거기에 +1을 해준 값을 양수 2진수를 10진수로 바꿀 때처럼 해주고 앞에 -기호를 붙여주면 된다.

 

byte 자료형의 가장 큰 값 127(0111_1111)에 +1을 하면 가장 작은 값 -128(1000_0000)이 된다.

반대로 가장 작은 값 -128(1000_0000)에 -1을 하면 가장 큰 값 127(0111_1111)이 된다.

이처럼 값의 범위를 넘어서는 값일 경우 예상하지 못한 값이 나오기 때문에 잘 생각하고 자료형을 정해줘야 한다.

무조건 큰 자료형을 사용하게 되면 불필요한 저장공간을 많이 쓰게 되기 때문에 필요한 크기에 가장 적합한 자료형을 사용하는 것이 좋다. 

다른 정수형 타입들은 어떻게 활용하나?

사용할 데이터의 크기에 따라 가장 작은 byte, short, int, long 순으로 사용한다. 

기본적으로 자바에서는 숫자를 명시하면 int로 생각하기 때문에 long의 경우는 선언할 때 값의 뒤에 L을 붙여줘야 한다. 

소수점을 처리하고 싶어요

소수점을 처리하는 float는 32비트, double은 64비트로 표현된다.

두 자료형은 제공할 수 있는 범위를 넘어서면 정확성을 보장하지 못하기 때문에 간단한 계산에서는 사용해도 되지만, 돈 계산과 같이 정확성을 요구하는 부분에서는 사용해서는 안된다.

소수점 처리시에는 일반적으로 double을 많이 사용한다.

float와 double의 범위

  • float : 부호(1) + 지수(8) + 가수(23) = 32비트
  • double : 부호(1) + 지수(11) + 가수(52) = 64비트

Oracle의 자바 설명서에 정의된 float와 double

  • float : single-precision 32-bit IEEE 754 floating point
  • double : double-precision 64-bit IEEE 754 floating point

float는 단일 정확도를 가지는 32비트 IEEE(아이 트리플이) 754 부동 소수점이라는 의미이다.

IEEE는 국제적인 표준을 의미하고, 숫자는 그 표준의 번호이다.

char와 boolean은 어떻게 쓰는 거지?

  • char : 캐릭터(character)라고 읽고, 보통 문자열과 관련된 부분에서 사용
    • 자바에서는 Unicode(유니코드)라는 2byte를 사용해 ASCII가 할당된 값이 먼저 나오고 그 다음에 유니코드들이 나옴
    • ASCII는 1byte 단위의 문자들(알파벳, 숫자, 기호 등)마다 고정되어 있는 번호를 할당해놓은 것으로 어떤 컴퓨터든, 어떤 언어든, 어떤 OS든 똑같음
    • char 값을 지정하는 3가지 방법
      • 홑따옴표 안에 직접 문자를 넣는 것
      • 홑따옴표 안에 \u과 16진수 값을 넣는 것
      • 해당 값의 유니코드 번호를 지정
  • boolean : "true"와 "false" 두가지 값만 가지는 타입

기본 자료형의 기본 값은 뭘까?

인스턴스 변수, 클래스 변수, 매개 변수는 값을 지정하지 않아도 기본값으로 지정이 되지만,

지역 변수는 반드시 값을 지정해줘야 한다.

값을 지정하지 않는 건 좋지 않은 습관이니 명시적으로 값을 지정해주는 게 좋다.

클래스의 인스턴스 변수를 초기화하지 않을 경우 대부분은 0, char는 공백, boolean은 false가 기본값으로 할당된다.


정리해 봅시다

1. 네 가지 종류의 변수는 어떻게 구분할 수 있나요?

지역변수, 인스턴스 변수, 클래스 변수, 매개변수로 각 변수들이 선언된 위치를 보고 구분할 수 있다. 지역변수는 메소드의 중괄호 안에 선언된 변수이고, 매개변수는 메소드의 소괄호 안에 있는 변수이고, 인스턴스변수는 메소드 밖에 클래스 안에 있는 변수, 클래스 변수는 메소드 밖 클래스 안에 있고 static이라는 예약어를 사용한 변수이다. 

더보기

- 답 : 변수의 종료는 변수를 선언한 위치와 statis 선언 여부에 따라 달라진다.

2. 변수의 이름을 지을 때 대문자로 시작해도 되나요?

NO

3. 자료형에는 기본 자료형과 어떤 자료형이 있나요?

참조 자료형

4. 기본 자료형에는 몇가지가 있나요?

8개

5. 기본 자료형 중 정수형에는 어떤 것들이 있나요?

byte, short, int, long, char

6. byte는 몇 비트(bit)로 되어 있나요?

8비트

7. byte는 왜 만들었을까요?

적은 공간에 더 많은 내용을 저장하기 위해서 

8. int와 long 중 어떤 타입이 더 큰 숫자를 처리할 수 있나요?

long

9. 소수점을 처리하는 타입은 어떤 것이 있나요?

float, double

10. char는 정수형인가요?

YES

11. a라는 것을 char로 정의할 때 어떤 기호로 감싸주어야 하나요?

' '(홑따옴표)

12. true와 false 두 개의 값만을 가지는 타입은 어떤 것인가요?

boolean 

 

728x90