카테고리
자주찾기
이글루 파인더
태그
flv
character-set
큐브
여러분이거다거짓말인거아시죠
linux
mysql5
safari
인코딩
드라이버
뿌뿌뿡
Sis760
Ubuntu7.10
phpmyadmin
apache
JFace
web
wifi
xampp
utf8
JDBC
모질라커뮤니티연말모임
eclipse
최근 등록된 덧글
최근 등록된 트랙백
Free nokia ringtones.
by Ringtones.
Instant payday loan.
by Payday loan.
Instant payday loan.
by Payday loan.
by Ringtones.
Instant payday loan.
by Payday loan.
Instant payday loan.
by Payday loan.
★ 변수선언 (메모리 확보)
1. Primitive Data type
정수
- byte (1)
- short (2)
- int (4)
- long (8)
실수
- float (4)
- double (8)
문자
- char (2) ; unicode
참/거짓
- boolean (1)
2. Literal
정수
- 10 (int)
- 10l (long)
- 10L (long)
실수
- 3.14F (float)
- 3.14f (float)
- 3.14 (double)
문자
- 0xAC00, '\uAC00' (실제 저장되는 값을 명시할 수 있으나 바람직하지 않다)
- '가' (한글 '가'에 해당하는 unicode 값)
ex) char c = '가' ;
ex)
boolean b ;
b = 0 ; (X)
b = 1 ; (X)
b = true/false ; (O)
☆ 문자열
System.out.println(b6 + " , " + b7 + " , " + b8);
이런식으로 출력하면 각각의 문자객체가 만들어져서 연산이 이루어져 퍼포먼스가 떨어진다.
따라서 자주 사용되는 문자열 연산에는 append를 사용한다.
☆ 변수명
내부적으로 unicode를 사용하기때문에 모든 언어를 자유롭게 변수명(inner class name)으로 사용할 수 있다.
but. Top level의 class는 영어를 사용한다.
☆ 약자
internationalization : i18n
Localization : L10n
☆ new line
windows : 0D(carragereturn) 0A(line feed)
linux : 0A(line feed)
따라서 windows와 linux의 문서가 서로 다름으로 인해 ftp 전송시 ASCII 전송을 하면 자동으로 변환을 한다.
☆ 변수의 메모리 사용
Stack 영역
- 메소드 내에 선언된 변수 (Local 변수)
Heap 영역
- instance : new 명령에 의해 준비되는 메모리
Stomg Pool
- "홍길동" : 상수 문자열 선언으로 준비되는 메모리
- 중복되지 않는다,
- 메모리 활용성 좋다.
class / static
- loading 되는 클래스
- static 변수
☆ 연산
모든 연산은 같은 Data type 끼리만 가능하다.
ex) byte * int ==> JVM이 내부적으로 적절히 Datatype을 변환하여 연산 (implicit type conversion)
※ byte가 int로 바뀌는 것이 아니라 임시 int공간을 만들어서 byte값을 넣어서 연산하는 것.
implicit type conversion의 특징
- 순서 : byte, short -> int -> long -> float -> double
ex) 5 / 2 결과의 Datatype은 이미 int이다. 연산 전에 미리 float로 변환해야 결과도 변환되어 나타난다.
explicit type conversion
- 개발자가 명시적으로(명령문을 사용해서) 형변환 : Type casting
ex) byte b1 = 10 ;
byte b2 = 20 ;
byte r = (byte) (b1 + b2) ;
※ Type casting에서의 주의사항 : 확실할 때 사용
ex)
동물 p = new 소() ;
소 p2 = (소) p ; // OK!
동물 p = new 말() ;
소 p2 = (소) p ; // OK. but! runtime시 예상치 못한 결과가 나타난다.
☆ 연산의 우선순위
ex1) 자바와 C의 연산 우선순위 차이로 같은 소스에서 다른 결과가 나타난다.
int a = 10 ;
int s = a++ + a++ * a++ ;
System.out.println(s) ;
자바 : 10 + 11 * 12 = 142 // 이후 a 값은 13이 된다.
C : 10 + 10 * 10 = 110 // 이후 a 값은 11, 12, 13이 된다.
ex2)
a = 10 ;
a = a++ ;
System.out.println("a = " + a) ;
a = 10 ;
a = ++a ;
System.out.println("a = " + a) ;
// 결과
a = 10
a = 11
☆ 효율 연산 & 비효율 연산
&, | 는 연산의 결과를 예측하지 않고 모든 연산 수행
boolean r = false;
boolean b2 = false;
boolean s = b2 & (r = true);
System.out.println("s = " + s);
System.out.println("r = " + r);
// s = false
// r = true ;
&&, || 는 앞의 값으로 결과 값이 예측될 때 연산을 모두 수행하지 않는다. (&& 는 false, ||는 true)
r = false;
b2 = false;
s = b2 && (r = true);
--------- 수행하지 않는다.
System.out.println("s = " + s);
System.out.println("r = " + r);
// s = false ;
// r = false ;
☆ bit 연산
>> : bit를 오른쪽으로 이동한다.
- 양수의 경우 부족한 왼쪽 공간을 0으로 채운다.
- 음수의 경우 부족한 왼쪽 공간을 1로 채운다.
>>> : bit를 오른쪽으로 이동,
- >>와 다른 점 : 부족한 왼쪽 공간을 무조건 0으로 채운다.
<< : bit를 왼쪽으로 이동, 오른쪽 부분은 0으로 채운다.
- 한 bit 이동시 2배씩 값이 증가한다. 따라서 *2, *4의 대용으로 사용할 수 있다.
☆ 조건문 (switch)
/* << 조건문 : switch >>
* switch(식) {
* case 상수식1: 문장1
* break;
* case 상수식2: 문장2
* break;
* case 상수식3: 문장3
* break;
* default: 문장0
* }
*
* : '식'의 결과값이 '상수식1' 이면 '문장1'을 수행하고 'break'문은 switch문을 빠져나간다.
* '식'의 결과값이 '상수식2' 이면 '문장2'을 수행하고 'break'문은 switch문을 빠져나간다.
* '식'의 결과값이 '상수식3' 이면 '문장3'을 수행하고 'break'문은 switch문을 빠져나간다.
* 만약, '식'의 결과값에 해당하는 경우가 없다면 'default:' 의 '문장0' 를 실행한다.
*
* - '식' 과 '상수식' 에는 int 형 값만 올 수 있다.
*/
예외)
final int b = 30 ;
const int c = 40 ; // b, c는 변수이나 final, const 변수는 상수로 취급한다.
※ final 변수는 한번 값을 지정하면 값이 바뀌지 않는다. 선언 후 나중에 값을 지정할 수 있다.
☆ 중첩된 반복문에서의 break
// label의 사용 과 break문
AAA:
{
for(int i = 1; i < 10; i++) {
System.out.println("구구단 " + i + " 단");
for(int j = 1; j < 10; j++){
if(i > 5)
break AAA;
System.out.println(i + " * " + j + " = " + i * j);
}
}
System.out.println("반복문 끝");
}
☆ 중복된 반복문에서의 continue
// continue 문에 '레이블'명을 명시하게 되면, 지정된 레이블로 가서
// 실행을 계속한다.
AAA:
for(int i = 1; i < 10; i++) {
for(int j = 1; j < 10; j++) {
if(j == 5)
continue AAA;
System.out.println(i + " * " + j + " = " + i * j);;
}
System.out.println("*************************************");
}
★ 방법론
갑작스레 삼천포로 빠지나 했더니만 그동안 궁금했던 방법론을 알려주었다.
Unified Process <-- Gogo!
1. Primitive Data type
정수
- byte (1)
- short (2)
- int (4)
- long (8)
실수
- float (4)
- double (8)
문자
- char (2) ; unicode
참/거짓
- boolean (1)
2. Literal
정수
- 10 (int)
- 10l (long)
- 10L (long)
실수
- 3.14F (float)
- 3.14f (float)
- 3.14 (double)
문자
- 0xAC00, '\uAC00' (실제 저장되는 값을 명시할 수 있으나 바람직하지 않다)
- '가' (한글 '가'에 해당하는 unicode 값)
ex) char c = '가' ;
ex)
boolean b ;
b = 0 ; (X)
b = 1 ; (X)
b = true/false ; (O)
☆ 문자열
System.out.println(b6 + " , " + b7 + " , " + b8);
이런식으로 출력하면 각각의 문자객체가 만들어져서 연산이 이루어져 퍼포먼스가 떨어진다.
따라서 자주 사용되는 문자열 연산에는 append를 사용한다.
☆ 변수명
내부적으로 unicode를 사용하기때문에 모든 언어를 자유롭게 변수명(inner class name)으로 사용할 수 있다.
but. Top level의 class는 영어를 사용한다.
☆ 약자
internationalization : i18n
Localization : L10n
☆ new line
windows : 0D(carragereturn) 0A(line feed)
linux : 0A(line feed)
따라서 windows와 linux의 문서가 서로 다름으로 인해 ftp 전송시 ASCII 전송을 하면 자동으로 변환을 한다.
☆ 변수의 메모리 사용
Stack 영역
- 메소드 내에 선언된 변수 (Local 변수)
Heap 영역
- instance : new 명령에 의해 준비되는 메모리
Stomg Pool
- "홍길동" : 상수 문자열 선언으로 준비되는 메모리
- 중복되지 않는다,
- 메모리 활용성 좋다.
class / static
- loading 되는 클래스
- static 변수
☆ 연산
모든 연산은 같은 Data type 끼리만 가능하다.
ex) byte * int ==> JVM이 내부적으로 적절히 Datatype을 변환하여 연산 (implicit type conversion)
※ byte가 int로 바뀌는 것이 아니라 임시 int공간을 만들어서 byte값을 넣어서 연산하는 것.
implicit type conversion의 특징
- 순서 : byte, short -> int -> long -> float -> double
ex) 5 / 2 결과의 Datatype은 이미 int이다. 연산 전에 미리 float로 변환해야 결과도 변환되어 나타난다.
explicit type conversion
- 개발자가 명시적으로(명령문을 사용해서) 형변환 : Type casting
ex) byte b1 = 10 ;
byte b2 = 20 ;
byte r = (byte) (b1 + b2) ;
※ Type casting에서의 주의사항 : 확실할 때 사용
ex)
동물 p = new 소() ;
소 p2 = (소) p ; // OK!
동물 p = new 말() ;
소 p2 = (소) p ; // OK. but! runtime시 예상치 못한 결과가 나타난다.
☆ 연산의 우선순위
ex1) 자바와 C의 연산 우선순위 차이로 같은 소스에서 다른 결과가 나타난다.
int a = 10 ;
int s = a++ + a++ * a++ ;
System.out.println(s) ;
자바 : 10 + 11 * 12 = 142 // 이후 a 값은 13이 된다.
C : 10 + 10 * 10 = 110 // 이후 a 값은 11, 12, 13이 된다.
ex2)
a = 10 ;
a = a++ ;
System.out.println("a = " + a) ;
a = 10 ;
a = ++a ;
System.out.println("a = " + a) ;
// 결과
a = 10
a = 11
☆ 효율 연산 & 비효율 연산
&, | 는 연산의 결과를 예측하지 않고 모든 연산 수행
boolean r = false;
boolean b2 = false;
boolean s = b2 & (r = true);
System.out.println("s = " + s);
System.out.println("r = " + r);
// s = false
// r = true ;
&&, || 는 앞의 값으로 결과 값이 예측될 때 연산을 모두 수행하지 않는다. (&& 는 false, ||는 true)
r = false;
b2 = false;
s = b2 && (r = true);
--------- 수행하지 않는다.
System.out.println("s = " + s);
System.out.println("r = " + r);
// s = false ;
// r = false ;
☆ bit 연산
>> : bit를 오른쪽으로 이동한다.
- 양수의 경우 부족한 왼쪽 공간을 0으로 채운다.
- 음수의 경우 부족한 왼쪽 공간을 1로 채운다.
>>> : bit를 오른쪽으로 이동,
- >>와 다른 점 : 부족한 왼쪽 공간을 무조건 0으로 채운다.
<< : bit를 왼쪽으로 이동, 오른쪽 부분은 0으로 채운다.
- 한 bit 이동시 2배씩 값이 증가한다. 따라서 *2, *4의 대용으로 사용할 수 있다.
☆ 조건문 (switch)
/* << 조건문 : switch >>
* switch(식) {
* case 상수식1: 문장1
* break;
* case 상수식2: 문장2
* break;
* case 상수식3: 문장3
* break;
* default: 문장0
* }
*
* : '식'의 결과값이 '상수식1' 이면 '문장1'을 수행하고 'break'문은 switch문을 빠져나간다.
* '식'의 결과값이 '상수식2' 이면 '문장2'을 수행하고 'break'문은 switch문을 빠져나간다.
* '식'의 결과값이 '상수식3' 이면 '문장3'을 수행하고 'break'문은 switch문을 빠져나간다.
* 만약, '식'의 결과값에 해당하는 경우가 없다면 'default:' 의 '문장0' 를 실행한다.
*
* - '식' 과 '상수식' 에는 int 형 값만 올 수 있다.
*/
예외)
final int b = 30 ;
const int c = 40 ; // b, c는 변수이나 final, const 변수는 상수로 취급한다.
※ final 변수는 한번 값을 지정하면 값이 바뀌지 않는다. 선언 후 나중에 값을 지정할 수 있다.
☆ 중첩된 반복문에서의 break
// label의 사용 과 break문
AAA:
{
for(int i = 1; i < 10; i++) {
System.out.println("구구단 " + i + " 단");
for(int j = 1; j < 10; j++){
if(i > 5)
break AAA;
System.out.println(i + " * " + j + " = " + i * j);
}
}
System.out.println("반복문 끝");
}
☆ 중복된 반복문에서의 continue
// continue 문에 '레이블'명을 명시하게 되면, 지정된 레이블로 가서
// 실행을 계속한다.
AAA:
for(int i = 1; i < 10; i++) {
for(int j = 1; j < 10; j++) {
if(j == 5)
continue AAA;
System.out.println(i + " * " + j + " = " + i * j);;
}
System.out.println("*************************************");
}
★ 방법론
갑작스레 삼천포로 빠지나 했더니만 그동안 궁금했던 방법론을 알려주었다.
Unified Process <-- Gogo!
이 글과 관련있는 글을 자동검색한 결과입니다 [?]
- character type .. by 좋아좋아
- ALU가 정확할까? FPU가 정확할까? by 펭귄
- [펌] How to fast casting float->int by Sweeper
- Hungarian Notation (헝가리안표기법) by 젠틀리우스
- 나선형 배열 출력 문제 Spiral Array by 정상혁



