강좌 Course 1. Part 2. ch3~6 요약
데이터를 저장한 메모리 공간의 이름으로,
- 맨 앞에 숫자가 올 수 없다.
- 대소문자를 구분하며, 길이 제한이 없다.
- 특수문자는 $과 _만 허용된다.
- 키워드(예약어)는 변수이름으로 사용할 수 없다. (ex. while, break)
변수를 선언할 때는 자료형과 변수명을 함께 써줘야 한다. (python은 알아서 해줬는데 java는 그런 거 없다.)
데이터의 종류와 크기를 나타낸다. 기본적으로 Java에서 제공해주는 기본자료형이 있고, 사용자가 직접 class를 사용하여 정의할 수 있는 사용자정의자료형이 있다.
// 기본자료형 Primitive Data Type
int num = 10;
// 사용자정의형 User Defined Data Type + API (import 필요)
import java.lang.String;
String str = "plastic duck";
기본으로 제공되는 자료형에는 8가지가 있다. boolean은 논리형으로 true, false 값만 가지고 있다.
char는 문자 하나만을 담을 수 있으며 작은 따옴표('')를 쓴다. 큰 따옴표("")는 문자열인 String에 쓰고, 반대로 사용하면 오류가 난다.
정수형 자료형은 int, 실수형은 double이 디폴트로 정해져있다. 1바이트가 8비트이므로, 4바이트는 2의 32제곱, 8바이트는 2의 64제곱만큼의 수를 나타낼 수 있다. 하지만 이중 맨 앞의 비트는 양수인지 음수인지를 나타내기 때문에 int는 실제로는 -(2의 31제곱)에서 2의 31제곱까지의 수를 나타낼 수 있으며, 이는 float, long, double도 마찬가지이다.
long 자료형으로 저장하려면 숫자 뒤에 소문자 혹은 대문자 L, float는 F를 붙여주어야 한다.
8진법, 16진법은 조금 생소하였으나, 2진수를 두고 생각하니 꽤 이해하기 어렵지 않았다. 2의 3제곱이 8이니 2진수에서 3자리씩 끊어서 0~7까지의 수로 나타낸 것이 8진수고, 2의 4제곱이 16이니 2진수에서 4자리씩 끊어 0~9, A~F로 나타낸 것이 16진수이다.
2진수를 입력할 때는 앞에 0b를, 8진수는 0을, 16진수는 0x를 붙여주어야 한다.
앞서 표에서 봤듯이 같은 종류의 자료형에도 여러 타입이 있는데, 한 값의 타입을 다른 타입으로 변환하는 것을 형 변환이라고 한다. 용량이 작은 타입에서 더 용량이 큰 타입으로 변환할 때는 자동 형변환,반대로 용량이 큰 타입에서 작은 타입으로 변환할 때는 강제 형변환이라고 한다. 강제 형변환을 할 때는 명시적으로 변환할 데이터타입을 선언해주어야 하며, 이 경우 데이터 손실이 발생할 수 있다.
// int -> char
int a = 65;
System.out.println((char)a); // A 출력됨
book이라는 클래스를 생성해두었다는 전제 하에, book 객체를 만들려면
Book b;
new Book();
b = new Book();
b라는 변수를 선언하고, Book 객체를 생성하고, 객체를 변수에 저장하는 과정을 거친다. 첫 줄에서 b는 가리키는 것이 없는 객체변수이다. 두번째 줄에서는 생성자 메서드를 사용하여 메모리에 실체(=인스턴스)를 생성하였으며, 셋째 줄에서는 객체변수에 실체를 가진 인스턴스를 할당하였기 때문에 이 때 b는 인스턴스 변수이다. (혹은 인스턴스를 가리키기 때문에 참조형 변수라고도 한다.)
근데 그냥 줄여서 한 줄로 쓸 수 있다.
Book b = new Book();
이 때 Book 안의 프로퍼티들은 도트연산자를 사용하여 얻어올 수 있다.
배열은 동일한 종류의 데이터를 여러 개 저장할 수 있는 구조 혹은 객체로,
int[] a;
new int[5];
a = new int[5];
사용자정의 자료형과 비슷하게 배열객체 변수 선언, 배열 객체 생성, 변수와 객체 연결의 단계를 거칠 수 있다.
이 역시 한줄로 줄일 수 있다.
int[] a = new int[5];
배열 초기화를 하는 방법에는 여러가지가 있는데, 위처럼 배열 내 자료 개수를 선언한 후 입력할 수도 있고, 초기화 동시에 자료를 입력할 수도 있다.
// 생성자 메서드를 사용하는 동시에 초기화할 때는 개수를 적지 않는다.
int[] b;
a = new int[]{1,2,3,4,5};
// 생성자 메서드를 사용하지 않고서도 초기화할 수 있다.
int[] c = {6,7,8,9,10};
사용자정의자료형으로 배열을 만들더라도, 배열 내에 개별적으로 생성자를 사용하여 어떤 객체가 저장되는지 선언해주어야 한다.
Book[] bookshelf = new Book[3];
bookshelf[0].title = "Harry Potter"; (X)
Book[] bookshelf = new Book[3];
bookshelf[0] = new Book();
bookshelf[0].title = "Harry Potter"; (O)
행렬처럼 row-major로 행이 먼저 온다.
// 3행 4열의 정수 배열
int[][] twoDimension = new int[3][4];