문서의 이전 판입니다!
자바의 프리미티브 타입, 변수 그리고 배열을 사용하는 방법을 익힙니다.
false
\u0000
0
0
0.0F
0.0
float
의 정밀도는 7자리로 10진수로 7자리의 수를 오차없이 저장할 수 있다는 의미다. 그렇기에 사용할 변수의 값의 범위가 7자리를 넘는다면 정밀도를 고려해 double
타입을 사용해야 한다.
자료형은 크게 '기본형(Primitive Type)' 과 참조형(Reference Type)으로 나눌 수 있다.
Java.lang.Object
를 상속받을경우 참조형이 된다. 즉, 기본형을 제외하고는 참조형이라 생각해도 된다.
좀 더 얘기하자면 기본형은 메모리영역의 스택영역에 실제 값들이 저장된다면, 참조형은 실제 인스턴스는 힙영역에 생성되있고, 그 영역의 주소를 스택영역에서 저장하고 있다고 보면 된다.
💡 그 자체로 값을 의미하는 것
그림
에서 2020
이 리터럴이다.상수
의 다른 이름이라고 볼 수 있다.🤔 인스턴스는 리터럴이 될 수 있을까?
불변성(Imutable)
이 보장된다면 객체 리터럴이 될 수 있다.(불변 클래스(imutable class)
) 객체 리터럴
이 될 수 없다.Java.lang.String
이나 java.awt.Color
같은 클래스는 내용이 변해야 하는 상황이면 새로운 객체를 만들어 내용의 불변성이 보장되기에 객체 리터럴
이라 부른다.
변수를 사용하기위해서는 우선 변수를 선언해야 하며 아래 그림과 같이 선언합니다.
이렇게 변수를 선언하면, 메모리의 빈 공간에 '변수타입'에 알맞은 크기의 저장공간이 확보되고, 변수 이름을 붙혀서 이 이름을 통해 해당 저장공간을 사용할 수 있게 된다.
💡 변수를 사용하기 전 처음으로 값을 저장하는 것
변수를 선언하면 메모리에 변수의 저장공간이 확보되어있지만, 여러 프로그램에 의해 공유되기 때문에 이 공간안에 어떠한 값이 저장되어있을지는 알 수 없다.
그렇기에 초기화(initialization)
를 해줘야 한다.
=
을 사용한다. 위 그림을 보면 year
라는 int
변수타입과 year
라는 변수 이름을 가진 변수에게 2020
이라는 값을 대입한다.
💬지역변수는 사용하기 전 반드시 초기화 해야 한다.
지역변수는 변수의 초기화로 충분하지만, 멤버변수의 초기화는 몇가지 방법이 더 있다.
: 변수 선언과 동시에 초기화 하는 것을 명시적 초기화라 하는데, 위에서 소개한 변수의 초기화와 동일하며, 클래스 및 지역변수 어디서든 사용가능하며 여러 초기화 방법중 최우선적으로 고려한다.
: 초기화 블럭은 클래스 초기화 블럭과 인스턴스 초기화 블럭으로 나뉜다.
class ExplicitInitialization { static { /*클래스 초기화 블럭 */ } { /*인스턴스 초기화 블럭*/ } }
클래스 초기화 블럭
: 클래스변수의 복잡한 초기화에 사용. 블럭내에서는 로직도 추가할 수 있기 때문에 명시적 초기화만으로 부족할 때 사용한다.인스턴스 초기화 블럭
: 인스턴스 변수의 복잡한 초기화에 사용. 모든 생성자가 공통으로 수행해야 하는 로직이 있을 때 사용한다.: 생성자는 말 그대로 인스턴스 생성시에 생성자 함수 안에서 명시적 초기화가 이뤄진다.
스코프는 한글로 풀어보자면 범위이다. 즉, 변수의 스코프는 변수의 범위라는건데 이 범위는 키워드와 선언된 블럭위치에 따라서 달라진다.
class A { int instanceValue; //인스턴스 변수 static int classValue;//클래스 변수(static, 공유 변수) void method(){ int localValue = 0; //지역 변수 } }
클래스 내부에 선언되는 변수를 멤버변수라 한다. 여기서 static키워드가 붙은 변수를 클래스 변수, static 키워드가 없는 변수를 인스턴스 변수라 한다. 그리고 메서드 내부에 있는 localValue는 지역변수이다. 이 셋 모두의 범위와 생성시기는 다르다.
1) 인스턴스 변수(instance variable)
2) 클래스 변수(class variable)
static
키워드를 붙힐 경우 클래스 변수가 되며 한 클래스의 모든 인스턴스가 값을 공유한다.class LottoTicket { public static final LOTTO_PRICE = 1000; ... } public static void main(String[] args) { //LottoPrice: 1000 System.out.println("LottoPrice: "+ LottoTicket.LOTTO_PRICE); }
3) 지역 변수(local variable)
public static void main(String[] args) { for (int i = 0; i < 10; i++) { System.out.println("i = " + i); } System.out.println("i = " + i);//Checked Exception 발생 }