"자료형(data type)이란, 값(data)의 종류(type)에 따라 값이 저장될 공간의 크기와 저장형식을 정의한 것이다."
- 기본형(Primitive type)
-논리형(boolean), 문자형(char), 정수형(byte, short, int, long), 실수형(float, double)으로 계산을 위한 실제 값을 저장한다. (총 8개)- 참조형(reference type)
-객체의 주소를 저장한다. 8개의 기본형을 제외한 나머지 타입.
기본형에는 8개의 타입(자료형)이 있으며, 크게 논리형, 문자형, 정수형, 실수형으로 구분된다.
정수형은 가장 많이 사용되기에 타입이 4가지나 제공된다.
각 타입별로 범위가 다르기에 범위에 맞는 값을 사용하면 된다.
상수란, 변수와 마찬가지로 '값을 저장할 수 있는 공간'이지만, 변수와 달리 한 번 값을 저장하면 다른 값으로 변경할 수 없다.
- 상수를 선언하는 방법은 변수와 동일하며, 단지 변수의 타입 앞에 키워드 'final'을 붙여주기만 하면 된다.
- 상수는 반드시 선언과 동시에 초기화해야 하며, 그 후 부터는 상수의 값을 변경하는 것이 허용 되지 않는다.
✨ 예제 1
final int MAX_SPEED; //에러. 상수는 선언과 동시에 초기화 해야함
final in MAX_VALUE = 100; //OK
MAX_VALUE = 200; //에러. 상수의 값은 변경할 수 없음
원래 12, 123, 3.14, 'A'와 같은 값들이 '상수'인데, 프로그래밍에서는 상수를 위와 같이 '값을 한 번 저장하면 변경할 수 없는 저장공간'으로 정의했기 때문에 이와 구분하기 위해 상수를 다른 이름으로 불러야 했다. 그것이 바로 '리터럴'이다.
- 변수(variable): 하나의 값을 저장하기 위한 공간
- 상수(constant): 값을 한번만 저장할 수 있는 공간
- 리터럴(literal): 그 자체로 값을 의미하는 것
리터럴의 경우, 실수형에서 float은 접미사 'f'를 붙이고, double은 접미사 'd'를 붙인다.(double은 생략 가능)
'A'와 같이 작은따옴표로 문자 하나를 감싼 것을 '문자 리터럴'이라고 한다. 두 문자 이상은 큰 따옴표로 감싸야 하며 '문자열 리터럴'이라고 한다.
- char 타입의 변수는 단 하나의 문자만 저장할 수 있다. (빈 문자 허용되지 않음)
- 여러 문자(문자열)을 저장하기 위해서는 String 타입을 사용해야 한다. (빈 문자열 허용)
char ch = 'J'; // char ch = 'Java'; 이렇게 할 수 없다. char ch = ''; // 에러. ''안에 반드시 하나의 문자가 필요 char ch = ' '; //ok
- 덧셈 연산자(+)는 피연산자가 모두 숫자일 때는 두 수를 더하지만, 어느 한 쪽이 String이면 나머지 한 쪽을 먼저 String으로 변환한 다음 두 String을 결합한다.
문자열 + any type -> 문자열 + 문자열 -> 문자열 any type + 문자열 -> 문자열 + 문자열 -> 문자열
✨ 예제 2
public class StringEx {
public static void main(String[] args) {
String name = "JA"+"VA";
String str = name + 8.0;
System.out.println(name);
System.out.println(str);
System.out.println(7 + " ");
System.out.println("" + 7 + 7);
}
}
printf()는 '지시자(specifier)'를 통해 변수의 값을 여러 가지 형식으로 변환하여 출력하는 기능을 가지고 있다.
✨ 예제 3
public class PrintfEx1 {
public static void main(String[] args) {
byte b = 1;
short s = 2;
char c = 'A';
int finger = 10;
long big = 100_000_000_000L; // long big = 100000000000L;
long hex = 0xFFFF_FFFF_FFFF_FFFFL;
int octNum = 010; // 8진수 10, 10진수로는 8
int hexNum = 0x10; // 16진수 10, 10진수로는 16
int binNum = 0b10; // 2진수 10, 10진수로는 2
System.out.printf("b=%d%n", b);
System.out.printf("s=%d%n", s);
System.out.printf("c=%c, %d %n", c, (int)c);
System.out.printf("finger=[%5d]%n", finger);
System.out.printf("finger = [%-5d]%n", finger);
System.out.printf("finger=[%05d]%n", finger);
System.out.printf("big=%d%n", big);
System.out.printf("hex=%#x%n", hex);
System.out.printf("octNum=%o, %d%n", octNum, octNum);
System.out.printf("hexNum=%x, %d%n", hexNum, hexNum);
System.out.printf("binNum=%s, %d%n", Integer.toBinaryString(binNum), binNum);
}
}
%전체자리.소수점아래자리f
System.out.printf("d=%14.10f%n", d); // 전체 14자리 중 소수점 아래 10자리 System.out.printf("[%.8s]%n", d); // 왼쪽에서 8글자만 출력 System.out.printf("[%-20s]%n", d); // 최소 20글자 출력공간 확보.(좌측정렬, 빈자리는 공백으로 출력)
화면에서 입력받는 Scanner
import java.util.*; // Scanner 클래스의 객체를 생성 Scanner scanner = new Scanner(system.in); // Scanner 객체를 생성 String input = Scanner.nextLine(); // 입력받은 내용을 input에 저장 int num = Integer.parseInt(input); // 입력받은 내용을 int 타입의 값으로 변환
nextLine()이라는 메서드를 호출하면, 입력대기 상태에 있다가 입력을 마치고 엔터키를 누르면 입력한 내용이 문자열로 반환된다. 정수를 입력받으려면 nextInt()를 사용한다.
✨ 예제 4
import java.util.*;
public class ScannerEx {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.printf("두자리 정수를 하나 입력해주세요. :");
String input = scanner.nextLine();
int num = Integer.parseInt(input); // 입력받은 문자열을 숫자로 변환
System.out.println("입력내용: "+input);
System.out.printf("num=%d%n", num);
}
}
자바의 정석(저자: 남궁성)
이번 파트는 굉장히 정성들여 정리했다. 기본 내용이지만 파이썬과 구현 부분이 달라 익히려고 애썼다.
자바는 변수에 타입을 계속 설정해줘야 하기 때문에 꼼꼼히 알아야할 필요가 있어보인다.
다음 포스팅은 순서상 진법 파트를 나가야 하지만, 파이썬에서 진법 파트를 공통적으로 공부했으므로 다음 과정인 기본형과 진법을 같이 정리해보겠다.