[유튜브 강의] (2) JAVA 초급 강좌 - 데이터 타입 (Data Type) - 1. 기본타입

2017. 2. 26. 12:20[유튜브 강의]- 센치한 개발자/[JAVA] 자바 기초 강의 - 완료

728x90

[센치한 개발자-유튜브 강의] (2) JAVA 초급 - 데이터 타입 ( Data Type ) - 1. 기본타입 : 기초 강의









데이터 타입 (Data Type) - 1. 기본타입


[자료 목차]

1> 데이터 타입 

  (1) 기본타입

    1) 정수형

      1. byte  

      2. char

      3.short, int long  

    2) 실수형

      1.  float 

      2. double

    3) 논리형

      1. boolean 




지난 시간에 변수, 상수, 리터럴에 대해서 간략히 살펴보았습니다.


그리고 이번 시간에는 위의 3가지 "변.상.리" (?)들과 밀접한 연관이 있다고 말씀드린 데이터 타입에 대해 알아보고자 합니다.


데이터 타입은 번역하면 "자료의 형태"입니다. 그래서 이를 줄여서 "자료형"이라고 표현하고 있습니다.


변수나 상수들에 값을 대입( 지난 시간에 배운 '=' 이꼬르(?) 표시)하기 위해서는 "어떤 데이터 타입에 대입하라는 건데?" 에 대한 컴퓨터의 물음에 대답을 해줘야 합니다.


*. 영화 다이하드의 유명한 물통 문제



1리터의 물만 담을 수 있는 유리병에 2리터의 물을 넣으려고 하면 1리터는 담을 수 있지만, 그 이상을 계속 부으면 나머지 1리터는 콸콸콸 버려지겠죠. 


반대로 2리터의 유리병에 1리터의 물을 넣으면 반만 채워지기는 하겠지만, 버려지는 물은 없겠죠?




그럼 한단계 더 나아가 생각해 봅시다.


유리병의 용량에 상관없이 그 유리병에 사람이 들어갈 수 있을까요? ( 물론 사람이 들어갈만한 유리병이 있다면... 퍽!)


일반적인 유리병에는 물과 같은 액체만 담는 것이 일반적이겠죠~ (누구는 모래같은 거나 종이학도 넣습니다만.....퍽!) 


부피가 크거나 전혀 들어가기 어려운 이삿짐이나 냉장고를 유리병에 넣어서 가기는 어려울 것입니다~


*.재료는 적절한 위치에 적절한 크기로 배치해야 합니다.

  





이처럼 유리병이라는 것은 물, 콜라, 사이다 등과 같은 특정한 재료(데이터 타입)을 담기 위한 메모리 공간입니다.


적절한 메모리 공간에 적절한 재료를 넣어야 하는게 일반적인 상식이라고 본다면, 




컴퓨터도 마찬가지 입니다. 


컴퓨터가 마련해준 메모리 공간(유리병)에 적절한 숫자의 크기나 문자 등을 넣어야 컴퓨터가 받아들일 수 있습니다. 


재료가 맞더라도 너무 넘치게 넣으면 버려지는 것이 있듯이 변수의 자료형도 넘치게 넣으려고 하면 버려지는 것이 있습니다.


수학적 개념으로 1 이나 1.1 이나 숫자로 보지만, 세부적으로 보면 정수와 실수로 나뉘는 것처럼


정수만 넣길 바라고, 실수만 넣길 바라는 데이터 타입이 별도로 존재합니다.




*. 물론 추후에 데이터 타입의 변환을 설명드릴때 나오는 개념이기에, 우선은 적절한 재료의 타입과 용량으로 대입해야 한다는 정도로만 기억해두세요~  




그럼 다시 강의 내용으로 돌아가보겠습니다.


지난 시간에는 boolean이라는 데이터 타입이 나왔었죠~


그럼 그 데이터 타입이라는 녀석을 바탕으로 자료를 변수에 저장하는 과정을 대화 형식으로 한 번 볼까요?



프로그래머 왈 : 야, 자료 대입좀 하자. 


컴퓨터 왈 : 귀찮..... 그래~ 어떤 '데이터 타입'에 대입하라는 건데?


프로그래머 왈 : 'boolean' 이라는 데이터 타입에 넣을거다. - *.선언


컴퓨터 왈 : 그래, 잠시만 기둘~ 옥희. 네가 말한 자료형에 적당한 1byte ( 8bit)의 메모리 공간을 확보했어. 대입할 자료를 말해봐.


프로그래머 왈 : 지금 스마트폰의 전원 상태가 켜져있다고 최초값을 넣을거라서, 일단은 초기값으로 "true"를 저장해. -*.저장


컴퓨터 왈 : 음! 잠시만 커피한잔 하고... 그래,  네가 저장하라고 시킨 true는 지금 이 데이터타입에 적절하게 들어갈 수 있군. 롸져댓! 저장했다. 빠염. 




대충 이러한 대화가 될 수 있겠군요.


그럼 이들의 대화 과정에 대해 이해하기 위해서 본격적으로 데이터 타입의 종류와 각 특징들을 알아봅시다.

    

모든 변수들은 데이터 타입이 존재하는데 크게 종류가 2가지입니다. 


1. 기본 타입

2.참조 타입


이렇게 2자기로 크게 분류할 수 있습니다.

 

1. 기본타입 

  ::"정수, 실수, 논리"의 "3가지"로 나누기도 하고 "정수,문자,실수,논리" 이렇게 "4가지"로 나누기도 합니다.

*. 4가지로 분리했을때의 그 '문자형'을 정수로 보는 경우는 3가지로 분류한다는 견해가 있음 - "크게 중요하지 않아요~~"


2. 참조타입

  :: 클래스, 인터페이스, 배열. 이렇게 3가지 입니다. 



직접 값을 저장하는 "기본타입(primitive type)"과  


그 값을 저장하고 있는 녀석(?)이나 다른 일반적인 녀석들의 정보를 알고 있는 "참조 타입(reference type)"인데요,



하나 예를 들어볼까요. 


한남동에 거주중인 오징어씨와 주꾸미씨가 있습니다. 낙지도 살고요.


오징어씨는 아르바이트로 1만원을 받고 손에 들고 있습니다.


그 장면을 주꾸미씨가 목격했지요. 


이렇게 1만원을 직접 가지고 있는 한남동의 "오징어"씨를 "기본 타입"이라고 한다면, 


"주꾸미"씨는 오징어씨가 1만원을 가지고 있으며, 지금 오징어씨는 한남역 횡단보드에 서있다거나하는 위치 정보를 알고 있는 "참조 타입"이라고 할 수 있습니다. 

 



그럼 본격적으로 데이터 타입 중 그 첫번째, 기본타입을 살펴보면 그 종류는 아래와 같습니다.




(1) 기본 타입


[ 자바 데이터 타입 중, 기본 타입의 종류 ]




*. 음수와 양수로 쓰여진 "저장 가능함 범위"는 완벽하게 외우면 좋겠지만 대략적인 범위로 우선 기억해주세요~


1) 정수형 


1. byte


*.코딩방법

byte b = 100;

byte는 메모리 크기를 1바이트(비트단위로는 8비트) 정도를 차지하며, 이때 byte가 저장 가능한 값의 범위는 마이너스(-)128부터 플러스(+)127입니다. 이는 byte라는 변수 타입은 2진수 인데, 8비트는 총 8칸의 값 저장 공간이 있다고 생각하시면 됩니다.


따라서, 8칸을 가진 8비트에 2진수를 음수1 또는 , 양수 0이라고 부호를 표시해야 하는 맨 앞자리 첫자리를 빼고 뒤의 7자리("실 제 정 수 값 부 분"이라고 적힌 부분) 에 숫자를 1  1  1  1  1  1  1 으로 채우기 시작해서 0 0 0 0 0 0 0  까지 경우의 수로 채우면 10진수로 -128부터 +127까지 표현이 가능합니다.



2. char 


*. 코딩방법

char ch = 42; char ch = '\u2028';

char의 경우 "유니코드"라는 전 세계의 문자들을 일관된 방식으로 표현하는 규약을 담는 용도로 쓰이고 있는데, 음수 없이 0 ~ 65,535개의 값만 저장이 가능합니다.


즉, 유니코드가 0 ~ 65,535 까지 이미 규약이 되어 있으며 가령, 작은 따옴표를 사용하여 'A' 또는 '가'라고 입력하면 이 A와 가라는 문자를 이미 규약되어 있는 유니코드의 16진수 값에 맞추어 2진수로 변환하고 이를 16비트의 16칸에 채우게 됩니다.


따라서 유니코드를 알고 있다면, 직접 42와 같은 16진수 숫자나 작은 따옴표를 사용하여 '\u + 16진수값'과 같은 방식으로 char에 16진수 값을 넣어도 됩니다.




3. short, int, long


*. 각각 코딩 방법

short s = 10000;
int i = 10000;
long l = 10000;
long ll = 10,000,000,000L; //L을 써주는 이유는 다음시간에 자세히~


short, int, long 의 경우도 각각의 비트 단위 수 만큼의 저장 가능한 메모리 '칸'이 있고 같은 원리로 값을 채우면 그 범위만큼 10진수로 표현이 가능합니다.

저장할 수 있는 값의 크기가 다르기에 분류가 되었으며, 추후 데이터 타입 변환과정에서 차이점을 명확히 알 수 있습니다.




2) 실수형



실수형은 간단히 말하면 소수점이 있는 숫자입니다. 

종류는 2가지가 있는데, float과 double입니다. 종류가 다른 것은 정수에서 처럼 저장할 수 있는 값의 크기가 다르기에 분류가 되고 있으며, float보다 double이 저장할 수 있는 값의 크기가 더 큽니다. 

*. 코딩방법
double d1 = 123.4;    //d1이라는 변수에 123.4라는 값을 대입하였다.
double d2 = 123.4d;    //d2이라는 변수에 123.4라는 값을 대입하였다. + 리터럴에 d라고 써도 된다.
double d3 = 1.234e2; //지수표기법에 따라 dl과 같은 값입니다.
float f1  = 123.4f;   //f1이라는 변수에 123.4f라는 값을 대입하였다. + 리터럴에 f라고 '꼭' 써야한다.



+초급이 싫은 분

*. 위의 long의 경우 2가지로 코딩 방법을 알려드렸는데, 하나는 리터럴에 "L"이라는 표시가 없고 그 아래는 "L"표시가 있습니다.

코딩과정에서 리터럴 숫자 10,000,000,000 은 기본적으로 int 리터럴값이나 그 값의 크기가 int가 저장 가능한 크기를 벗어나기때문에 long의 자료형의 약자인 "L"을 써줘야 합니다.  

float의 경우 f라고 리터럴 값에 꼭 써야 하는 이유는 실수형 리터럴은 기본적으로 double형이기 때문에 float 자료형으로 쓰고 싶어라고 꼭 명시해야 합니다.


정리하자면 정수형 리터럴은 기본적으로 "int" 자료형, 실수형 자료형은 "double" 자료형입니다.





3) 논리형



*. 코딩방법
boolean b = true; //b라는 변수에 true라는 값을 대입하였다
boolean bb = false; //bb라는 변수에 false라는 값을 대입하였다.



논리형은 참, 거짓이라는 값을 가질 수 있는 형태입니다.

지난 시간에 "여자친구와 헤어질 위험이 있는가?" 라는 질문에 "참"이라고 생각하셨다면, 그 값은 true, 거짓(즉 헤어질 위험이 없어라는 분들)의 경우 false라고 할수 있습니다. 





**정리.
1. 기본타입은 크게 정수형, 실수형, 논리형 3가지로 나뉜다. (정수, 실수, 문자, 논리형 이렇게 4가지로 나누기도 한다)
2. 각각의 자료형은 대입할 수 있는 메모리 공간의 크기가 다르고 대입(저장)할 수 있는 범위가 다르다.
3. 유니코드를 사용하는 char의 경우 '음수'가 없다.
4. 기본적으로 자바에서 정수형 리터럴은 int, 실수형 리터럴은 double로 저장한다.









728x90