2014년 9월 1일 월요일

Java 변수4-논리형과 문자열)

2.2 논리형 - boolean

논리형에는 boolean 한가지 밖에 없습니다.. boolean형 변수에는 true와 flase 중 하나를 저장할 수 있으며 기본값(default)은 false입니다. 
 boolean형 변수는 대답(yes/no), 스위치(on/off) 등의 논리구현에 주로 사용이 됩니다. 그리고 boolean형은 true와 false, 두 가지의 값만을 표현하면 되므로 기본형 중에서 가장 크기가 작은 1 byte입니다.


boolean power = true;                                                                                                   

위의 문장은 power이라는 boolean형 변수를 선언하고 true로 변수를 초기화 하였습니다.

2.3 문자형 - char

문자형은 한 가지 자료형밖에 없습니다. Java에서는 유니코드(Unicode) 문자 체계를 사용하기 때문에 크기가 2byte입니다.

유니코드는 세계 각 국의 언어를 통일된 방법으로 표현할 수 있게 제안된 국제적인 코드 규약입니다. 미국에서 개발되어진 컴퓨터가 영어를 바탕으로 정의되어 있기에 26자의 영문 알파벳과 몇 가지 특수 문자를 표현하기에는 1byte만으로 충분하였기 때문에 모든 문자(정보)가 1byte 단위로 표현되고 있습니다. 하지만 동양(한자, 한글, 일어)의 언어는 1byte로 표현이 되지 않기 때문에 2byte로 문자를 표현하는 유니코드가 만들어졌습니다.

ASCII코드는 128개의 문자집합을 제공하는 7비트 부호로 되어 있습니다.
char형의 크기는 2byte이므로 16진수로 0000부터 ffff까지, 문자를 표현하는데 65536개(2^16)의 코드를 사용할 수 있으며, char형 변수는 이 범위 내의 코드 중 하나를 저장할 수 있습니다.
 알파벳 'A'의 유니코드 값은 0041이므로 char형 변수에 문자 'A'를 저장을 하려면 아래와 같이 합니다.

char Firstalphabet = 'A';                                                                                                
char Firstalphabet = '\u0041'; //16진수 41은 10진수로 65이다.                                        

char형 변수 Firstalphabet를 선언하고, 문자'A'를 저장하습니다. char형 변수에 문자를 저장할 때는 작은따옴표(')로 문자를 둘러 쌉니다. 두 번째는 문자의 코드를 이용해서 문자형 변수를 저장한 것 입니다.

char형과 shor형은 크기가 2byte(16bit)이지만 범위가 다르기 때문에 같은 2진 표현이라 하더라도 실제로 의미하는 값은 다를 수 있음을 보여줍니다.
 char형과 short형은 모두 2 byte이기 때문에 표현할 수 있는 값의 개수는 65536개로 같습니다. 하지만 char형은 문자의 코드를 저장하므로 음수가 필요하지 않기 때문에 2진수로 표현했을 때 첫 번째 자리를 부호로 사용하지 않지만 short형은 첫 번쨰 자리를 부호로 표현하는데 사용하기 때문에 서로 다른 범위를 갖게됩니다.

char과 int의 관계 예제1

public class chartoint {

public static void main(String[] args) {
char ch = 'A';
int code = (int)ch;
System.out.println(ch);
System.out.println(code);

}

}

실행결과
A
65 

65가 풀력되는 이유는 문자 A의 코드가 10진수로 65이기 때문입니다. 위의 내용은 형변환인데 후에 설명할 테이니 이런것이 있구나 하고 넘어가시면 됩니다.
char형 변수에 저장되는 값은 부호없는 정수의 형태로 저장이 됩니다. 이 같은 해당문자의 유니코드인데 char ch = 'A';가 수행되면 char혀 변수 ch에는 문자 'A'의 유니코드인 65가 저장이 됩니다. 변수에 문자를 저장하는 것 같지만 실제로는 정수값(유니코드)이 저장이 되는 것입니다. 그러므로 모든 데이터는 숫자로 저장된다고 보시면 됩니다. println()은 변수의 값을 출력할 때 쓰는 문장입니다.

char과 int의 관계 예제1

public class inttochar {

public static void main(String[] args) {
int code = 65;
char ch = (char)code;
System.out.println(code);
System.out.println(ch);

}

}

위의 예제는 코드65(16진수로 41)가 어떤 문자를 뜻하는지를 알아낼 수 있는 방법을 알려줍니다.
 두 예제에서 볼 수 있듯이 char형의 변수를 정수형(int)로 변환(casting)하면, 변수에 저장되어 있는 문자의 유니코드를 10진수로 얻을 수 있습니다. 반대로 특정 유니코드가 어떤 문자를 나타내는지 알고 싶으면 유니코드를 정수형 변수에 저장한 다음, char형으로 변환하여 출력하면 됩니다.

또 다른 특수 문자와 문자열예제

public class chartoint {

public static void main(String[] args) {
// TODO Auto-generated method stub
char single = '\'';
String dblQoute = "\"Hellow\"";
String root = "c:\\";
System.out.println(single);
System.out.println(dblQoute);
System.out.println(root);

}

}

실행결과

'
"Hellow"
c:\

char형 변수는 단 하나의 문자 밖에 저장할 수 없기 때문에 여러 문자를 저장하기 위해서는 String클래스를 사용해야 합니다.
char ch = 'A';를 char ch = 'java'이렇게 할 수 없다는 것 입니다. java를 출력하기 위해서는 string name = "Java"; 와 같이 표현해야 합니다. String은 클래스 이므로 String name = new String("Java);와 같이 연산자 new를 사용해야 하지만 위와 같은 표현을 허용합니다. 또한 자바에서는 덧셈 연사자를 이용하여 문자열을 결합할 수 있어서 다음과 같이 할 수 잇습니다. String name = "ja"+"va"; 이렇게 문장을 입력하면 name에는 java가 저장이 됩니다.

덧셈 연산자(+)의 피연산자 중 어느 한 쪽이 String이면 나머지 한 쪽을 먼저 String으로 변환한 다음 두 String을 결합한다. 예를들어 7 +"7"을 계산할 때 7이 String이 아니므로 7을 String으로 변환한 다음 "7"+"7"을 수행하여 "77"을 얻게 됩니다. 만일 7 + 7 +""이 되면 덧셈연사자의 성질(왼쪽에서 오른쪽 방향으로 연산을 수행하는 성질)때문에 14+""이 되고 "14"+""이 되고 최종 연산결과는 "14"가 된다. 또한 int와 같은 기본형 타입의 값을 문자열로 변환할 때는 아무런 내용도 없는 빈 문자열("")을 더해주면 된다는 것도 알아두면 좋습니다.


public class StringExample {

public static void main(String[] args) {
String a = 7 + "";
String b = "" + 7;
String c = 7 + " ";
String d = " " + 7;
String e ="" + "";
String f = 7 + 7 + "";
String g = "" + 7 + 7;
System.out.println(a);
System.out.println(b);
System.out.println(c);
System.out.println(d);
System.out.println(e);
System.out.println(f);
System.out.println(g);
}

}

실행결과
7
7
 7

14
77

기본형과 참조형 구별 없이 어떤 타입의 변수도 문자열과 덧셈 연산을 수항하면 그 결과는 문자열이 된다.

문자열 + any type -> 문자열 + 문자열 -> 문자열
any type + 문자열 -> 문자열 + 문자열 -> 문자열


댓글 없음:

댓글 쓰기