[자바(Java)] 데이터 타입 (Data Type)

방용환·2023년 3월 30일
0
post-thumbnail

1. 원시형 (Primitive Type)

  • 값을 표현하기 위한 자료형이다.
  • 실제 값을 저장한다.
  • 정수타입, 실수타입, 논리타입으로 나뉜다.

1. 정수타입 - 소수점이 없는 숫자값

(각 타입의 메모리 사용 크기)

  • byte : 1Byte (-128 ~ 127)
  • char : 2Byte (0 ~ 32,767, 유니코드)
  • short : 2Byte (-32,768 ~ 32,767)
  • int : 4Byte (-2,147,483,648 ~ 2,147,483,647)
  • long : 8Byte (-2^63 ~ 2^63-1)
// println() 메소드는 정수값을 무조건 10진수로 변환하여 출력한다.

System.out.println("정수값(10진수 100) = " + 100);
// 정수값(10진수 100) = 100
System.out.println("정수값(2진수 100) = " + 0b00);
// 정수값(2진수 100) = 0
System.out.println("정수값(8진수 100) = " + 0100);
// 정수값(8진수 100) = 64
System.out.println("정수값(16진수 100) = " + 0x100);
// 정수값(16진수 100) = 256
System.out.println("정수값(10진수 100) = " + 100L);
// 정수값(10진수 100) = 100
System.out.println("정수값 = " + 2147483648L);
// 정수값 = 2147483648
// 4Byte로 표현 불가능한 정수값은 [L]을 붙여 8Byte의 LongType의 정수값으로 작성하여 사용한다.

2. 회피문자 (Escape Character)

  • '\n' : Enter
  • '\t' : Tab
  • '\'' : ' 문자
  • '\"' : " 문자
  • '\' : \ 문자
  • '\0' :

3. 실수타입 - 소수점이 있는 숫자값

(각 타입의 메모리 사용 크기)

  • float : 4Byte
  • double : 8Byte
// println() 메소드는 실수값이 아주 작거나 큰 경우 지수형태로 변환하여 출력한다.

System.out.println("실수값(8Byte) = " + 0.000000000123);
// 실수값(8Byte) = 1.23E-10

System.out.println("실수값(8Byte) = " + 1.23E+10);
// 실수값(8Byte) = 1.23E10

4. 실수 정밀도

float b1 = 1.23456789F;
// 가수부를 표현하기 위한 크기(정밀도) : 7자리
double b2 = 1.23456789;
// 가수부를 표현하기 위한 크기(정밀도) : 15자리

System.out.println("b1 = " + b1);
// b1 = 1.2345679
System.out.println("b2 = " + b2);
// b2 = 1.23456789

b1은 9가 반올림 되어 올라간 모습을 확인할 수 있다.

5. 논리타입

(메모리 사용 크기)

  • boolean : 1Byte (true, false)
System.out.println("논리값(1Byte) = " + false);
// 논리값(1Byte) = false
System.out.println("논리값(1Byte) = " + true);
// 논리값(1Byte) = true

System.out.println("논리값(1Byte) = " + (20 < 10));
// 논리값(1Byte) = false
System.out.println("논리값(1Byte) = " + (20 > 10));
// 논리값(1Byte) = true

2. 참조형 (Reference Type)

  • 특정 대상을 표현하기 위한 자료형이다.
  • 객체의 주소를 저장한다. (값이 저장된 공간의 주소값을 저장한다.)
  • 각 타입들은 4Byte의 메모리 크기를 가진다. (객체의 주소값을 저장하기 때문에)
  • 그 주소를 참조해서 값을 가져온다.
  • 메모리의 힙(heap)에 실제 값을 저장하고, 그 참조값(주소값)을 갖는 변수는 스택에 저장한다.
  • 참조형 변수는 null로 초기화 시킬 수 있다.

1. 배열 (Array)

  • 배열 (Array) : 같은 자료형의 값을 여러개 저장하기 위한 메모리를 할당받기 위해 사용하는 자료형
  • 참조변수.length : 배열 요소의 개수를 제공함
  • 1차원 배열 : 다수의 값을 저장하기 위한 자료형
public static void main(String[] args) {
	자료형[] 참조변수 = new 자료형[개수];
    자료형 참조변수[] = new 자료형[개수];
    자료형[] 참조변수 = new 자료형[] {초기값, 초기값, ...};
    
    System.out.println(참조변수[i]);
    // 참조변수의 i+1번째 값이 출력됨
}

=> new 자료형[개수] : 자료형의 값을 개수만큼 저장 가능한 메모리 할당
=> 자료형[] 참조변수 : 1차원 배열의 메모리 주소를 저장하기 위한 참조변수 생성
=> 1차원 배열에서 값을 저장하기 위한 메모리 공간을 요소(Element)로 표현
=> 배열의 요소는 첨자(index)를 이용하여 구분
=> 생성된 배열의 요소에는 기본값이 자동 저장
=> for 구문을 사용하여 배열 요소에 대한 일괄처리

  • 향상된 for
public static void main(String[] args) {
	for (자료형 변수명 : 참조변수) {
    	명령;
        명령;}
}

=> 참조변수의 배열에 요소값을 커서(cursor)를 사용하여 차례대로 하나씩 얻어와 변수에 저장하여 일괄처리
=> 배열의 모든 요소값을 제공받은 후 반복문 종료
=> 계산, 출력에 대한 일괄 처리에 사용

  • 다차원 배열 : 다수의 배열을 저장하기 위한 자료형
public static void main(String[] args) {
	자료형[][] 참조변수 = new 자료형[행 개수][열 개수];
    자료형 참조변수[][] = new 자료형[행 개수][열 개수];
    
    System.out.println(참조변수[i][j]);
    // 참조변수의 (i+1)행 (j+1)열의 값이 출력됨
}
public static void main(String[] args) {
	int[][] value = new int[3][];
    
    System.out.println(value[0]);
    System.out.println(value[1]);
    System.out.println(value[2]);
	// null
    // null
    // null
    
    value[0] = new int[3];
    value[1] = new int[2];
    value[2] = new int[4];
    // 1차원 배열의 요소의 개수를 다르게 생성하여 저장 가능
}
  • 배열 예제 (로또 번호)
public static void main(String[] args) {
		// 6개의 정수 난수값을 저장하기 위한 배열 생성
		int[] lotto = new int[6];

		// 1~45 범위의 정수난수를 6개 제공받아 배열 요소에 차례대로 저장
		for (int i = 0; i < lotto.length; i++) {// 새로운 난수를 저장할 배열 요소의 표현한 첨자의 반복문
			// 요소에 저장된 새로운 난수값을 기존 요소들의 난수값과 모두 비교하여 같은 값이
			// 있는 경우 반복문이 이용하여 새로운 난수값을 다시 제공받아 저장
			// => 새로운 난수값이 기존의 모든 난수값과 다른 경우 반복문 종료
			while (true) {
				// 1~45 범위의 정수난수를 제공받아 배열 요소에 저장
				lotto[i] = (int) (Math.random() * 45) + 1;

				// 중복상태를 저장하기 위한 변수 - false : 미중복, true : 중복
				boolean result = false;

				for (int j = 0; j < i; j++) {// 기존 난수값이 저장된 요소의 첨자를 표현하기 위한 반복문
					if (lotto[i] == lotto[j]) {
						result = true;
						break;
					}
				}
				// 새로운 난수값이 기준 난수값과 중복되지 않는 경우 while 구문 종료
				if (!result)
					break;
			}
		}
		// 배열의 모든 요소값을 서로 비교하여 오름차순 정렬되도록 배열 요소값을 바꾸어 저장
		// => 선택 정렬 알고리즘(Selection Sort Algorithm)을 사용하여 오름차순 정렬
		for (int i = 0; i < lotto.length - 1; i++) {// 비교 요소의 첨자를 표현하는 반복문 : 0 ~ 끝-1
			for (int j = i + 1; j < lotto.length; j++) {// 피비교 요소의 첨자를 표현하는 반복문 : 비교+1 ~ 끝
				// lotto[i] : 비교 요소, lotto[j] : 피비교 요소
				if (lotto[i] > lotto[j]) {
					// 요소에 저장된 값을 서로 바꾸어 저장 - Swap
					int temp = lotto[i];
					lotto[i] = lotto[j];
					lotto[j] = temp;
				}
			}
		}
		// 배열의 모든 요소값 출력
		System.out.print("행운의 숫자 >> ");
		for (int number : lotto) {
			System.out.print(number + " ");
		}
		System.out.println();
	}
  • 배열 예제 (나이 평균)
public static void main(String[] args) {
		
		// 사람들의 나이를 저장한 배열 생성하여 참조변수에 저장
		int[] age = { 27, 16, 22, 36, 57, 60, 43, 23, 14, 29, 44, 52, 59, 51, 39, 33, 11 };

		// 배열에 저장된 모든 사람들의 나이 평균을 계산하여 출력하세요.

		int sum = 0;
		int average = 0;

		for (int i = 0; i < age.length; i++) {
			sum += age[i];
		}
		average = sum / age.length;

		System.out.println("모든 사람들의 나이 평균은 " + average + "세이다.");
	}
}
  • 배열 예제 (연령대별 인원수)
public static void main(String[] args) {
		// 배열에 저장된 사람들의 나이를 연령별로 구분하여 인원수를 계산하여 출력하세요.
		// ex) 10대 = 3명
		// 20대 = 4명
		// ...
		// 60대 = 1명

		// count[0] - 60대, count[1] - 50대, count[2] - 40대, count[3] - 30대, count[4] - 20대, count[5] - 10대

		int primeAge = 0;
		for (int i = 0; i < age.length; i++) {
			if (primeAge < age[i]) {
				primeAge = age[i];
			}
		}

		int countArray = primeAge / 10;
		int[] count = new int[countArray];

		for (int i = 0; i < age.length; i++) {
			int temp = age[i] / 10;
			int temp2 = primeAge / 10;

			for (int j = 0; j < primeAge; j++) {
				if (temp == temp2 - j) {
					count[j]++;
				}
			}
		}

		for (int i = 0; i < count.length; i++) {
			System.out.println(((i + 1) * 10) + "대 = " + count[count.length - 1 - i] + "명");
		}
}

2. 열거 (Enumeration)

3. 클래스(Class)

4. 인터페이스(Interface)

0개의 댓글