변수 (Variable)
1. 용도
: 데이터 저장 (기본형 데이터 및 참조형 데이터 저장 용도)
2. 사용 방법 3단계
1) 변수 선언
- 데이터가 저장된 영역 확보 작업 (메모리에 저장되고 메모리 위치에 해당되는 이름 지정) 데이터 위치는 16진수
- 언제든지 값이 변경될 수 있다
- 데이터타입 변수명;
- int num;, String name;
2) 변수 초기화
- 생성된 변수에 처음 값을 저장하는 작업;
- 변수명 = 값;
- num = 2;, name = "박현아";
3) 변수 사용
- System.out.println(num);
- System.out.println(name);
3. 기본형 변수 vs 참조형 변수
1) 기본형 변수
2) 참조형 변수
- 참조형 데이터를 저장하는 변수
- 변수에는 주소값을 저장, 주소값을 따라가면 값이 있음
4. ★ 변수 종류 ★
: 변수 선언 위치와 용도에 따른 분류
1) 로컬 변수 (local variable)
- 메서드 안에서 선언
- 생성 시점 : 메서드 호출 시 변수 생성됨
- 제거 시점 : 메서드 호출 후 작업이 모두 끝났을 때 (Life Cycle)
- 생성 횟수 : 메서드 호출할 때마다 매번 생성되고 메서드 작업이 끝나면 매번 삭제됨
- 일시적으로 사용할 목적으로 주로 사용됨
- 저장 메모리 : stack
- 선언만 하고 초기화 하지 않으면 자동 초기화 안 됨
- 반드시 사용 전에 초기화 해야 된다 !!
2) 인스턴스 변수 (instance variable)
- 메서드 밖에서 선언
- 생성 시점 : 클래스 객체 생성할 때 (new 키워드 이용)
- 제거 시점 : 클래스 객체가 제거될 때
- 생성 횟수 : new 할 때마다 매번 생성
- 저장 메모리 : heap
- 선언하고 초기화하지 않으면 자동으로 기본값으로 초기화 된다
3) 클래스 변수 / 스태틱 변수 (class variable, static variable)
- 메서드 밖에서 선언 + static 키워드
- 생성 시점 : 프로그램 실행 시 (가장 빨리 만들어짐)
- 제거 시점 : 프로그램 종료 시 (가장 빨리 삭제됨)
- 생성 횟수 : 1번
- 저장 메모리 : method area
- 선언하고 초기화하지 않으면 자동으로 기본값으로 초기화 된다
- 정수형 0, 실수형 0.0, 문자형 \u0000, 논리형 false, 참조형 null

5. 변수 특징
1) 변수명이 중복되면 안 됨
2) 로컬 변수는 사용 전에 반드시 초기화! 초기화 안 하면 컴파일 에러 발생
3) 변수를 인식하는 범위 (scope) : 블럭 (중괄호)
(cf. 자바스크립트 언어는 함수 scope를 따른다)
6. 상수 (Constant)
- 상수는 값 변경 불가
- final 키워드
- 변수와 구별하기 위해 대문자로 지정 (관례)
- final int NUM = 100;
7. 데이터형 변환
- byte (1바이트) -> short (2바이트) -> int (4바이트) -> long (8바이트) -> float (4바이트) -> double (8바이트)
- char -> int
- 정수형 중에서 int 보다 작은 타입의 연산 결과는 기본값인 int로 반환된다 (byte+byte= int, short+short= int)
- 작은 데이터형과 큰 데이터형 결과는 큰 데이터형으로 반환된다 (정수형 + 실수형 = 실수형)
2) 강제형변환 (명시적, type casting, down-casting, 일반적으로 의미하는 형변환)
- 큰 걸 강제적으로 작게 변환하는 것
- 작은 타입 = (작은 타입) 큰 타입;
3) 참조형(클래스)도 형변환이 가능하다 !!!!!! 자바의 모든 데이터는 형변환이 가능하다 !!!!!!
8. 콘솔에 값을 출력하는 방법
-모니터에 출력하는 경우는 표준 출력 (standard output)
-반대로 키보드로 출력을 받는 경우는 표준 입력 (standard input)
1) System.out.println(값);
2) System.out.print(값);
- 새로운 줄 없이 현재 줄에 출력
- 반드시 하나의 값만 지정
3) System.out.printf(" ", ...); (...은 가변 인자)
- String name ="홍길동";
int age = 20;
System.out.printf("이름:%s, 나이:%d", name, age);
- 정수값: %d
실수값: %f
문자값: %c
논리값: %b
문자열: %s
참고 사이트