본문 바로가기

IT/자바 Java

[Java 기초] #2. 자바의 데이터 타입(자료형)과 오퍼레이터(연산자)

반응형

자바의 데이터 타입

데이터 타입 (자료형) 은 문자, 정수, 소수 등 데이터(자료) 의 형식을 말합니다.

프로그래밍 언어중에서는 파이썬처럼 데이터 타입을 명시적으로 정의할 필요가 없는 언어도 있지만, C처럼 데이터 타입을 반드시 정의해야 하는 언어도 있습니다. 자바는 후자에 속하며, 이와 같은 언어를 "strongly typed language"라고 합니다.


자바는 크게 2가지 형태의 데이터 타입을 가지고 있는데, 객체지향타입과 비객체지향 타입입니다. 앞에서 간략히 언급했던 class 가 가장 대표적인 객체지향타입이라면, 비객체지향 타입은 자바의 8가지 기본타입 (primitive data type)으로 정의할 수 있습니다.


자바의 기본 타입 (Built-in Primitive Data Types)

정수형

byte : 8비트

int : 16비트

long : 32비트

short : 64비트


실수형

float : 32비트

double : 64비트

자바 클래스 라이브러리의 수학 함수들은 모두 double 타입을 사용하기 때문에, float는 많이 사용되지 않습니다.


문자형

8비트 ANSI code의 캐릭터 세트를 사용하는 C 등의 언어와 다르게 java는 16비트의 유니코드를 사용합니다.

문자를 변수에 할당할 때는 single quotes ( ' )를 씁니다.

char ch;
ch = 'X';


불린형 Boolean Type

참/거짓을 나타내는 불린 (혹은 불) 자료형입니다.

boolean b;
b = false;
b = true;


리터럴 Literals

프로그래밍 언어에서 리터럴은 "인간이 읽을 수 있는 형식으로 표현되는 고정된 값" 을 의미합니다. 예를 들면 숫자 100, 문자 A, 문자열 "I am a boy" 모두 리터럴입니다. 자바에서 리터럴은 "상수"라고도 표현합니다.

자바에서 문자 상수는 앞에서 말한 것 처럼 single quotes로 감싼 문자로 표시하며, 정수는 소숫점이 없는 숫자로 표시합니다. 숫자 뒤에 l이나 L을 붙이면 long 형식의 리터럴을 뜻합니다.

소숫점이 있는 숫자는 기본적으로 double형식의 리터럴이며, float 형식은 숫자 뒤에 f나 F를 붙여서 구분합니다.

16진수, 8진수, 2진수의 리터럴은 0x (혹은 0X), 0, 0b(혹은 0B) 로 시작하여 구분합니다.

문자열 리터럴은 따옴표 ( " ) 로 감싼 문자열로 표시합니다. (앞에서 언급한것 처럼 문자 (character)는 single quote를 사용하는 것에 유의하시기 바랍니다.)


이스케이프 문자

특수문자 등을 표현하기 위한 특별한 문자 시퀀스를 이스케이프 문자라고 합니다. 다른 언어와 비슷하게 자바도 백슬래시 ( \ ) 를 이스케이프 문자로 사용합니다.

가장 많이 사용하는 사례는 개행문자 ( \n )인것 같네요.


변수 초기화

변수를 초기화 하는 방법은 아래와 같습니다.

  • 변수를 선언한 후 초기값을 할당
  • 변수를 선언하면서 동시에 초기값을 할당
  • 동적 초기화 : 리터럴이 아닌 표현식을 사용해서 초기화
     예: double volume = 3.1416 * radius * radius * height;


변수의 스코프 (범위) 와 수명

중괄호 ( { } ) 로 정의되는 코드의 블럭은 하나의 범위 (스코프) 를 정의합니다. 자바에서 가장 중요한 스코프는 클래스 스코프와 메서드 스코프인데,  각각의 스코프 안에서 정의된 변수들은 스코프 밖에서 억세스할 수 없습니다.

변수의 수명도 스코프와 함께 합니다. 스코프를 떠나는 순간 변수의 값은 사라집니다.


연산자 operators

연산자는 컴파일러에게 특정한 수학적/논리적 조작을 수행하도록 하는 부호입니다.

자바의 연산자는 크게 4가지로 나눌 수 있는데, 산술 arithmetic, 비트 bitwise, 관계 relational, 논리 logical 입니다.


산술연산자


+

 더하기 (단항 더하기)

-

 빼기 (단항 빼기)

* 곱하기
/ 나누기
%

 나머지

 ++

 증가

 -- 감소


증가/감소 연산자는 변수의 값을 1씩 더하거나 빼는 역할을 합니다. 즉

x++; 는 x=x+1; 과 같은 역할을 합니다.

증가/감소 연산자가 변수의 앞 / 뒤에 올 때의 차이는 아래와 같습니다. 즉 증가/감소 연산자의 수행 순서가 다릅니다.

x = 10;

y = ++x; // -> x = 11, y = 11

x = 10;

y = x++; // -> x = 11, y = 10



관계연산자

==

equal to

!=
Not equal to
>
greater than
<
less than
>=
greater than or equal to
 <=less than or equal to


논리연산자

&

AND

|

OR

^
XOR
||

Short-circuit OR

&&

Short-circuit AND

 !

NOT


short-circuit 버전의 OR이나 AND는 첫 번째 오퍼랜드를 먼저 evaluate 한 다음, 필요한 경우에만 두 번째 오퍼랜드를 evalute 한다는 점에서 일반 OR / AND와 차이점이 있습니다.


할당 연산자 Assignment Operator

변수에 값을 할당할때는 이퀄 기호 = 를 사용합니다.


짧은 할당 shorthand Assignment

2개의 오퍼랜드를 가지는 모든 연산자를 짧게 줄여서 쓸 수 있습니다. 예를 들면

x = x + 10; // -> 이것을

x += 10; // 이렇게 쓸 수 있죠.

더하기나 빼기 뿐 아니라 AND, OR, XOR연산에도 사용할 수 있습니다.


할당시의 타입 변경 Type conversion in Assignments

할당 시 왼쪽과 오른쪽 오퍼랜드의 타입이 다른 경우, 만일 두 타입이 서로 호환되고 왼쪽 오퍼랜드의 타입이 오른쪽보다 더 큰 범위를 가지는 경우 자바는 자동으로 타입 변경을 실시합니다.

간단한 예는 다음과 같습니다.

int i = 10;

float f = i; //실수 변수 f 에 정수값 10을 할당


호환되지 않는 타입 간의 캐스팅 Casting incompatible types

호환되지 않는 타입 간에는 캐스팅을 사용할 수 있습니다.

  (target-type) expression

예를 들면 아래와 같습니다.

double x, y;
// ...
(int) (x / y)


표현식에서의 타입 변경

하나의 표현식 안에서 호환되는 타입들이 섞여 있으면 java는 type promotion rule에 따라 같은 타입을 자동 변환 합니다.

아래 예제에서 캐스팅이 필요한 경우 / 필요하지 않은 경우를 보여주고 있습니다.

byte 타입에 대해서 산술연산자 (예제에서는 *) 를 사용하면 자바는 타입을 자동으로 정수형으로 프로모션 시킵니다. 따라서 첫 번째 항목에서 캐스팅이 필요하지 않은 것이죠.

두 번째 표현식에서는 정수형으로 프로모션된 값을 바이트형 변수에 할당하기 때문에 캐스팅이 필요하게 됩니다.


반응형