-
2. 자바 변수와 자료형 (1) char자바(Java) 강의 2019. 3. 2. 15:14
이 포스트에서는 자바 프로그래밍 언어의 기본 자료형인 char, boolean, byte, short, int, long, float, double중에서 char에 대해 알아보도록 하겠다.
예상 독자
- 자바를 배우고 싶은 누구나
- JDK와 IDE를 설치한 자바 학습자. ( 1. 자바 설치 및 개발환경 설정 )
목표
- 자료형(Primitive Data Type)
- System.out.println
- 데이터의 단위
- 변수
- 세미콜론
- char
자료형(Primitive Data Type)
프로그래밍 언어에서 배워야 하는 가장 중요한 것은 무엇일까? 가장 간단한 컴퓨터인 계산기를 예로 들어 보자. 전자계산기로 계산을 할 때 필요한 것들이 무엇인가? 첫번째로 계산에 사용 될 숫자들이 있고, 그 숫자들을 적용할 공식(Operation)이 있다. 예를들어 5 + 1이라고 치면 숫자 2개와 오퍼레이터 + 로 이루어진 식이다. 따라서 계산기로 계산을 하려면 숫자와 공식(연산-Operation)이 필요하다. 여기서 숫자에 해당하는 것이 '자료형(이후 자료구조)'이고, 공식에 해당하는 것이 '알고리즘'이다. 알고리즘이란 자료형을 모르면 배울 수 없기 때문에 보통 프로그래밍 언어에서는 가장 처음으로 해당 프로그래밍 언어가 제공하는 기본 자료형(primitive data type)을 배운다.
모든 자료형은 각 자료가 표현 할 수 있는 범위가 있다. 또 각 자료가 표현 할 수 있는 범위는 해당 자료형의 표현 방식과, 메모리 공간의 제약에 의해 결정된다. 따라서 자료형을 배울 때, 해당 자료가 표현하는 것 이외에도, 메모리 제약으로 인한 값 제약과 자료형 표현 방식에 의한 제약을 알고 넘어가는 것이 좋다. 더 자세한 사항은 각각의 자료형에서 설명하도록 하겠다.
System.out.println
자바를 통해 프로그래밍을 처음 배우는 사람들은 System.out.println이 뭔지 궁금 할 수 있다. 아쉽게도 System.out.println을 이해하기 위해서는 다른 개념들을 더 배워야 한다. 따라서 지금은 "System.out.println()하고 괄호 안에 어떤 값을 집어넣으면 그 값을 출력해준다"라고 알고있으면 된다. 나중에 필요한 문법과 개념을 다 배우고 나서 다시 설명하도록 하겠다.
데이터의 단위
비트(bit)
비트는 컴퓨터의 세계에서 데이터를 표현하는 가장 작은 단위이다. 다시말해 이진수에서 표현하는 1이나 0을 비트라고 부른다. 예를들어서 1010은 4비트이다. 10이나 11이나 00은 2비트이다. 예를들어 32비트 자료형 이라는 것은 1또는 0을 32개 저장 할 수 있는 자료형이라는 뜻이다.
바이트(byte)
비트를 8개 모은 것을 바이트라고 부른다. 즉 1 byte = 8 bits 이다. 이후 천 단위에 맞춰 킬로바이트(Kb), 메가바이트(Mb), 기가바이트(Gb) 순으로 부른다.
변수
변수란 어떤 자료형을 담는 공간을 의미한다. 예를들어 어떤 물건을 박스에 담으려고한다. 가장 먼저 무엇을 알아야 하는가? 바로 물건의 크기를 알아야 한다. 물건은 큰데 박스는 작으면 그 물건을 박스에 담을 수 없다. 마찬가지로 물건은 작은데 박스는 크면 공간을 낭비하게 된다. 변수와 자료형에서도 마찬가지이다. 어떤 자료형은 1바이트이고 어떤 자료형은 32바이트이다. 할당 하고 싶은 자료형의 크기에 맞게 변수를 선언하기 위해 'Type' 즉 자료형을 변수 이름 앞에 명시해준다. 아래에서 실습을 하며 더 자세하게 설명하도록 하겠다.
세미콜론
자바에서는 구문(명령어) 하나를 마치면 세미콜론을 적어줘야된다. 세미콜론이 없으면 자바 컴파일러가 어디에서 구문이 끝나는지 알지 못한다. 우리 인간은 한 문장이 끝났음을 마침표를 이용해 표현한다. 같은 개념이라고 생각하면 된다. 세미콜론을 이용해 자바 컴파일러에게 한 명령이 끝났다는 것을 알려주는 것이다.
char
char는 character의 약자로 문자 1개를 저장하는 자료형이다.
public class Main {
public static void main(String[] args) {
System.out.println('c');
}
} 실행결과: c실행해보면 'c'를 출력하는 것을 확인 해 볼 수 있다. 이제 아래를 보자.
public class Main {
public static void main(String[] args) {
char character = 'c';
System.out.println(character);
}
} 실행결과:c
위처럼 변수는 '자료형 변수이름 = 값;'과 같이 선언한다. 이 때, 선언하는 변수의 자료형과 할당하는 값의 자료형이 같아야만 선언이 가능하다. 왜? 사이즈가 안맞으면 자바가 거부하는 것이다. 크기가 선언한 변수의 크기와 집어넣으려는 값의 크기가 다르다는 것이다. 예를들어서 다음과 같은 코드를 실행 해 보자.
public class Main {
public static void main(String[] args) {
boolean character = 'c';
}
}boolean character = 'c'밑에 빨간 줄이 뜨면서 실행이 안되지 않나? 실행 하면 뭐라고 뜨는가? 인텔리제이를 이용한다면 아래에 이렇게 에러가 뜰 것이다.
읽어보자 (3, 29) -> 이 말은 3번째 줄 29번째 캐릭터에서 에러가 났다는 뜻이다. 29번째는 'c'가 시작하는 부분이다. 에러 메시지에서는 뭐라고 하는가? 호환이 불가능한 타입: char는 boolean으로 변환될 수 없다. 라고 나온다. 여러분은 지금 boolean이라는 자료형으로 character라는 변수를 선언했는데, 값은 'c', 즉 char 자료형이다. 이런 경우 자바는 자기가 알아서 해결 해 보려고 형 변환이라는 것을 한다. 혼자 호환되는 타입으로 변환하려고 했는데 안되니까 에러가 나는 것이다.
그렇다면 char 자료형의 크기는 얼마일까?
public class Main {
public static void main(String[] args) {
System.out.println(Character.SIZE);
}
} 실행결과: 16Character.SIZE에 char의 크기가 저장되어 있다. 실행 해 보면 16이라고 나온다. 16비트, 즉 2바이트라는 뜻이다. 좀 더 알고싶은 사람은 아래를 읽고 아닌 사람은 끝으로 넘어가라.
코드를 실행시키면 컴퓨터가 char chracter;를 선언한 부분을 실행 시킬 것이다. 이 때 컴퓨터가 이 변수의 자료형을 보고 '아 얘는 16비트의 공간이 필요 한 애구나'하고 이해해 메모리 공간에 16비트(2바이트) 공간을 확보한다.
우리가 char charcter = 'c';로 선언했다면 1) 컴퓨터가 이 변수를 위한 16비트의 공간을 할당 후, 'c'의 바이너리 값(0000000001000011)으로 그 메모리 공간을 덮어쓴다.
만약 메모리 개념이 이해되지 않는다면 넘어가도 좋다. 지금은 "아, 뭐 공간 문제 때문에 변수 선언시 앞에 자료형을 써 줘야 하는구나"정도로만 알고 있어도 충분하다. 배우다 보면 그 진정한 의미가 이해 되므로 조바심 내지 말자. 대신 이해 해 보려고 노력하라. 이후의 자료형에서 형변환에 대해 설명 할 때 이 개념이 또 나올것이다. 또 이런 코드나 메모리에 대한 개념을 빨리 이해 할 수록 개발자로서의 여러분의 역량도 빨리 커질 것이다.
끝
문자를 달랑 한 개 저장하는게 무슨 소용인가? char 자료형은 이 자료형 하나만 가지고 보면 그다지 쓸모가 없어 보일 지 모른다. 하지만 이 char를 이어붙여서 문자열을 만들 수 있다. 자바의 기본 자료형은 다른 더 큰 자료형들을 위한 빌딩 블록(building block)이 될 수 있다. 다음 포스트에서는 자바에서 가장 간단한 자료형 중 하나인 boolean형에 대해서 알아보도록 하겠다.
'자바(Java) 강의' 카테고리의 다른 글
3. 자바 조건문 (1) if-else (6) 2019.03.06 2. 자바 변수와 자료형 (4) float, double (7) 2019.03.05 2. 자바 변수와 자료형 (3) byte, short, int, long (11) 2019.03.04 2. 자바 변수와 자료형 (2) boolean (3) 2019.03.03 1. 자바 설치 및 개발환경 설정 (1) 2019.02.27 댓글