이번 개념 뽀개기는 자료형(Data Type) 입니다. 각 언어별로 거의 비슷한데, 조금씩 달라서 헷갈리더라구요. 그래서 이번 포스팅을 통해 한방에 정리해보고자 합니다.
| 자료형(Data Type)이란?
자료형 또는 데이터 타입은 컴퓨터 과학과 프로그래밍 언어에서 실수치, 정수, 불린 자료형 따위의 여러 종류의 데이터를 식별하는 분류로서, 더 나아가 해당 자료형에 대한 가능한 값, 해당 자료형에서 수행을 마칠 수 있는 명령들, 데이터의 이미, 해당 자료형의 값을 저장하는 방식을 결정합니다.
쉽게 말해 자료형은 우리가 변수를 선언하여 메모리를 사용하는데 있어 각각의 종류별로 그 크기를 지정해주는 아이를 말합니다.
| C언어의 자료형
- 정수형
- short: 2byte
- int: 4byte
- long: 4byte
- long long: 8byte
- 부동 소수점형(실수형)
- float: 4byte
- double: 8byte
- long double: 8byte
- 문자형
- char: 1byte(32비트 환경)
| C++언어의 자료형
- 정수형
- short: 2byte
- int: 4byte
- long: 4byte
- long long: 8byte
- 부동 소수점형(실수형)
- float: 4byte
- double: 8byte
- long double: 8byte
- 문자형
- char: 1byte(32비트 환경)
- 논리형(부울형)
- bool: 1byte(true or false)
| Java언어의 자료형
- 정수형
- byte: 1byte
- short: 2byte
- int; 4byte
- long: 8byte
- 실수형
- float: 4byte
- double: 8byte
- 문자형
- char: 2바이트(Unicode)
- 논리형(부울형)
- boolean: 1bit(true or false) -> 0과 1 사용불가!!
Java는 C/C++과 다르게 자동 처리되는 리터럴이 존재한다.
정수 자동 처리 리터럴: int
실수 자동 처리 리터럴: double
따라서 long이나 float으로 변환하고 싶다면 입력값 끝에 각각 L, F를 추가해주어야 한다.
| 리터럴이란?
리터럴이란 프로그램에 직접 표현한 값
34, 42.195, '%', true, "hello"
자료형 변수명 = 리터럴;
| 정수 리터럴
정수 리터럴은 자동으로 int 타입으로 컴파일한다.
int n = 15; // 십진수 15
int m = 015; // 015는 8진수로서 십진수 13
int k = 0x15; // 0x15는 16진수로서 십진수 21
int b = 0b0101; // 0b0101은 2진수로서 십진수 5
정수 리터럴을 long타입으로 지정하고자 하면 숫자 뒤에 L또는 l을 붙이면 된다.
long g = 24L; // 24L은 24l과 동일
| 실수 리터럴
실수 리터럴은 자동으로 double 타입으로 컴파일한다.
double d = 0.1234;
double e = 1234E-4; // 1234E-4 = 1234 x 10^(-4)이므로 0.1234와 동일
실수 리터럴을 float타입으로 지정하고자 하면 숫자뒤에 F또는 f를 붙이면 된다.
D또는 d를 붙이면 double 타입으로 강제 변환할 수도 있다.
float f = 0.1234f; // f = 0.1234로하면 컴파일 오류, 0.1234는 본래 double 타입
double w = .1234D; // .1234D와 .1234는 동일
| 문자 리터럴
문자 리터럴은 단일 인용부호(' ')로 문자를 표현하거나 \u 다음에 문자의 유니코드 값을 사용하여 표현한다.
유니코드 참고 사이트: https://home.unicode.org/
char a = 'W';
char b = '글';
char c = \uae00; // '글'의 유니코드 값(ae00) 사용
| 특수문자 리터럴
이스케이프 시퀀스(\)를 이용하여 특수문자를 표현할 수 있다.
- '\b': 백스페이스(backspace)
- '\t': 탭(tab)
- '\n': 라인피드(line feed)
- '\f': 폼피드(form feed)
- '\r': 캐리지 리턴(carriage return)
- '\"': 이중 인용부호(double quote)
- '\'': 단일 인용부호(single quote)
- '\\': 백슬래시(backslash)
| 논리 타입 리터럴과 boolean 타입
논리 리터럴은 true, false 두 개 밖에 없고 boolean 타입의 변수에 직접 치환하거나 조건문에 사용한다.
boolean a = true;
booleean b = 10 > 9; // 10 > 0 가 참이므로 b 값은 true
boolean c = 1; // 타입 불일치 오류 발생, C/C++와 달리 자바에서 1, 0을 참, 거짓으로 사용 불가
while(true){ // 무한 루프
...
}
| Python언어의 자료형
Python은 다른 언어들과 달리 동적 자료형을 지원해준다. 즉, 따로 자료형을 선언할 필요가 없다!!
- 숫자(수치)형
- 정수(int)
- 실수(float)
- 복소수(complex)
- 불(Bool)형
- True
- False
- 군집형
- 문자열(str): '', "" 둘다 사용 가능 -> python에서 입력값의 기본 자료형은 문자열(string)임, 인덱싱과 슬라이싱 가능
- 리스트(list): [] -> 인덱싱과 슬라이싱 가능
- 튜플(tuple): () -> 리스트와 비슷하나, 값 수정 불가
- 사전(dict): {key:value} -> 순서가 아닌 키로 저장되므로 인덱싱과 슬라이싱 불가
- 집합(set): {} -> 값의 순서 및 중복이 없음
| 자료형 자동 지정 키워드
- C++: auto
#include <iostream>
#include <typeinfo>
using namespace std;
int main(void) {
auto price = 200; // price는 int 타입으로 결정
auto pi = 3.14; // pi는 double 타입으로 결정
auto ch = 'K'; // ch는 char 타입으로 결정
cout << typeid(price).name() << endl;
cout << typeid(pi).name() << endl;
cout << typeid(ch).name() << endl;
return 0;
}
- Java: var
var price = 200; // price는 int 타입으로 결정
var name = "kitae"; // name은 String 타입으로 결정
var pi = 3.14; // pi는 double 타입으로 결정
var point = new Point(); // point는 Point() 타입으로 결정
var v = new Vector<Integer>(); // v는 Vector<Integer> 타입으로 결정
- Python: 기본으로 지원
| 상수 지정 키워드
- C/C++: #define, const
#include <stdio.h>
#define PI 3.141592 // case 1: 원주율을 상수로 선언
int main(void) {
const double radius = 5.5; // case 2: 원의 반지름을 상수로 선언
double circleArea = radius * radius * PI; // 원의 면적 계산
printf("원의 반지름: %.1lf\n", radius);
printf("원의 면적: %.2lf\n", circleArea);
return 0;
}
- Java: final
public class CircleArea {
public static void main(String[] args) {
final double PI = 3.141592; // 원주율을 상수로 선언
double radius = 5.5; // 원의 반지름
double circleArea = radius*radius*PI; // 원의 면적 계산
// 원의 면적을 화면에 출력한다.
System.out.println("원의 반지름: " + radius);
System.out.println("원의 면적: " + circleArea);
}
}
| 자료형 변환
- C/C++/Java: (자료형)값
- Python: 자료형(값)
이상으로 C/C++/Java/Python언어별 각각의 자료형(Data Type)을 정리해 보았구요.
공부하면서 추가로 알게되는 내용이나 오탈자가 있다면, 수정하도록 하겠습니다. 감사합니다.
| 참고 도서
1. 쉽게 풀어쓴 C언어 express
2. 게임으로 배우는 C++
3. 명품 Java Essential
4. 파이썬 스킬업
'코딩 | 개념 정리 > Common Concept' 카테고리의 다른 글
프로그래밍 공통 개념 뽀개기 5탄_주석 (0) | 2022.05.08 |
---|---|
프로그래밍 공통 개념 뽀개기 3탄_식별자(Identifier) (0) | 2021.09.20 |
프로그래밍 공통 개념 뽀개기 2탄_포인터(pointer) (0) | 2021.09.19 |
프로그래밍 공통 개념 뽀개기 1탄_함수의 매개변수와 전달인자란? (0) | 2021.09.18 |