*TIL을 한 페이지에 정리하면 너무 길어서 시리즈로 출간합니다!
목적
단점
장점
변수 : 어떠한 데이터를 저장하기 위한 메모리 공간의 이름이다. 지속적으로 변수의 값을 변경할 수 있다.
맨 처음에 내가 원하는 데이터를 변수로 지정해 놓으면 그 데이터를 매번 기억하지 않고도 그 변수의 이름을 떠올려서 쓸 수 있다.
"=" 이라는건 프로그래밍 언어에서 할당이라고 표현한다.
int number = 5;
System.out.println(number);
number가 아니라 5가 출력된다.
앞에서 내가 선언했던 5를 number라는 변수에 저장을하고 내가 맨 처음에 저장했던 숫자가 5였는지, 6이었는지 매번 기억할 필요없이 number라는 변수를 통해 5를 대신해서 불러올 수 있다.
String sparta = "Hello Sparta";
System.out.println(sparta);
Hello Sparta가 출력된다.
final int finalNumber = 1;
System.out.println(finalNumber);
하면 1이 나오는데 이때,
final int finalNumber = 1;
System.out.println(finalNumber);
finalNumber = 2;
System.out.printlb(finalNumber);
하면 2가 안나오고 'finalNumber라는 final variable에는 값을 할당할 수 없어요' 라는 error가 뜬다.
(error: cannot assign a value to final variable finalNumber.)
그러면 상수는 다른 값으로 재할당이 안된다고 하면, 일반 변수는 재할당이 가능하다는 말이다.
그래서 앞에 final이 안 붙었다는 건 변수 라는 말이고, 변수 는 값의 재할당이 가능하다.
크게 두 종류가 있다. 기본/참조
1. 기본 자료형(Primitive Type)
short s = 1;
System.out.println(a);
int a = 3; // 정수형 변수 선언
System.out.println(a);
long b = 1234567890L; // Long 정수형 변수 선언
System.out.println(b);
float c = 5.5F; // float 실수형 변수 선언
// F는 float라는 타입을 가리키는 거지 실제 값으로 인식하진 않는다. print해도 안찍힘.
System.out.println(c);
double d = 9.12345678901234567890d; // double 실수형 변수 선언
System.out.println(d);
// 다음처럼 각 자료형의 MAX, MIN 값을 가져올 수 있습니다. 어디서부터 어디까지인지 범위를 알고 싶을 때,
System.out.println(Short.MAX_VALUE);
System.out.println(Short.MIN_VALUE);
System.out.println(Integer.MAX_VALUE);
System.out.println(Integer.MIN_VALUE);
System.out.println(Long.MAX_VALUE);
System.out.println(Long.MIN_VALUE);
System.out.println(Float.MAX_VALUE);
System.out.println(Float.MIN_VALUE);
System.out.println(Double.MAX_VALUE);
System.out.println(Double.MIN_VALUE);
프린트를 했을 때
1
3
1234567890
5.5
9.12345678901234567890
char c = 'A'; // 문자형 변수 선언, ' 작은 따옴표로 감싸기.
System.out.println(c);
// char type은 default 값이 없습니다.
boolean fact = true; // 논리형 변수는 true, false의 값을 가진다.
System.out.println(fact);
// boolean type은 default 값이 없습니다.
byte data = 'd';
System.out.println(data); // 알파벳 d는 ASCII code 에서 십진법으로 100이기 때문에 100이라는 글자가 출력됩니다.
하면,
100
d가 아니라 100이 출력되는데, 사실 컴퓨터에 표현되는 모든 데이터는 사실상 byte의 연속이다. 알파벳 d는 사실상 아스키코드에서 십진법으로 100이기 때문에 100이 출력되었다.
아스키코드는 사람이 인식하는 문자를 실제로 컴퓨터는 어떻게 인식하는지 정의해놓은 코드이다.
String sparta = "Hello sparta";
System.out.println(sparta);
int[] intArray = new int[] {1,2,3,4,5}; // int 배열을 선언과 동시에 초기화
System.out.println(Arrays.toString(intArray));
여기서 mac - cmd를 누르고 커서를 String으로 가져가면 커서가 손바닥 모양으로 바뀌는데, 이때 String 을 클릭하면 String이 선언된 구현체로 넘어간다.
public final class String
.
.
.
JAVA 언어를 개발한 사람들이 미리 만들어 놓은 걸로, class로 정의된 타입을 쓸 때는 다 참조 자료형이다. 라고 이해하면 된다.
int[ ] 에서 [ ]는 배열이라는 뜻인데, int[ ] 이 정확히 말해서 int는 아니다.int를 여러개 담을 수 있는걸 int배열이라고 하고, 기본형이 아니기 때문에 참조자료형에 들어간다.
int[] intArray = new int[] {1, 2, 3, 4, 5};
System.out.pringln(Arrays.toString(intArray));
int 배열로 만들면서 1, 2, 3, 4, 5로 초기화한 코드이다.
출력하면
[1, 2, 3, 4, 5]
이것처럼, 배열로 출력이 된다.
배열에서 몇번째를 의미하는 걸 index라고 하는데 index n번이라고 하면 n번째 데이터라고 생각하면 된다. 컴퓨터에서의 첫번째 인덱스는 0번부터 시작한다.
선언방법 1: 아무것도 할당하지 않는 방법
int[] intEmptyArray = new int[5]; //아직 아무런 값을 할당하지 않은 다섯 개 짜리의 int[]을 선언.
System.out.println(Arrays.toString(intEmptyArray)); //실제로 Array는 Arrays.toString으로 감싸줘야 우리가 아는 [, , ] 형식으로 이쁘게 나온다.
선언방법 2: 선언과 동시에 초기화 하는 방법
int[] intArray = new int[] {1, 2, 3, 4, 5}; //사이즈를 입력해 주지 않고 1 ~ 5를 적어주면 자동으로 5개 짜리 배열이 된다.
System.out.println(Arrays.toString(intArray));
String[] stringEmptyArray = new String[5];
System.out.println(Arrays.toString(stringEmptyArray));
String[] season = {"봄", "여름", "가을", "겨울"};
System.out.println(Arrays.toString(seoson));
실행하면,
[0, 0, 0, 0, 0] -아무것도 할당 안했을 때
[1, 2, 3, 4, 5] -설정 동시에 초기화
[null, null, null, null, null] -아무것도 할당 안했을 때
[봄, 여름, 가을, 겨울] -설정 동시에 초기화
0을 할당한 적 없는데 왜 0이 나왔을까?
Array 같은 경우는 선언만 하고 초기화 하지 않으면 해당하는 타입의 초기화되는 값을 디폴트로 가지게 된다.
int같이 정수는 기본값이 0이어서 0을 할당해주지않아도 0이 다섯개인 배열이 된다.
String 처럼 Reference type같은 경우는 JAVA에서 아무것도 없다 라는걸 표현하는게 null이므로, 프린트하는 함수에서 null이라고 표현하고 null이라는 글자가 아니라 '아무것도 없다.'라는 뜻이다.
Tip
System.out.println(season[season.length -1]);
배열은 인덱스 번호를 0부터 세니까 마지막 값은 lengh에서 1을 빼줘야 그게 실제로 마지막 값이 나오게 된다.
겨울은 5번째 인덱스지만 컴퓨터에선 4번째에 해당하므로, length(5)에서 -1을 해줘야 4가 나와서 마지막 값이된다. length 자체는 그 배열의 값의 갯수니까.
문자형 변수 S, 정수형 변수 10을 선언하고 출력해보자
char quiz1 = 'S';
int quiz2 = 10;
System.out.println(quiz1);
System.out.println(quiz2);
를 하면
S
10
이 출력되는데,
이 때 같은 줄에 출력하고 싶다면 어떻게 해야할까?
char quiz1 = 'S';
int quiz2 = 10;
System.out.println(quiz1 + quiz2);
이렇게 하면 93이 출력되는데, 이건 S가 아스키코드 상으로 83이어서 83+10인 93이 출력되게 되는 것이다.
따라서,
char quiz1 = 'S';
int quiz2 = 10;
System.out.println(quiz1 + "" + quiz2);
이렇게 중간에 ""을 해주고 출력하면 된다.
S10
행을 분리하고 싶다면
char quiz1 = 'S';
int quiz2 = 10;
System.out.println(quiz1 + "\n" + quiz2);
""안에 (백슬래쉬)n을 넣어주면
S
10
으로 출력된다.
\n 은 컴퓨터한테 개행(행을 바꾸는 것)을 해줘! 라고 말해주는 것이다.
위 두가지 방법으로 해도 똑같이 30이 나오는데, quiz1처럼 선언과 동시에 할당하면 더 편하다!