[Java] Ch02_2. 변수의 타입

토끼는 개발개발·2022년 1월 5일
0

Java

목록 보기
9/33
post-thumbnail

📌 Chapter02. 변수(Variable)


✏️ 2. 변수의 타입

"자료형(data type)이란, 값(data)의 종류(type)에 따라 값이 저장될 공간의 크기와 저장형식을 정의한 것이다."


▶ 기본형과 참조형

  • 기본형(Primitive type)
    -논리형(boolean), 문자형(char), 정수형(byte, short, int, long), 실수형(float, double)으로 계산을 위한 실제 값을 저장한다. (총 8개)
  • 참조형(reference type)
    -객체의 주소를 저장한다. 8개의 기본형을 제외한 나머지 타입.


2.1 기본형(Primitive type)

▶ 타입종류

기본형에는 8개의 타입(자료형)이 있으며, 크게 논리형, 문자형, 정수형, 실수형으로 구분된다.

정수형은 가장 많이 사용되기에 타입이 4가지나 제공된다.
각 타입별로 범위가 다르기에 범위에 맞는 값을 사용하면 된다.


▶ 타입범위

  • boolean은 true와 false 두 값만 표현하면 되기에 1바이트면 충분하다.
  • char는 자바에서 유니코드(2 byte문자 체계)를 사용하기에 2byte
  • byte는 크기가 1byte이므로 byte.
  • int(4 byte)를 기준으로 짧게는 (2 byte) 길게는 (8 byte)를 취사선택한다.
  • float은 실수값을 부동소수점(floating-point)방식으로 저장하기 때문에 float
  • double은 float보다 두 배의 크기(8byte)를 갖기 때문에 double

▶ 실수형의 범위와 정밀도

  • float는 정밀도가 7자리 밖에 되지 않으므로 높은 정밀도가 필요한 경우에는 double을 선택해야 한다.


2.2 상수와 리터럴(constant & literal)

▶ 상수(constant)

상수란, 변수와 마찬가지로 '값을 저장할 수 있는 공간'이지만, 변수와 달리 한 번 값을 저장하면 다른 값으로 변경할 수 없다.

  • 상수를 선언하는 방법은 변수와 동일하며, 단지 변수의 타입 앞에 키워드 'final'을 붙여주기만 하면 된다.
  • 상수는 반드시 선언과 동시에 초기화해야 하며, 그 후 부터는 상수의 값을 변경하는 것이 허용 되지 않는다.

예제 1

final int MAX_SPEED; //에러. 상수는 선언과 동시에 초기화 해야함
final in MAX_VALUE = 100; //OK
MAX_VALUE = 200; //에러. 상수의 값은 변경할 수 없음

▶ 리터럴(literal)

원래 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);

	}

}


2.3 형식화 된 출력 - printf()

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글자 출력공간 확보.(좌측정렬, 빈자리는 공백으로 출력)


2.4 화면에서 입력받기 - Scanner

화면에서 입력받는 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);
	}

}


참고

자바의 정석(저자: 남궁성)


오늘의 한 줄

이번 파트는 굉장히 정성들여 정리했다. 기본 내용이지만 파이썬과 구현 부분이 달라 익히려고 애썼다.
자바는 변수에 타입을 계속 설정해줘야 하기 때문에 꼼꼼히 알아야할 필요가 있어보인다.

다음 포스팅은 순서상 진법 파트를 나가야 하지만, 파이썬에서 진법 파트를 공통적으로 공부했으므로 다음 과정인 기본형과 진법을 같이 정리해보겠다.

profile
하이 이것은 나의 깨지고 부서지는 기록들입니다

0개의 댓글