화요일, 12월 24
Shadow

#016 자료형

float 형의 리터럴은 접미사 F 로 끝난다. 예를 들면 3.402F 이다. 모든 실수형은 IEEE 754 명
세(specification)를 준수한다. 범위 오류에 대해서는 오버플로우를 발생하고, 0으로 나누는 것 같
은 연산에 대해서는 언더플로우(underflow)를 발생한다.
long 정수의 리터럴(literal)은 접미사 L 이 붙는다.(예를 들면, 4000000000L) 16 진수는 접두사
0x 가 붙는다. 예를 들면, 0xCAFE 가 된다.( 역주: 리터럴은 소스 코드중에 있는 어떤 숫자 또는
기호로서 다른 데이터를 가리키는 역할을 하지않고 그 자신이 바로 데이터로서 사용되는 것을
말한다. ) 먼저 char 형은 string 형과는 달리 단일 따옴표를 사용한다.

표 3-3 : 특수 문자들
이스케이프 이름 유니코드 값
———————————————————————-
b backspace u0008
t tab u0009
n linefeed u000a
r carriage return u000d
” double quote u0022
’ single quote u0027
\ backslash u005c
———————————————————————-

불리언(Boolean)
boolean 형은 false 와 true 의 두가지 값을 갖을 수 있다. 이것은 다른 프로그래밍 언어에
서와 같이 관계형 연산자를 이용하여 논리적 검사를 하기 위해 사용된다.

byte b; // for space sensitive considerations
int anIntegerVariable;
long aLongVariable; // for the national debt in pennies
char ch;

대입(Assignments)과 초기화
변수를 선언한 후, 하나의 값을 할당하여야 한다. 대입 문장을 이용하여 변수를 초기화하면 된
다. 변수는 무조건 초기화를 시켜야 한다- 결코 초기화되지 않은 변수를 갖을 수 없다.(컴파일러
는 초기화되지 않은 변수를 갖는 것을 허락하지 않는다) 왼쪽에는 변수 이름, 가운데에는 등호
(=), 오른쪽에는 적당한 값을 가지는 자바 표현식을 사용하여 미리 선언된 변수에 값을 대입시
킬 수 있다.
int foo; // this is a declaration
foo = 37; // this is an assignment
아래는 문자형 변수에 값을 대입하는 예제이다.
char yesChar;
yesChar = ‘Y’;
자바의 좋은 기능중 하나는 같은 라인에 변수를 선언하는 동시에 이를 초기화할 수 있다는 점
이다. 예를 들면:
int i = 10; // this is an initialization

피연산자(operand)의 하나가 double 형이면, 이 연산 범위에 대해서는 다른 피연산자도
double 로 취급된다.
l 그렇지 않으면, 피연산자의 하나가 float 형이면, 다른 피연산자도 float 로 취급된다.
l 그렇지 않으면, 피연산자의 하나가 long 형이면, 다른 피연산자도 long 으로 취급된다.
이런 방식은 int, short, byte 순서에 대해서도 그대로 적용된다.

반면에, double 형을 정수형으로 바꾸고 싶을 경우가 있을 것이다. 자바에서는 모든 숫자형의
변환이 가능하지만 정보를 잃어버릴 수 있다. 이런 변환은 보통 캐스트(cast)에 의해 이루어진다.
캐스트에 대한 구문은 목표 대상의 타입을 괄호로 묶어주고 그 다음에 변수 이름을 쓰는 것이
다. 예를 들면 다음과 같다:
double x = 9.997;
int nx = (int) x;
위와 같이 하면, 실수값을 정수로 캐스팅하면서 소수점 이하를 제거하므로 변수 nx 의 값은 9
가 된다( VB 에서 처럼 반올림되지 않는다).
만일 여러분이 부동소수점을 정수형으로 반올림하려면 Math.round 메소드를 사용하라:
double x = 9.997;
int nx = (int) Math.round(x);

상수(Constants)
자바에서는 상수를 정의할 때 final 키워드를 사용하라. 예를 들면,
public class UsesConstants
{ public static void main(String[] args)
{ final double CM_PER_INCH = 2.54;
double paperWidth = 8.5;
double paperHeight = 11;
System.out.println(“Paper size in centimeter: ”
+ paperWidth * CM_PER_INCH + “by”
+ paperHeight * CM_PER_NCH);
}
}
키워드 final 은 일단 변수를 할당할 수 있음을 나타낸다. 그런 다음 일단 값이 설정되면 모
두 공유한다. 상수 이름을 모두 대문자로 사용하는 것은 번거롭다.

자바에서 단일 클래스의 복수 메소드들이 이용할 수 있는 상수를 필요로 하는 경우가 흔히 발
생한다. 이들 상수를 흔히 클래스 상수라고 부른다. 여러분들은 static final 키워드를 사
용하여 클래스 상수를 설정할 수 있다. 다음은 클래스 상수를 선언하는 예이다.:
public class UsesConstants2
{ public static final double G = 9.81;
// gravitation in meters/second squared;
public static void main(String[] args)
{ System.out.println(G + “meters per second squared”);
}
}
main 함수를 정의하기 전에 static final 키워드를 이용하여 정의한다는 것을 명심하라.
여기서 pubic 접근 변경자를 사용한 이유는 해당 클래스 밖에 있는 다른 자바 메소드들이 해당
상수를 사용할 수 있도록 하기 위해서 이다.
———————————————————————-
C++노트 : const 는 예약되어 있는 자바 키워드이지만, 현재 사용되지는 않고 있다. 상수를
선언하고 싶다면 final 을 이용하라.
———————————————————————-

자바에서는 제곱승(power)을 수행하는 연산자가 존재하지 않는다. 대신
pow 함수를 이용해야 한다. pow 함수는 java.lang 안에 있는 Math 클래스에 포함되어 있다.
다음과 같이 사용할 수 있다.
y = Math.pow(x, a);
이것은 x 의 a 제곱승을 나타낸다. pow 함수의 인자는 둘다 double 형이다.

2 의 제곱에 대한 곱셈과 나눗셈을 하는 경우 이러한 연산자를 이용할 필요는 없다. 컴파일러가
자동적으로 시프트 연산자로 바꾸어서 계산한다. 그리고 >>> 연산자는 최상위 비트를 0 로 채우
는 반면에, >> 연산자는 부호(sign) 비트가 최상위 비트가 된다. <<< 연산자는 존재하지 않는다.
마지막으로 >>> 연산자는 최상위 비트를 0 으로 채운다. 반면에 >> 는 최상위 비트를 사인 비트
로 채운다. <<< 연산자는 존재하지 않는다.

연산자 결합 순서
———————————————————————-
[] . ()(function call) left to right
! ~ ++ — +(unary) -(unary) () (cast) new right to left
* / % left to right
+ – left to right
<< >> >>> left to right
< <= > >= instanceof left to right
== != left to right
& left to right
^ left to right
| left to right
&& left to right
|| left to right
?: left to right
= += -= *= /= %= &= |= ^= <<= >>= >>>= right to left
———————————————————————-

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.