[JAVA NOTE]3. Memory / Data Type

20217 단어 JavaJava






데이터

  • 데이터는 Memory(메모리)에 저장된 뒤 변형이 가능한 변수와 변형이 불가능한 상수를 사용할 수 있습니다.
  • 각 데이터는 저자오디어야하는 공간의 성격에 따라 크기와 종류가 정해짐






데이터를 저장하는 공간의 세 종류와 특징

  • Register

    • CPU 내부에서 사용되는 저장공간
  • Storage

    • 하드 드라이브라고도 불리는 HDD(Hard Disk Drive)
    • 용량당 가격이 아주 저렴하지만 속도가 매우 느림.
    • 최근엔 SSD(Solid State Disk)라는 HDD의 속도를 보완한 제품이 출시되고 있음.대신 가격은 HDD에 비해 비쌈
  • Memory

    • RAM이라고도 불리는 하드웨어가 Memory 공간을 담당

    • Storage보다는 빠르지만 Register보다는 느린 속도

      → Storage와 Ragister의 사이에 위치하여 다른 속도 및 용량을 갖고 있는 저장장소들을 보완하는 역할 담당






프로그램 동작 원리

  1. Storage에 저장된 프로그램 실행
  2. 운영체제가 해당 프로그램을 Memory에 Load함
    → stroage는 처리 속도가 느리기 때문에 CPU의 처리속도를 맞출 수 없어서 좀더 빠른 Memory에 Load하여 처리하게 됨
  • 이때 Load된 프로그램은 Process라고 함






변수 (variable)

변수란?


  • 변할 수 있는 어떤 수
  • 변수로 선언된 데이터 공간 안에는 정해진 성질에 맞는 데이터가 들어갈 수 있으며 이 데이터는 언제든 변할 수 있음
  • 정해진 성질에 맞지 않은 데이터가 들어가면 컴파일 에러 발생
  • 위치 주소는 16진수 숫자로 지정됨




변수명


  • 변수를 담을 수 잇는 데이터 공간의 이름
  • 변수를 선언하면 컴퓨터는 비어있는 주소를 가져와 변수명이 기록된 공간을 생성. 즉, a라는 변수명은 어떠한 Memory 주소와 연결됨
  • 동일한 이름 변수명을 지정하면 같은 이름의 공간이 여러 개 생기는 것이므로 에러가 발생




변수명 선언 규칙


  • 첫 글자에는 영문자, $, 만 사용가능함 (첫 글자가 아니라면 영문자, $, , 숫자를 사용할 수 있음
  • 대소문자는 구별됨
  • 예약어는 사용할 수 없음(ex)this,if,class,for,abstract)
import java.io.*;

class Main {
	public static void main(String[] args) {
		int a;
		a = 1;
		System.out.println(a);
	}
}




위 코드 해석

  • int a;
    = a라는 이름을 가진 Integer형 변수를 선언(Declare)한다.
    = Memory에 변수명이 a인 정수형 공간을 만든다.


  • 선언(Declare)
    → Memory에 데이터가 저장될 수 있는 공간을 만든다.
    → 프로그램이 실행될 때 운영체제는 이 프로그램이 사용할 수 있는 공간을 할당해줌
    공간이 바로 Memory에 생성되며 위치는 무작위로 결정됨


  • a=1;
    • 초기화 과정 : 가장 처음으로 값을 대입한다.
    • 초기화 하지 않으면 컴파일러에서 에러가 발생함
      → a라는 이름을 가진 정수형 공간에 1을 넣는다
      → “=”(equal) : 우측의 값을 왼쪽에 대입한다.






상수 (Constants)

상수란?


  • 값이 변하지 않는 데이터 공간
  • 변수 선언과 동일하게 자료형과 변수명을 적고 자료형 앞에 final을 붙여 사용함 (하단 참고)
  • 상수로 선언된 자료형은 내부의 값을 변화시킬 수 없음
  • 선언과 동시에 초기화를 진행해주어야함
import java.io.*;

class Main {
	public static void main(String[] args) {
		final int a = 2;
		System.out.println(a);	
	}
}






기본 자료형(Primitive Type)




자료형의 종류


  • Integral Type : 정수형 : inteer,short,long

  • Floating point Type : 실수형 : float,double

  • Character Type : 문자형 : character

  • Boolean Type: 참/거짓 : boolean

  • 해당 자료형을 저장할 수 있다는 것은 같음

  • 선언 시 Memory에 할당되는 공간의 크기가 다르고 각 자료형이 표현할 수 있는 숫자의 범위가 달라서 자료형이 많음




Integer Type (정수형)


import java.io.*;

class Main {
	public static void main(String[] args) {
		int varInt = 1234;
		long varLong = 9876543;
		short varShort = 567;
		
		System.out.println(varInt);
		System.out.println(varLong);
		System.out.println(varShort);
	}
}




Floating point Type (실수형)


import java.io.*;

class Main {
	public static void main(String[] args) {
		float varFloat = 12.34f;
		double varDouble = 98.76543;
		
		System.out.println(varFloat);
		System.out.println(varDouble);
	}
}
  • Float 사용시 주의 사항
    → 일반적인 실수는 기본적으로 double이나 float형 실수를 저장 할 시 f를 붙임으로 해당 실수가 float형태라는 것을 명시해주어야함




Boolean Type (참/거짓)


import java.io.*;
class Main {
	public static void main(String[] args) {
		boolean varTrue = true;
		boolean varFalse = false;
		System.out.println(varTrue);
		System.out.println(varFalse);
	}
}




Character Type(문자형)


  • 한개의 문자만 저장 가능함
  • 문자는 작은 따옴표(’’)에 감싸서 표현함
import java.io.*;

class Main {
	public static void main(String[] args) {
		char varChar = 'A';
		System.out.println(varChar);
	}
}






참조 자료형(Reference Data Type)

  • 값이 저장된 주소를 저장하는 자료형

  • 객체의 주소를 의미함

  • C와 C++ 포인터 느낌을 의미함

  • Class Type : 클래스

  • Interface Type : 인터페이스

  • Array Type : 배열

  • Enum : 열거






형변환(Type Casting)

  • 자료형을 변환해주는 것
  • boolean형을 제외한 나머지 기본형 자료형 사이에서 모두 사용이 가능함
  • 참조 자료형은 형변환이 가능하나 참조형 자료형 간에만 가능함 또한 여러 조건을 필요로 함




명시적 형변환


  • 명시적 형변환
    • 변수 형태를 명시적으로 지정하여 자료형을 바꾸는 행위
    • 저장하고자 하는 목표 자료형을 괄호로 감싸준 뒤 이를 바꾸려는 데이터 앞에 적어주면 됨
    • 형변환시 데이터 유실을 유의할것 (하단 예시 참조)
import java.io.*;
class Main {
    public static void main(String[] args) {
        double varDouble = 98.76;
        int varInteger = varDouble;
    }
}
  • 위 코드의 에러나는 이유 → varDouble이라는 변수는 double 즉 실수 자료형으로 선언되었으며 저 메모리 공간에는 98.76이라는 실수값이 들어가 있음. varDouble을 강제적으로 정수형으로 선언된 varInteger에 넣으려고함. 즉 해석해보면 varInteger에 강제적으로 98.76을 넣으려고 한거임
  • 명시적 형변환을 사용하여 자료형 변환
import java.io.*;
class Main {
    public static void main(String[] args) {
        double varDouble = 98.76;
        int varInteger = (int)varDouble;
        System.out.println(varInteger);	
    }
}

//int varInteger = (int)varDouble 에서 강제 형변환 된거임
//double -> int

//출력시 위에서는 98.76이 나왔으나 형변환을 진행하여 실수부 데이터가 유실되어버림
//따라서 98이 출력되는 것을 알 수 있음




묵시적 형변환


  • 형변환하는 것은 같으나 형태를 명시하지 않음
  • 바꾸고자 하는 타입을 명시하지 않아도 자료형이 자동으로 바뀌는 형변환
import java.io.*;
class Main {
    public static void main(String[] args) {
        short varShort = 5;
        double varDouble = varShort;
        System.out.println(varDouble); 
    }
}

//short 형태의 변수 varShort의 값을 그대로 double형 varDouble에 대입해도 컴파일 에러 발생 X
//자연스럽게 묵시적 형변환이 되어 에러가 발생하지 않음

//short -> 2byte
//double -> 8byte
  • 묵시적 형변환의 조건
    • 목표 자료형 크기(변환하고자 하는 목표) > 바꾸려는 데이터의 자료형 크기(원래 사용했던 자료형)






참조자료형 vs 기본자료형의 new 사용

기본형 자료형은 선언과 동시에 자동으로 메모리에 공간이 할당되어 new를 사용하지 않지만 참조형 자료형의 경우 new를 사용하여 메모리를 할당하지 않으면 사용할 수 없음

좋은 웹페이지 즐겨찾기