4. 기본형 변수 vs 참조형 변수
1) 기본형 변수
- 기본형 데이터를 저장하는 변수
ex)
int num; // 실제값이 저장
num = 20;
==> num 변수안에 20이 저장됨
2) 참조형 변수
- 참조형 데이터를 저장하는 변수
ex)
String name; // 주소값이 저장
name = "홍길동";
==> name 변수안에는 "홍길동" 이 저장된 주소값이 저장됨.
5. 변수 종류 ( * )
- 변수 선언 위치와 용도에 따른 분류
가. 로컬 변수 ( local variavle )
- 메서드 안에서 선언
- 생성시점: 메서드 호출시 변수생성됨
- 제거시점: 메서드 호출후 작업이 모두 끝났을때
- 생성횟수: 메서드 호출할때마다 매번 생성되고,
메서드 작업이 끝나면 매번 삭제됨.
( 일시적으로 사용할 목적으로 주로 사용됨. )
- 저장메모리: stack 메모리
- 선언만하고 초기화하지 않으면 자동초기화 안됨.
반드시 사용전에 초기화해야 된다( * ).
나. 인스턴스 변수 ( instance variavle )
- 메서드 밖에서 선언
- 생성시점: 클래스 객체 생성( new 키워드 이용 )시 변수생성됨
- 제거시점: 클래스 객체가 제거될 때 변수가 삭제됨.
==> 개발자가 클래스를 사용하기 위해서 new 이용한다.
( new = 클래스 영역 확보 )
사용된 클래스 영역을 제거는 개발자가 하지않고 자바가 자동으로 제거해준다. 제거해주는 프로세스는 GC ( Garbage Collector )가 해준다.
==> C 언어는 영역확보 및 제거를 개발자가 모두 직접 해야된다.
- 생성횟수: new 키워드를 사용할때 마다 생성.
- 저장메모리: heap 메모리
- 선언만하고 초기화하지 않으면 자동으로 기본값으로 초기화된다.
기본형(정수): 0
기본형(실수): 0.0
기본형(문자): \u0000
기본형(논리): false
참조형: null
* Garbage Collector
- 프로그램에서 더 이상 사용하지 않는 메모리 공간을 자동으로 모아서 처리하는 프로세스.
- 시스템이 한가하거나 메모리가 부족한 위급 상황에서 GC 가 동작
- System.gc(); 사용하여 수행권유 가능.
다. 클래스 변수 ( class variable, static variable )
- 메서드 밖에서 선언 + static 키워드 추가
- 생성시점: 프로그램 실행시 변수생성됨.
- 제거시점: 프로그램 종료시 변수가 삭제됨.
- 생성횟수: 1번
- 저장메모리: method area 메모리
- 선언만하고 초기화하지 않으면 자동으로 기본값으로 초기화된다.
기본형(정수): 0
기본형(실수): 0.0
기본형(문자): \u0000
기본형(논리): false
참조형: null
package exam02_변수;
public class VariableTest3_변수종류 {// class 영역
// 메서드 밖
int size = 20; // -> 인스턴스 변수
int n; // 선언만하고 초기화하지 않으면 자동으로 기본값으로 초기화된다. -> 0으로 초기화
static int age = 10; // -> 클래스(static) 변수
static int age2; // -> 기본값인 0으로 초기화
static double age3; // -> 기본값인 0.0 으로 초기화
static String name; // -> null 로 초기화
public static void main(String[] args) { // main 메서드영역
// 메서드 안
int num = 10; // -> 로컬 변수
int num2; // -> 초기화가 되자않은 로컬 변수
System.out.println(num);
// System.out.println(num2); // 로컬변수인데 초기화가 되자않아 오류가 발생
//-> 에러 해결
// int num2 = 0;
// System.out.println(num2);
//---------------------------
// 인스턴드 변수: new 이용했을 때 생성됨.
// 클래스명 변수명 = new 클래스();
VariableTest3_변수종류 s = new VariableTest3_변수종류();
System.out.println(s.size);
// 클래스 변수, static 변수: 프로그램 실행시 생성됨.
System.out.println(age);
// -> 로컬변수에 age 가 선언되어잇다면 로컬 변수에 있는 age 를 가져오고
// 아니라면 인스턴스 변수를 가져온다.
System.out.println(VariableTest3_변수종류.age); // -> 더 정확한 접근방법
}
}
변수의 종류와 관련된 코드들이고 변수의 특징은 아래와 같다.
6. 변수 특징
1) 변수명이 동일하면 안됨.
2) 로컬변수는 사용전에 반드시 초기화
초기화 안하면 컴파일 에러 발생됨.
3) 변수를 인식하는 범위 ( scope )
==> 블럭( 중괄호 '{ }' )
package exam02_변수;
public class VariableTest4_변수특징 {// class 영역 , class 블럭
int num = 200; // 인스턴스변수 -> heap 저장
// 저장되는 메모리가 달라서 식별가능
public static void main(String[] args) { // main 메서드영역, 메서드블럭
// 변수 특징
// 1. 동일이름 사용 불가
// 로컬변수 -> stack 저장
int num = 10;
// String num = "100";
System.out.println(num); // 어떤 num 을 쓸지 식별이 불가능해서 에러발생
// 2. 로컬변수는 사용전에 반드시 초기화
// 3. 변수는 인식 범위 ( 블럭 scope 라고 부른다. )
// 참고) 나중에 javascript 는 기본적으로 블럭 scope 아니고 함수 scope 를 따른다.
// - 블럭 scope
{
int k = 2;
System.out.println(k);
}
// System.out.println(k); // 사용x
// 블럭안에 선언된 변수는 블럭안에서만 사용해야한다.
// ex)
// if(true) {
// int k = 2;
// System.out.println(k);
// }
// System.out.println(k);
}
}
'[study]이론정리 > JAVA(eclipse)' 카테고리의 다른 글
java 2일차 정리 _ 03. 형변환 (0) | 2024.03.08 |
---|---|
java 2일차 정리 _ 02. 변수(3) (0) | 2024.03.08 |
java 2일차 정리 _ 02. 변수(1) (0) | 2024.03.08 |
java 2일차 정리_ 01. 데이터종류 (0) | 2024.03.08 |
java 수업 1일차 요점정리 (0) | 2024.03.08 |