오늘은 2번째 자바수업날!!! ㅎㅎㅎ
수업때 조금 이해가 안되는부분도 있긴 했지만!
멘토님이 항상 수업끝나고 다시 수업내용을 설명해주시기 때문에
이해완료!!!!!!!
공부하면서 새삼 느끼는거지만
전 다시 수업내용 알려주시는게 너무 좋은거같아영 ㅎㅎ
수업때 듣고, 멘토님 설명해주시고, 다시 내가 읽으면
3번 읽으니깐 더 이해 잘된달까요? 히히 ㅎㅎ
오늘은!!! 변수 !
변수
프로그래밍 하는 과정에서 필요에 따라 데이터를 저장할 때 사용하는 공간!
이렇게 들으면 딱딱해서 뭔가 음? 하지 않아요? ㅋㅋㅋㅋ

양동쓰 같이 물담는 것 마냥 데이터를 담을 수 있는 공간을 말합니다!!!
즉, 데이터 담을 공간을 할당하기 위해 변수 선언을 하는것!!!
( 양동쓰 보고 공간의 개념이 이해 쏘옥) +++
변수 선언과 저장
변수를 사용할려면 변수 선언을 해야 사용가능!
(자료형 타입) (변수명) = (값);
int age = 20;
자료형 타입 int, 변수명 age 값 20 ; 이렇게 작성을 하게 됩니다 ㅎㅎㅎ
! 여기서 변수를 지정할 때, 주의사항!
자바에는 예약어라는 것이 존재하는데 예약어는 말그대로 자바에서 이미 사용하고 있으니 쓰면안돼! 느낌 ㅎ!
다양한 에약어가 존재한답니다 ㅎㅎ 예약어는 변수이름으로 노노!

이렇게 컴파일 에러가 발생한답니다!
boolean, byte, char, short, int, long, float, double, private, protected, public, default 등등등 다양한 예약어가 존재한답니당
변수 값 읽기
변수는 선언만 해서는 읽을 수 없어요!!! 초기화가 되어야 읽을 수 있으며 초기화 되지 않은 변수는 읽을 수 없습니다!!!

이렇게 value 을 선언만 하였기 때문에 +10 연산식을 사용할 수 없어 오류가 발생합니다!!
초기화 필수 기억하자!!!!

변수의 사용 범위
어제 공부했듯이 클래스 블록 {} 안에 여러개의 메소드블록 {} 이 존재하는데
메소드 블록 안에 있는 변수는 생명주기가 변수 선언된 블록 내까지 이기 때문에
외부에서 사용 불가능!
이렇게 메소드 블록 내에 있는 변수를 로컬변수라고 부른다.
이 메소드 실행이 끝나면? 변수는 생명주기 퀙... 사용불가능 ㅠ😵
public static void main(String[] args) {
int value = 10;
if(value == 10){
int value2 = 11;
System.out.println(value2);
}
for (int i = 0; i < 5; i++){
int value2 = 1;
System.out.println(value + 1);
System.out.println(value2 + 1);
}
/* if 문의 value2와 for 문의 value2는 다른 value2이다
value2는 value 와 다르게 {} 내에서 선언하였기에 생명주기는 {} 실행되고 사라진다.
*/
System.out.println(value);
System.out.println(value2);
// 생명주기는 메소드블록에서 끝났기 때문에 value2 사용 불가능!
}
코드로 이해한다면, if 블록 안에서 value2 를 선언하고 for에서 value2를 선언했으니
마지막줄 System.out.println(value2)는 사용할 수 없는것을 볼 수 있다.
이미 블록을 벗어난 외부에서 사용을 했기 때문에 오류가 난다.
그럼 if 와 for 의 value2 는 같은것일까?
그것도 아니다!
if 에서 value2 를 실행하고 생명주기 다하고 ㅂㅂ 사라지기 대문에 다르다고 볼 수 있다.
value는 if와 for 블록이아닌 밖에서 선언했기 때문에 사용이 가능하다!
클래스 or 변수 네이밍 규칙
변수 네이밍 규칙을 지켜야한다!
1. 숫자로 시작하면 안된다.
2. 예약어 사용 금지!
3. 대소문자는 구분되며 길이에는 제한이 없다 ( 하지만, 너무 길어져 가독성이 떨어져 다른 사람들이 보기 불편하겠죵? )
4. 특수문자는 _ 언더바 $달러만 사용가능!
이 네이밍 규칙의 경우 자바 컴파일러가 규정하는 규칙이라 지켜야하는 규칙이지만
컨벤션 / 권장사항 규칙도 있다. 이건 실무에서 주로 이렇게 사용하기 때문에 지켜서 개발하자!
1. 클래스나 변수명은 영문으로 작성
2. 클래스명의 첫글자는 대문자!
3. 여러 단어 합쳐진 변수명은 단어의 시작이 대문자로! ex) saveMembers, lastIndexOf
4.상수의 이름은 대문자가 권장사항 / 단어 사이의 구분자는 언더바(_) ex) MIN_NUMBER
이렇게 다양한 규칙이 존재합니당!
ㅎㅎ 꼭 기억해서 규칙을 지켜 사용하자!!!!

변수의 타입에는 기본타입인 primitive type 과 Reference type 이 졵재한다.
primitive type
- 정수 타입, 실수 타입, 논리 타입이 존재한다.
정수타입 : 저장할 수 있는 값의 범위가 각각 다른데 메모리 사용 크기 순서는
byte (1byte) < char (2byte) < short (2byte) < int (4byte) < long (8byte) 이렇게!!!
외워두는게 좋을 거 같다! ㅎㅎㅎ
byte (1byte) - 최소값 -128부터 최대값 127을 표현할 수 있는 자료형!
그럼 여기서 127을 넘어가면?
파일 오류 발생!!!!
+ 되게 작네 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅎㅎㅎ)

char (2byte) - 하나의 문자를 저장하는데 사용하는 타입
문자열을 선언하는 String타입과는 달리 char 타입은 작은 따옴표(’)를 사용한다!
public static void main(String[] args) {
char c1 = 'A';
char c2 = 65;
char c3 = '\u0041';
}
이렇게 A 에 ''를 사용한다! 'A'
이 코드를 보면 알 수 있듯이 문자, 10진수, 16진수로 저장 할 수 있다!
int (4byte) - 정수 연산을 하기 위한 기본 타입! 가장 많이 사용하는 정수형 타입으로 20억 넘어가는 범위 숫자일 시,
long 타입 사용
public class IntVariableExample {
public static void main(String[] args) {
int result = 10 + 20;
System.out.println(result);
}
}
10 + 20 의 연산 결과 30이 출력된다!
long (8byte) - -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 까지 값 저장....
( + 저게 몇이야.....경..???? ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ )

Long 초기화 할 때는 값뒤에 L을 붙여야 한다!! 붙이지 않으면 에러나요~~~
실수 타입
소수점 있는 숫자를 실수 라고 하는데 이 소수점 데이터를 저장하기 위한 타입!
float (4byte) < double (8byte)
double var1 = 3.14;
float var2 = 3.14F;
주로 double을 사용한다
float을 사용하려면 값 뒤에 F를 붙여서 사용한다 이것도 붙이지 않으면 에러와 Hi~~
논리 타입
boolean값은 1byte(8bit)로 표현되는 논리값(true/false)을 저장할 수 있는 데이터 타입
public static void main(String[] args) {
boolean stop = true;
if (stop) {
System.out.println("중지합니다!");
} else {
System.out.println("시작합니다!");
}
}
true/ false을 저장할 수 있는 boolean 까지!!! ㅎㅎㅎ
다양한 타입이 존재합니당!!!
타입 변환
이런 데이터 타입들을 다른 데이터 타입으로 변환할 수 있는데엽!!!
두가지 종류가 있습니다. 하나는 자동으로 타입변환이 되는것이고 2번째로는 강제적으로 타입을 변환해주는 방법이 존재합니다!!!
public static void main(String[] args) {
byte byteValue = 10;
int intValue = byteValue; // 타입 변환 (byte -> int)
System.out.println(intValue);
char charValue = '가';
intValue = charValue;
System.out.println("'가'의 유니코드= " + intValue);
intValue = 500;
long longValue = intValue; // 타입 변환 (int -> long)
System.out.println(longValue);
intValue = 200;
double doubleValue = intValue; // 타입 변환 (int -> double)
System.out.println(doubleValue);
}
이 코드를 보면,
byteValue 타입을 int로 타입변환하고
intValue 타입을 long타입변환하고,
intValue 타입을 double타입변환,
이렇게, 작은 크기의 타입은 큰 크기의 타입으로 자동으로 타입 변환이 가능하답니당!!
그럼 여기서 만약 작은 크기에서 큰 크기로 타입변환이 아니라
큰 크기에서 작은 크기라면?
불가능 합니다!!
예시로는 큰 그릇의 물을 작은 그릇안에 모두 넣을 수 없는 것과 일치 동일하다는데
이해가시죵?ㅎㅎㅎㅎ
이렇듯 불가능하지만!!!!
큰그릇에서 하나의 조각만 쪼개서 강제로 타입을 변환해줄수 있어요!!!
쪼개는 행위를 캐스팅 이라고 표현!
강제 타입 변환
long longValue = 300;
int intValue = (int) longValue; // intValue는 300이 그대로 저장
double doubleValue = 3.14;
int intValue = (int) doubleValue; // intValue는 정수 부분인 3만 저장
이렇게 (int) doubleValue 입력하여 강제로 타입을 변환해주는건데엽 ㅎㅎㅎ
여기서 주의 사항은 입력받은 값을 변환할 때 값의 손실이 발생하면 안되므로 변환 전 값이 안전하게 보존될 수 있는지 검사 필수!!!
기본 타입 변수 VS 참조 변수 차이점

기본 타입의 변수는 실제 값을 변수에 저장하지만!
참조변수의 경우 객체안에 있는 값의 주소를 변수가 가르킨다!
즉, 주소(번지)를 가르키면서 객체를 참조한다!
차이점 꼭 알아두장!!!!😆
또한,
초기화 시 new를 사용하여 초기화하는것은 참조 자료형, new없이 바로 초기화 가능한 것이 기본 자료형!
오토박싱 & 언박싱

오토박싱 - 기본타입의 데이터를 Wrapper 클래스 객체로 변환한것!
public class AutoBoxingExample {
public static void main(String args[]) {
ArrayList<Integer> arrayList = new ArrayList<>();
/* 오토 박싱 */
arrayList.add(10);
arrayList.add(20);
arrayList.add(30);
System.out.println("ArrayList: " + arrayList);
}
이 코드를 보면 Integer 타입을 선언하였지만 add메소드엔 기본 타입값을 전달했다!
ArrayList: [10, 20, 30]
이렇듯 오토박싱은 기본타입의 값을 Wrapper 클래스의 객체로 변환되어 Integer 타입의 ArrayList에 할당된다!
그럼 반대로 언박싱은?
당연히!@!!!
Wrapper클래스를 기본형 타입으로 변환하는 것이겠졍? ㅎㅎㅎㅎ
이렇듯 오늘도 자바에 대해 공부하였는데용 ㅎㅎ
아 원래 여기서 문자열 string에대해 조금 배우긴 했는데 ㅎㅎ
수업 진도가 갑자기 점핑 된거라 나중에 한번 더하시지 않을까요? 아닌가? 그냥 먼저 미리 배운건가?
ㅎㅎ 나중에 문자열은 올려야징 ㅎㅎㅎㅎ
일단 오늘 퀴즈 과제를 내주셔서 하러 가야한답니당 >_<
이렇게 오늘도 간단하게 복습해보았고!
주말 푹쉬고 다음주 월요일도 공부 파이팅!!!!

( + 히히 주말이당 )
'[4기] 백엔드 개발자 부트캠프 "오르미" ~ing > [4기] 백엔드 개발자 부트캠프 오르미 수업 복습' 카테고리의 다른 글
| [4기] 29일차 Java ( 반복문(for, while 문),class란? ) (4) | 2024.01.30 |
|---|---|
| [4기] 28일차 Java ( 연산자, 조건문과 반복문(if,switch/case,for 문) ) (2) | 2024.01.29 |
| [4기] 24일차 Java ( Java란? , 객체지향? ) (4) | 2024.01.25 |
| [4기] 22일차 FE프로젝트 -호두 홈페이지 만들기5 -최종! (2) | 2024.01.23 |
| [4기] 21일차 FE프로젝트 -호두 홈페이지 만들기4 (0) | 2024.01.22 |