(슬기로운 코딩생활) char와 String
(그때는 맞고 지금은 틀리다.. 지금은 mybatis가 버전업하면서 char를 String으로 변환하고 있는것인지 설정으로 변경하고 있는것인지..상관이 없구나..)
java에서 char는 int처럼
primitive type(기본 데이터 타입)입니다.
Java에서 기본 데이터 타입에는 4가지가 있습니다.
(1) 정수 타입 (byte, short, int, long)
(2) 실수 타입 (float, double)
(3) 논리 타입 (boolean)
(4) 문자 타입 (char)
문자열 String은
java.lang 패키지에 있는 클래스로
java의 기본 데이터 타입이 아닙니다.
java 기본 데이터 타입중에서
char 타입의 크기는
2byte(int 는 4byte)이고
딱 한 자리 글자를 담을 수 있는 데이터 타입이며
문자를 직접 설정할 때는 홀따옴표를 사용합니다
쌍따옴표를 사용할때는 첫번째 문자만 인식합니다.
아래의 6가지 중에서
위쪽 3가지는 올바른 char 타입의 사용법이고
아랫쪽 3가지는 char 의 잘못된 사용법입니다.
char ch1 = 'a';
char ch2 = 97;
char ch3 = '\u0061';
char ch4 = "a"; // 오류 : cannot convert String to char
char ch5 = 'abc'; // 오류 : invalid character constant
char ch6 = "abc"; // 오류 : cannot convert String to char
char ch7 = ''; // 오류 : invalid character constant 오류(빈글자의 char는 존재하지 않음)
char ch8 = null; // 오류 : cannot convert null to char
char ch9 = ' '; // 가능(빈공백은 유니 코드 32과 동일한 char 문자)
많은 경우에 char 타입의 데이타를 사용하는 코딩을 하지 않기 때문에
별로 알 필요없는 이야기라고 생각할 수 있지만,
mybatis를 사용하는 경우에
이런 내용을 이해하고 있어야 하는 이유가 있습니다.
<if test= "clCd != null and clCd == '01' ">
mybatis에서 위의 내용은
if (clCd != null and clCd == '0')
로 컴파일되어 실행됩니다.
clCd는 String으로 생각하고 코딩하였지만,
clCd는 char 타입으로 인식되어
앞 한글자만 인식하게 됩니다.
따라서 위의 내용은
clCd가 "01"이든 "02"이든 "03"이든
동일하게 처리됩니다.
그럼 어떻게 해야할까요?
mybatis에서 if절을 사용할때
홑따옴표를 바같쪽에 놓는 방법을 가장 흔하게 사용하곤 합니다.
개인적으로는
코딩의 일관성을 위해서
반드시 그렇게 작성했으면 좋겠습니다.
즉..
<if test= "clCd != null and clCd == '01' ">
이런 식으로 되어있는 부분을
<if test= 'clCd != null and clCd == ˚01"'>
이렇게 작성해야
생각하는대로 원하는대로 실행됩니다.
(※ 쌍따옴표와 홀따옴표의 사용 바꿈)