Java - 2일차 (자료형)
식별자
사물 등 모든 것에 대해 각각을 구별할 수 있는, 구분하는 이름
자바 프로그래밍에서도 사용되는 구성요소를 구별하는 이름
식별자는 클래스명, 메서드명, 변수명과 같이 서로를 구별하는 이름을 의미한다
식별자를 정의하는 규칙
- 첫 글자는 '_', '$', 영문 대, 소문자 (한글 가능) (특수문자는 '_'와 '$'만이 허용되지만 사용하지 말 것)
- 공백문자 및 특수 문자 사용 불가
- 시작을 숫자로 하지 않는다. 한글도 가능하다.
- 예약어는 사용이 안 된다.
- 글자 수는 제한되지 않지만 식별이 가능하게 작성한다.
- 단순한 약속을 지켜야 한다.
클래스명을 정의하는 규칙
- 첫 문자는 항상 대문자로 표현해서 작성한다.
- 하나 이상의 단어가 모여 클래스 명으로 지정될 때는 단어의 첫 문자들만 대문자로 표현해서 작성한다.
- 클래스 이름을 정의할 때는 반드시 파일이름과 같아야 한다.
- 숫자로 시작하면 안 된다. 공백을 포함해도 안 된다. 예약어를 사용하면 안 된다.
- 첫 문자를 '_'나 '$' 이외의 특수 문자로 시작하면 안 된다.
주석
주석문은 실제 프로그램에 영향을 주지 않으며 단지 소스코드의 기능이나 동작을 설명하기 위해 사용되는 것.
원시코드(java파일)의 컴파일 단계에서 제외되기 때문에 bytecode(class파일)에는 영향을 주지 않는다.
프로그래머 자신이나 다른 개발자들이 소스코드를 분석하기 쉽게 하기 위해 사용한다.
<종류>
1. // 주석문 (단행 주석처리) : 현재 행에서 // 뒷 문장부터 주석처리
2. /* */ 주석문(다행 주석처리) : /*와 */ 사이에 주석처리
3. /** */ 주석문 (javadoc 문서화 주석처리) : /** */ 사이의 문장 주석 처리. 장점은 html문서화로 주석이 처리되므로 api와 같은 도움말 페이지를 만들 수 있음
참고) 주석을 컴파일 할 때는 javadoc Filename을 이용한다.
package jun.java.exam01;
/**
<font color="navy" size="5">
"go for it!"
</font>
출력하는 클래스!
*/
public class CommentEx {
public static void main(String[] args) {
// 화면에 출력 - 한 줄 주석처리
System.out.println("go for it!!");
}
}
상수와 변수의 개념
상수 : 고유한 Data의 값으로 항상 동일한 의미를 가지는 개체
변수 : 상수를 저장하거나 보관하는 공간
변수명 : 변수에 대한 특정 이름
자료형 : 변수의 크기를 규정지어 미리 만들어 둔 크기의 약속
기본 자료형과 참조 자료형
1. 자바의 자료형
- 기본 자료형 (primitive data type)
- 자바 컴파일러에 의해서 해석되는 자료형
2. 참조 자료형 (reference data type)
- 자바 API에서 제공되거나 프로그래머에 의해서 만들어진 클래스를 자료형으로 선언하는 경우 (배열, 클래스 등)
1. boolean : 유일한 논리형 자료형, 1byte 그러나 1bit만 사용한다.
가지는 값으로는 false, true. ex) boolean aaa = false;
package jun.java.exam02;
public class BooleanEx {
public static void main(String[] args) {
boolean b = true;
System.out.println("변수 b의 값 : " + b);
}
}
2. byte : 1 byte 자료형 입출력범위(-128 ~ +127)
예를 들어 byte bb = -129 -> 127이다[C 에서는], 하지만 Java에서는 컴파일시 error를 발생시킨다.
단 초기값일 경우
왜?) 안정성 때문에
하지만 초기화 후 증감연산에 의한 증감에 대해선 C와 같다.
package jun.java.exam03;
public class ByteEx {
public static void main(String[] args) {
byte bb = 127;
bb++; // bb = bb + 1;
System.out.print("byte bb=" +bb);
}
}
3. short : 2 byte, -32768 ~ +32767 (-2^15 ~ 2^15-1)
short s : C에선 쓰레기 값, Java에선 error / but 자동 초기 값을 할당하는 경우도 있다.
package jun.java.exam04;
public class ShortEx {
public static void main(String[] args) {
short s = 0;
System.out.println("short s =" +s); // 에러 발생 ( = 0 없을시)
}
}
4. char : 2 byte [주로 unicode 사용] 참고) C에선 아스키코드, unsigned
ex) ch='\u0041' -> unicode 방식 ch=65, ch='A', ch='\n'
- 아스키 코드 - 1바이트 문자를 표현, 0~255 문자범위
-유니코드(세계 문자 표준) - 2바이트 문자를 표현, 0 ~ 65535 문자범위
세계 여러 국가의 문자들 (한자나 한글 같은 비 영어권 문자 2바이트)까지 표현하기에 부족해서 1바이트를 추가로 할당해서 표현한 방식
package jun.java.exam05;
public class CharEx {
public static void main(String[] args) {
char ch1 = 'A'; char ch2 = '\u0041';
System.out.println("ch1 + ch2 = " + ch1 + ch2);
System.out.println("ch1 + ch2 = " + (ch1 + ch2));
// 계산이 가능할 경우 숫자로 변경
System.out.println("ch1 + ch2 = " + (char)(ch1 + ch2));
}
}
<결과>
ch1 + ch2 = AA
ch1 + ch2 = 130
ch1 + ch2 = ?
5. int : 정수형 4byte (정수형 자료형의 기본)
6. float, double : 실수형 (실수형의 기본은 double)
package jun.java.exam06;
public class FloatEx {
public static void main(String[] args) {
float var1;
double var2;
var1 = 3.4f;
var2 = 55.55;
System.out.println("var1의 값 : "+var1);
System.out.println("var2의 값 : "+var2);
}
}
* var2의 자료형을 float으로 지정하면 error 발생
7. Wrapper Class : 기본 데이터형의 Class화
package jun.java.exam07;
public class WrapperEx {
public static void main(String[] args) {
byte a_min = Byte.MIN_VALUE;
byte a_max = Byte.MAX_VALUE;
char b_min = Character.MIN_VALUE;
char b_max = Character.MAX_VALUE;
int c_min = Integer.MIN_VALUE;
int c_max = Integer.MAX_VALUE;
float d_min = Float.MIN_VALUE;
float d_max = Float.MAX_VALUE;
System.out.println("byte = " + a_min + "~" + a_max);
System.out.println("char = " + b_min + "~" + b_max);
System.out.println("int = " + c_min + "~" + c_max);
System.out.println("float = " + d_min + "~" + d_max);
}
}
8. 형변환
- boolean 형은 형 변환 불가
- byte -> char은 casting이다. 입출력범위가 기준이니까.
- long -> float는 promotion이다. 왜냐하면 실수형은 정수형보다 크기 때문이다.
■묵시적 변환
- 적은 데이터 형을 큰 데이터 형으로 변환할 때
- 컴파일러가 자동으로 변환시켜 수행
- double da = int_value;
■명시적 변환
- 큰 데이터 형을 적은 데이터 형으로 변환할 때
- 캐스터연산자(cast operator)를 사용
- 값의 정밀도를 잃을 수 있다.
- long la = (long) float_value;
■숫자를 문자열로
- String ss = String.valueOf( number );
■문자열을 숫자로
- byte b = Byte.parseByte( str );
- short s = Short.parseShort( str );
- int i = Integer.parseInt( str );
- long lo = Long.parseLong( str );
- float f = Float.parseFloat( str );
- double d = Double.parseDouble( str );