1. 변수란 ? (Variable)
- RAM에 값을 기록하기 위한 공간
- 공간에 기록되는 값(Date)이 변할 수 있어서 변수라고 한다.
- 변수는 여러 종류 존재하며, 저장되는 값의 형태 크기가 다르다.
- 하나의 값을 저장할 수 있는 저장공간
→ 변수를 사용할 때 장점은 ?
- 가독성이 증가 한다.
- 재사용성이 증가한다.
- 코드 길이가 감소된다.
- 유지보수성이 증가한다. (코드수정용이)
// 변수 사용하지 않았을때
System.out.println(2*3.141592653589793*10);
System.out.println(3.141592653589793*10*10);
System.out.println(3.141592653589793*10*10*20);
System.out.println(4*3.141592653589793*10*10);
// 변수 사용했을때
double pi = 3.141592653589793; // 원주율
int r = 10; // 반지름(radius)
int h = 20; // 높이(heigth)
System.out.println(2*pi*r); // 원의 둘레
System.out.println(pi*r*r); // 원의 넓이
System.out.println(pi*r*r*h); // 원기둥의 부피
System.out.println(4*pi*r*r); // 구의 겉넓이
만일, 반지름값이 10이 아닌 5로 변경하고 싶을때
변수를 사용하지 않았을때는 10번 5로 바꾸는 작업을 7번을 반복해야 하지만,
변수를 사용하였을때는 r 값만 5로 변경해주면 된다.
** 변수의 분류**
변수의 종류는 총 2가지가 있다. '기본형변수' '참조형변수'가 있다.
1) 기본형변수
ㄴ 변수는 하나의 값을 저장할 수 있는 공간이라고 하는데, 기본형 변수는 공간에 실제값을 저장하는 변수이다.
실제 값이란 우리가 직접 지정하고 저장하는 값을 말한다.
2) 참조형변수
ㄴ 실제 값을 저장하는 것이 아니라 주소값을 저장하는 변수이다.
! 자바 기본형 변수 8가지
1. 논리형
blooean | 1byte | true / false |
2. 문자형
char | 2byte | 모든 유니코드 문자 |
char ch = 'A'; //65
char ch2 = 66; // B
// ** char 자료형에 숫자가 대입될 수 있는 이유
// - 컴퓨터에는 문자표가 존재하고 있는데
// 숫자에 따라 지정된 문자 모양이 매핑되어있고
// 'B' 문자 그대로가 대입이 되면 변수에 숫자 66으로 변환되어 저장
// -> 반대로 생각하면 변수에 애초에 66이라는 숫자를 저장하는 것이 가능
3. 정수형 : 소수점이 없는 숫자
데이터 타입 | 메모리의 크기 | 표현 가능 범위 |
byte | 1 byte | -128 ~ 127 |
short | 2 byte | -32,768 ~ 32,767 |
int | 4 byte | -2,147,483,648 ~ 2,147,483,647 |
long | 8 byte | -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 |
* long longNumber = 10000000000L (대문자 소문자 상관없음)
4. 실수형 : 소수점이 있는 숫자
float | 4byte | ±(1.40129846432481707e-45 ~ 3.40282346638528860e+38) |
double | 8byte | ±(4.94065645841246544e-324d ~ 1.79769313486231570e+308d) |
* float floatNumber = 1.2345f (대문자 소문자 상관없음)
*** float형 / long형을 이요할때 리터럴 끝에 (f) / (l)을 붙이는데 이러한 이유는
java에서 정수는 int 타입이 기본형이며 실수형은 double형 타입이 기본형이기 때문입니다 ***
( 그냥 그렇구나 하고 넘어가기)
2. 변수 선언
ㄴ 메모리에 값을 저장할 공간을 할당하는 것
변수 값 대입 : 생성된 변수(저장공간)에 값을 대입하는 것
리터럴 : 변수에 대입되는 값 자체
double doubleNumber = 3.141592;
자료형 변수명 리터럴
* 약속* 코딩할 때 = 은 수학에서 말하는 '같다'의 의미가 아니다. = 을 기준으로 오른쪽을 왼쪽에 대입한다는 의미이다. 또, 데이터값을 저장하는 것을 '초기화한다' 라고 말한다. boolean booleanData; 메모리에 논리 값(t/f)을 저장할 공간을 1byte 할당하고 할당된 공간을 booleanData라고 부르겠다. int intNumber; 메모리에 정수값을 저장할 공간을 4byte할당하고 할당된 공간을 intNumber이라고 부르겠다. |
* 변수 명명 규치
1. 대소문자 구분, 길이제한 없다.
int abcdefghijklmnopqrstuvwxyz;
int abcdefghijklmnopqrstuvwxyZ; // Z 다름
2. 예약어 사용불가 (예약어는 색으로 표시되니, 딱히 외울필요는 없다)
3. 숫자로 시작되면 안된다.
char 1abc; -> 불가
char abc1; -> 가능
4. 특수문자 $, _만 사용 가능 / 언어를 가리지 않음 (하지만 쓰지 않는다.)
int $intNumber;
int int_number;
int 정수1번;
double 실수2번 = 3.14;
5. 카멜표기법
ㄴ 변수명 작성 시 여러 단어를 이어서 작성하는 경우 띄어쓰지 않고 후속단어 첫글자만 대문자로 작성
단, 첫 시작 글자는 소문자로 하는 것이 관례
char helloWorldAppleBananaTomato;
* 자주 놓치는 부분 정리*
* long longNumber = 10000000000L (대문자 소문자 상관없음)
* float floatNumber = 1.2345f (대문자 소문자 상관없음)
*** float형 / long형을 이요할때 리터럴 끝에 (f) / (l)을 붙이는데 이러한 이유는
java에서 정수는 int 타입이 기본형이며 실수형은 double형 타입이 기본형이기 때문입니다 ***
3. 상수(항상 같은 수 / 변하지 않는 수)
- 변수의 한 종류 이며, 한번 값이 대입되면 다른값을 대입할 수 없음
- 자료형 앞에 final 키워드 작성
- 상수 명명 규칙 : 모두 대문자, 여러 단어 작성 시 "_" 사용
- 상수를 사용하는 경우
1) 변하면 안되는 고정된 값을 저장할 때
2) 특정한 값에 의미를 부여하는 경우
final double PI_VALUE = 3.14;
//PI_VALUE = 2.3222; // 에러! 대입 불가! PI_VALUE는 final로 변하지 않는다고 선언함!
final int LEFT_MOVE = -1;
final int RIGHT_MOVE = 1;
4. 형변환 (Casting) : 값의 자료형을 변환하는 것 (단, boolean 제외)
형변환은 왜 필요할까?
- 컴퓨터는 기본적으로 같은 자료형 끼리만 연산이 가능함
- 다른 자료형과 연산 시 오류 발생
--> 이런 상황을 해결하기 위해서 필요한 기술이 형변환
① 자동 형 변환
- 값의 범위가 큰 자료형과 값의 범위가 작은 자료형의 연산시
작은 자료형 -> 큰 자료형으로 컴파일러에 의해 자동적으로 변환되는 것
// int -> double로 형변환
int num1 = 10;
double num2 = 3.5;
System.out.println("자동 형변환 결과 : " + (num1 + num2)); //13.5
// char -> int 형변환
char ch3 = 'V';
int i3 = ch3; // 대입도 연산이다!
// int 변수 = char 값
// -> int 자동 형변환
System.out.println(i3);//86
① 강제 형 변환
- 기존 자료형을 원하는 자료형으로 강제 변환 시키는 것
1) 값의 범위가 큰 자료형을 작은 자료형으로 변환할 때 사용
2) 출력되는 데이터의 표기법을 변화시키고 싶을 때
강제 형변환 방법
- 자료형을 변환 시키고 싶은 값 또는 변수 앞에 (자료형)을 작성
ex) double temp = 3.14;
int num = (int)temp;
System.out.println("temp : " + temp); // 3.14
System.out.println("num : " + num); // 3
ㄴ 실수 -> 정수형 변환 시 소수점 버림 처리(데이터 손실)
여기서 문제 !
소문자 'a' 보다 10칸 뒤에 있는 문자는 무엇일까? (정답은 밑에 있어요)
소문자 'a' 보다 10칸 뒤에 있는 문자는 무엇일까?
char ch = 'a';
int iNum = ch + 10;
System.out.println((char)iNum)); //K
System.out.println((char)(int)ch+10)); //K
System.out.println((char)ch+10)); //K
혹시, 오답중 아래와 같은 사람이 있다면,
System.out.println((char)ch+10)); //107
자바는 사칙연산의 우선순위를 그대로 따른다!
즉 char 이부분 무시하고 ch + 10 ch = a이고 a를 이진수로 바꾸면 97이기에 97+10 하면 107이 나온다.
그리니 가로를 잊지말자!
'ON > JAVA' 카테고리의 다른 글
1주차_지금까지 이해하지 못한 것 개념이 확실하지 않는 것에 대해서 정리 (0) | 2023.04.21 |
---|---|
5일차_반복문 (1) | 2023.04.20 |
04일차_ 연산자/ if문 / switch 문을 배우다 . (0) | 2023.04.19 |
03일차_ 출력메소드/스캐너/연산자를 공부하다. (0) | 2023.04.18 |
01일차. 프로그래밍 기초 (0) | 2023.04.17 |