변수란?
일반적인 변수의 뜻 - 고정되어 있지 않은 수
자바에서의 변수의 뜻 - 데이터 또는 자료를 저장하기 위한 메모리 공간
IT 기초 지식
[ 입력 -> 기억(RAM,SSD) -> 연산(CPU) ]
CPU (Central Processing unit)
중앙 처리 장치
- 연산 및 제어 장치
- 컴퓨터 시스템 통제
- 프로그램 연산 실행하는 가장 핵심적인 컴퓨터의 제어 장치
- 기계어로 쓰인 명령어를 해석하여 실행
- 램에 기억된 것만 처리할 수 있음
RAM (Random Access Memory)
주 기억장치
- 보조기억장치에 있는 데이터들을 불러와서 cpu가 작업할 수 있게 해주는 작업공간(메모리공간)
HDD(Hard Disk Drive)
보조 기억장치
- 보조 기억장치에서 필요한 것들을 RAM으로 불러와서 CPU가 작업
- 수많은 정보를 저장하고 있는 공간
- 읽기/쓰기가 느리고 충격에 약함
SSD(Solid State Drive)
보조 기억장치
- 보조 기억장치에서 필요한 것들을 RAM으로 불러와서 CPU가 작업
- 수많은 정보를 저장하고 있는 공간
- 읽기/쓰기가 매우 빠르고 충격에 강함
로딩(Loading)
보조 기억장치에 있는 정보를 램으로 (불러오는)복사하는 과정
변수 선언
메모리 공간을 이용하기 위해서는 변수 선언을 해야 함
DataType 변수명;
DataType의 의미
-변수 공간의 크기, 유형
명명 규칙( 식별자 규칙 )
식별자란? 프로그램 내에서 사용하는 변수, 함수, 상수 등에 부여한 이름을 말함
작성규칙
1. 영문자 대 소문자, 숫자, _(underline), $의 조합으로 구성
2. 숫자의 경우 가장 첫 글자로 쓰여서는 안됨
3. 예약어를 사용하면 안됨
4. 공백이 있으면 안됨
여타 권장 규칙 (반드시는 아니지만 암묵적인 약속으로 가능한 지키자)
1. 클래스 이름의 첫 글자는 항상 대문자
- 변수와 method이름의 첫 글자는 항상 소문자
2. 여러 단어로 이루어진 이름 중 단어의 첫 글자는 대문자
- StringBuffer, LastIndex 등
자료형(datatype)
변수에 적재할 데이터가 메모리에 어떻게 저장되고
프로그램에서 어떻게 처리되어야 하는지를 명시적으로 알려주는 키워드
기본형 변수 (Primitive Type)
계산을 위해 실제 값을 저장
참조형 변수 (Reference Type)
객체의 주소를 저장. null 또는 객체의 주소를 갖음
기본형 변수 (Primitive Type)
기본형 타입의 특징
- 모두 소문자로 시작됨
- 비객체 타입( null 값을 가질 수 없음, 기본값이 존재 )
- 변수의 선언과 동시에 메모리 생성
- 모든 값 타입은 메모리의 스택에 저장
- 저장공간에 실제 자료 값을 가짐
참조형 변수 (Reference Type)
- 기본형 변수를 제외한 나머지
- 배열 타입, 열거 타입, 클래스, 인터페이스가 해당
- 기본형과 달리 실제 값이 저장되지 않고 , 자료가 저장된 공간의 주소를 저장
- 즉, 실제 값은 다른 곳에 있으며 값이 있는 주소를 가지고 있어서 나중에 그 주소를 참조해서 값을 가져옴
- 메모리의 힙(heep)에 실제 값을 저장하고, 그 참조값(주소값)을 갖는 변수는 스택에 저장
- 참조형 변수는 null 로 초기화 시킬 수 있음
기본형 변수 | 참조형 변수 |
사이즈 작고 고정적 | 사이즈 크고 가변적 |
변수에 값이 저장 | 변수에 값의 주소가 저장 |
Data type Promotion
좁은 범위의 자료형이 넓은 범위의 자료 형에 대입
( promotion = 진급 )=> 자료형이 진급되는 현상
실수는 항상 정수형보다 큼
자동으로 형 변환
Data type Casting
넓은 범위의 자료 형이 좁은 범위의 자료 형에 대입
Cast 연산자를 이용
boolean과 String은 형 변환이 되지 않음
실습 [기본형 자료형 실습해보기] exam02.java
public class Exam_02 {
public static void main(String[] args) {
// 정수형 타입
byte a = 127;
short b = 32767;
int d = 2100000000;
long e = 1000000000L;
// 문자형 타입
char c1 = 'A';
char c2 = 65;
// 문자열 타입
float f = 3.14f;
double g = 5.12;
// 논리형 타입
boolean h = true; // false
// 문자열 타입
String i = "Hello world";
System.out.println(c1); //A가 출력됨
System.out.println(c1+c2); // 130이 출력
System.out.println(c1 + 10); //75가 출력됨
System.out.println(c1 + "안녕하세요"); //A안녕하세요
// char 변수에는 해당 문자의 유니코드 값이 저장.
// + 연산자는 숫자에 대해서는 덧셈을 수행하고, 문자열에 대해서는 문자열 연결을 수행함
// 문자 타입과 문자열을 +연산자로 연결하는 경우에는 문자열 연결을 수행
}
}
실습 [promotion과 casting 연습해보기] exam03.java
- promotion 실습
public class Exam_03 {
public static void main(String[] args) {
byte a = 10;
short b = 0;
b = a;
System.out.println(b); // 10 출력
System.out.println(3/2);
// 1 출력? 정수와 정수의 연산은 출력값도 정수값
System.out.println(3/2.0);
// 실수형이 항상 정수형보다 큼
// int type 이 실수형으로 바뀜 -> 1.5출력
System.out.println(10+5); // 15 출력
System.out.println("두 수의 합 : " + 10+5);//두수의 합 : 105 출력
// 1. 두 수의 합이라는 문자열과 숫자 10을 먼저 연결
// 2. 다시 문자열 두 수의 합 : 10과 숫자 5를 연결해서 두수의 합 : 105가 출력되는것임
System.out.println("두 수의 합 : "+ (10+5)); //두 수의 합 : 15 출력
// 1. 숫자 10과 5를 더한 결과를 계산
// 2. 문자열 두 수의 합과 숫자 15를 연결하면 두 수의 합 : 15가 출력됨
}
}
- casting 실습
public class Exam_03 {
public static void main(String[] args) {
// [casting 실습]
byte a = 0;
short b = 10;
// a = b; // 에러 발생 큰 데이터 타입에서 작은 데이터 타입으로의 자동 형 변환은 허용x
a = (byte)b; // 해결 방법 - cast 문법 : 강제 형 변환 연산자
System.out.println(a); //10 출력
}
}
- promotion, casting 실습 응용
public class Exam_04 {
public static void main(String[] ar) {
byte b = 10;
char ch = 'A';
int i = 100;
long l = 1000L;
b = (byte)i;
ch = (char)b; // char 범위는 0~65535 (음수 값 표현 x)
short s = (short)ch; //short 범위 : -32768~32767
float f=l; // 실수는 항상 정수형보다 큼 , 자료형 변환 할 필요 x
i = ch;
}
}
퀴즈
public class Quiz_03 {
public static void main(String[] ar) {
// 문제1
int a = 1325;
int b = 9327;
System.out.println(a*b);
// 문제2
long c = 10000000000L + 5000;
System.out.println(c);
// 문제3
char c1 = 'A';
char c2 = 'B';
System.out.println(c1+c2);
// ''은 문자열 아님 -> +를 하면 연산이 됨
//해결방법 1
System.out.print(c1);
System.out.println(c2);
//해결방법 2
System.out.println(""+c1+c2);
}
}
'2024_풀스택학원 > Back-end' 카테고리의 다른 글
[Java] 생성자 & 게터 세터(Constructor & Getter Setter) (0) | 2024.04.04 |
---|---|
[Java] Method (0) | 2024.04.02 |
[Java] 제어문 (0) | 2024.03.28 |
[JAVA] 이클립스 프로젝트 생성 및 클래스 파일 생성 (0) | 2024.03.26 |
[Java] 자바란? (1) | 2024.03.25 |