일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- 오블완
- 백준1926
- 그래프
- 프로토콜
- Python
- 코딩테스트
- BFS
- 백준2493
- 그래프이론
- Java
- 컴퓨터네트워크
- 인터넷
- 컴퓨터 네트워크
- 파이썬실습
- 파이썬
- 시뮬레이션
- deque
- greedy
- Queue
- 백준13901
- 브루트포스
- linkedlist
- 백트래킹
- 백준3085
- 티스토리챌린지
- 배열
- 정렬
- dfs
- Stack
- 백준2823
- Today
- Total
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- 오블완
- 백준1926
- 그래프
- 프로토콜
- Python
- 코딩테스트
- BFS
- 백준2493
- 그래프이론
- Java
- 컴퓨터네트워크
- 인터넷
- 컴퓨터 네트워크
- 파이썬실습
- 파이썬
- 시뮬레이션
- deque
- greedy
- Queue
- 백준13901
- 브루트포스
- linkedlist
- 백트래킹
- 백준3085
- 티스토리챌린지
- 배열
- 정렬
- dfs
- Stack
- 백준2823
- Today
- Total
Little cabin in the woods
자료형( 정적 타입 vs 동적 타입 개념) 본문
자료형은 무엇이고 왜 필요할까?
컴퓨터는 자료를 비트 단위로 메모리에 저장한다. 이때 메모리의 공간은 한정되어 있기 때문에 이 공간을 효율적으로 사용하는 것이 매우 중요하다. 따라서 '자료형'이라는 것을 만들어서 어떤 데이터를 표현하기 위해 어느 정도의 메모리 공간이 필요할 지 미리 지정해두는 것이다.
예를 들어, 참/거짓 을 표현하는 데이터의 경우는 1일 때 true, 0일때 false로 1bit만 있으면 모든 경우의 수를 표현할 수 있다.
만약 참/거짓을 표현하는 데이터를 담을 때 10bit 만큼의 메모리 공간을 할당해버리면 9bit 만큼의 메모리 낭비가 발생한다.
따라서 앞으로 참/거짓 을 표현하는 데이터를 담을 때는 1bit 만큼의 메모리만 사용하도록 미리 정해두었고, 이를 boolean 타입 자료형이라고 명명해둔 것이다.
또한, 이러한 자료형은 컴퓨터가 데이터를 읽을 때 몇 bit까지를 하나의 데이터로 판단해야할지 지정해주는 역할도 한다.
예를 들어 int 자료형(4byte=32bit)이라면, 컴퓨터는 시작지점부터 32칸만큼의 정보를 읽어서 그 데이터가 무엇인지 판단할 수 있다. (33번째 칸부터는 다른 데이터구나~ 하고 알 수 있도록)
정적 타입 vs 동적 타입?
일단, 자바는 정적 타입 언어이다.
정적 타입 언어는 컴파일 시에 자료형을 결정해주는 언어이다.
//JAVA
int a = 10;
char a = "안녕" // 컴파일 에러
위 예시와 같이 변수 선언 시, 자료형을 반드시 명시해주어야 하고 이후 동일한 변수에 다른 자료형을 할당해주려고 하면 컴파일 에러가 발생한다. 컴파일 시간에 변수의 타입(자료형)을 체크하고 이로 인한 문제점을 초기에 발견할 수 있기 때문에 상대적으로 안정성이 올라간다.
반면, 동적 타입 언어는 소스가 빌드될 때 자료형을 결정하는 것이 아니라 실행 시에 자료형을 결정한다. 주로, 인터프리터 언어들이 동적 타입 언어에 해당한다. ex) javascript, python
#Python
a = 10
a = "안녕" #자료형 재할당해도 오류 발생하지 않음.
위의 예시와 같이 자료형을 매번 명시해 줄 필요가 없고, 자료형 재할당도 가능하다.
따라서 정적 언어들에 비해 코딩하기 유연하고 편하다는 장점이 있으나, 예상치 못한 타입이 변수에 들어와도 실행 전까지는 알아차리지 못하기 때문에 사용자들이 예상치 못한 에러들을 경험할 위험이 있다. 따라서 개발할 때 유의가 필요하다.
'STUDY > JAVA' 카테고리의 다른 글
JVM 메모리 구조 관련 의문 (1) | 2024.04.04 |
---|---|
원시 타입 VS 참조 타입 (+ JAVA 메모리 구조) (1) | 2024.04.03 |
논리 연산자의 단축 평가 (short circuit) (0) | 2024.04.02 |
부동소수점 개념 이해하기 (실수 연산 오차가 생기는 이유) (1) | 2024.04.02 |
자바의 특징 - WORA (1) | 2023.01.08 |