들어가기 전
해당 내용은 자바의 신 3판을 읽고 내용 정리 및 공부한 내용을 정리한 글입니다!
자바의 신 Vol 1: 기초 문법편 | 이상민 - 교보문고
자바의 신 Vol 1: 기초 문법편 | 현장 전문가가 쓴 자바 기초 입문서다. NAVER, NHN, SKPlanet 등에서 성능 전문가의 풍부한 경험을 바탕으로 자바를 실무에 맞게 제대로 쓸 줄 알게 해주는 입문서를 목
product.kyobobook.co.kr
4장. 정보를 어디에 넣고 싶은데
1. 자바의 변수
어떤 프로그래밍 언어를 사용하든 간에 내용을 어디엔가 담아둬야한다.
그, 담아 두는 것을 '변수(Variavle)'라고 한다. 그리고, 담아 두는 것에는 항상 이름을 정해두어야 한다.
- 지역 변수 (local variables)
- 중괄호 내에서 선언된 변수.
- 지역변수를 선언한 중괄호 내에서만 유효하다.
- 매개 변수 (parameters)
- 메소드에 넘겨주는 변수.
- 메소드가 호출될 때 생명이 시작되고, 메소드가 끝나면 소멸된다.
- 인스턴스 변수 (instance variables)
- 메소드 밖에, 클래스 안에 선언된 static 이 없는변수.
- 겍체가 생성될 때 생명이 시작되고, 그 객체를 참조하고 있는 다른 객체가 없으면 소멸된다.
- 클래스 변수 (class variables)
- 메소드 밖에, 클래스 안에 선언된 static 있는 변수
- 클래스가 처음 호출될 때 생명이 시작되고, 자바 프로그램이 끝날 때 소멸된다.
📑 할당
C나 C++이라는 언어는 할당(allocation)을 한 변수에 어떤 값을 지정했으면,
개발자가 추후 할당을 해제할 수 있다. 그러면 바로 메모리에서 사라진다.
하지만 자바에서는 가비지 콜렉터(Garbage collector)가 알아서 메모리를 청소해 주기 때문에
개발자가 임의로 할당 해제할 수가 없고 해서도 안 된다.
2. 변수의 이름
- 길이의 제한은 없다
- 첫문자는 유니코드 문자, 알파벳, $, _만 올 수 있다.
그런데 보통 변수 이름은 일반적으로 $와 _로 시작하지 않는다. - 두 번째 문자부터는 유니코드 문자, 숫자 $,_ 중 아무거나 사용할 수 있다.
- 첫 문자는 소문자로 시작하는 단어이고 두 번째 단어의 첫 문자만 대문자로 시작하면 된다.
- 상수의 경우 모두 대문자로 지정하며 단어와 단어사이에는 _로 구분을 한다.
산수는 절대 변하지 않는 값을 말한다.
3. 변수 초기화
어떤 변수든 값을 저장하기 위해서 만든다. 저장할 값이 정해져 있다면, 그 값을 지정해주면 되겠지만,
항상 저장할 값이 정해져 있지는 않다. 그래서 변수를 선언할 때에는 초기화를 해 줘야 변수가 사용할 수 있는 상황이 된다.
초기화할 때 예외로는 참조형 중 String이 있다.
- String str = "god of java";
- String str = new String("god of java");
String만이 참조 자료형이지만 new를 사용해서 객체를 생성하지 않아도 되는 유일한 타입이다.
4. 자바의 타입 (기본자료형)
기본 자료형은 총 8개로 숫자와 boolean 타입 두가지고 나뉜다. 그리고 숫자는 정수형과 소수형으로 나뉜다.
- 정수형 : byte, short, int, long, char
- 소수형 : float, double
- 논리형 : boolean
byte, short, int, long, float, double 은 순서대로 해당 타입의 범위가 정해진다.
4-1. 정수형
정수형에는 byte, short, int, long, char 가 있다.
방금 타입의 범위가 정해진다고 했는데, 자바에서는 숫자의 크기에 제한이 있다.
만약 제한이 없다면, π(파이) 같은 무한 소수도 엄청나게 길게 저장할 수 있을 것이다.
각 정수형의 타입별 숫자의 범위는 다음과 같다.
타입 | ||
byte | (-128) | (127) |
short | (-32,768) | (32,767) |
int | (-2,147,483,648) | (2,147,483,647) |
long | (-9,223,372,036,854,775,808) | (9,223,372,036,854,775,807) |
char | (’\u0000’) | (’\uffff’) |
컴퓨터는 0과 1을 사용하는 2진법으로 숫자를 표현한다.
따라서 모든 자바의 숫자 타입들은 2의 배수로 그 범위가 정해진다.
byte부터 long까지의 범위를 보면, 8 → 16 → 32 → 64 순으로 2배씩 범위가 증가하고 있는 것을 볼 수 있다.
가 아닌, 로 표기되고 있는 이유는 바로 부호가 있기(signed) 때문이다.
음수와 양수를 표현해주기 위해 맨 앞의 있는 값을 사용한다.
또한 기본적으로 자바에서는 숫자를 명시하면 int로 생각하기 때문에 long타입의 숫자를 명시적으로 지정해 줄 때에는 반드시 숫자 가장 뒤에 L에 붙여주어야만 한다.
💡 맨 앞에 있는 값이 0이면 양수, 1이면 음수
4-2. 실수형
float 와 double 모두 소수점 값을 처리하기 위해서 사용되며 float는 32비트이며, double은 64비트로 표현된다.
그런데, 이 두 가지의 소수점은 간단한 계산에서는 사용해도 무방하지만
돈 계산과 같이 중요한 부분에서는 사용해서는 안 된다.
왜냐하면 이 타입들은 32비트와 64비트로 제공할 수 있는 범위를 넘어서면 그 값의 정확성을 보장하지 못하기 때문이다.
그래서 자바에서는 돈 계산과 같이 정확한 계산이 요구 될때는 java.math.BigDecimal 이라는 클래스를 사용해야한다.
char와 boolean 값을 어떻게 쓰는거지 ?
① char 자료형
- 홑따옴표 안에 직접 값을 넣기
- 홑따옴표 안에 \u와 16진수의 값을 넣기
- 해당 값의 유니코드 지정하기(char 범위 내의 숫자여야만 한다.)
[char 사용예시]
char test0 = 'a';
char test1 = '가';
char test2 = '\u1188';
char test3 = 44032;
char는 정수형이므로 아래와 같이 사용해도 문제는 없다
왜냐하면 char의 범위는 (0~65,535)는 int 보다 좁기 때문에 이와 같은 형변환은 가능해야 한다.
int intValue = 'a'
결과는 아스키코드 97의 값이 찍힐 것 이다.
💡 ASCII 코드란?
자바에서는 Unicode라는 2byte를 사용하기 때문에 ASCII가 할당된 값들이 먼저 나오고,
그 다음에 미리 정해져 있는 유니코드들이 존재한다.
② boolean 자료형
boolean은 “true”와 “false”, 두 개의 값밖에 없다. 다시 말해서, “참”과 “거짓”밖에 없는 타입이다.
boolean flag1 = true;
boolean flag2 = false;
5. 기본 자료형의 기본 값
자바의 모든 자료형은 값을 지정하지 않으면 기본값을 사용한다.
그런데, 지역변수로 기본 자료형을 사용할때에는 기본 값이 자동으로 적용되지 않고, 반드시 값을 지정해야한다.
즉, 메소드 안에서 정의한 변수에 값을 지정하지 않고 사용하려고 하면, 컴파일 시 오류가 난다.
인스턴스 변수, 클래스 변수, 매개 변수는 값을 지정하지 않아도 컴파일이 되기는 한다.
하지만, 이렇게 값을 지정하지 않고 개발하는 것은 매우 안좋은 습관이다.
만약 그 변수의 값이 기본 값이라고 할지라도, 명시적으로 기본값을 지정하자.
아래 코드를 컴파일 및 실행해보면 정상적으로 동작한다.
public class PrimitiveTypes {
int intDefault1;
public void defaultValues() {
int intDefault2;
}
}
여기서 왜 지역 변수인 intDefault2 를 초기화하지 않았는데도
컴파일과 실행이 되는 이유는, intDefault2를 사용하는 부분이 없기 때문이다.
다음과 같이 intDefault2 를 출력하는 코드를 추가하면 컴파일 시 초기화가 되지 않았다는 에러가 난다.
public class PrimitiveTypes {
int intDefault1;
public void defaultValues() {
int intDefault2;
System.out.println(intDefault1);
System.out.println(intDefault2);
}
}
정리해보자.
책에 있는 질문에 대한 나의 정답을 적은 것이다.
'ON > 개발지식' 카테고리의 다른 글
[책리뷰] 자바의 신 3판 - 6장. 제가 조건을 좀 따져요 (1) | 2023.12.07 |
---|---|
[책리뷰] 자바의 신 3판 - 5장.계산을 하고 싶어요 (1) | 2023.12.05 |
[책리뷰] 자바의 신 3판 - 3장.자바를 제대로 알려면 객체가 무엇인지를 알아야 해요 (1) | 2023.12.04 |
[책리뷰] 자바의 신 3판 - 2장.Hello God Of Java (0) | 2023.12.02 |
[책리뷰] 자바의 신 3판 - 1장.프로그래밍이란 무엇인가 ? (1) | 2023.12.01 |