[기초] 자바 개요, JVM 메모리 , 자료형,연산자,제어문

2010. 1. 31. 09:36Java


■ JAVA 개요 및 특징
 - 자바의 주요 개념 및 특성(JVM)
   자바의 분류
    - J2SE : Java2 Standard Edition
    - J2EE : Java2 Enterprise Edition
    - J2ME : Java2 Micro Edition

■ JVM (Java Virtual Machine) 의 메모리 , 가상머신
 - 인터프리트 용도 , 실행용도
 - 스택 영역(Runtime stack) 실행시에 사용하는 메모리영역, 초기화가 자동화 되지 않다.퍼스트 인,라스트 아웃   
 - 힙 영역(Garbage Collection Heap) 동적 메모리 할당 영역 
 - 상수 영역(Constant & Code Segment) 상수 데이터 및 static 데이터 할당 영역
 - 레지스터 영역(PRocess Regdister) 프로세서 실행 관련 메모리 할당 영역

※ 메서드 내부 선언 변수(지역변수)는 스택영역에 메모리 할당 (초기화 선행)
    Method 내에서만 사용되고 소멸되는 변수, 메서드 종료 시점에서 JVM에 의해 메모리 제거
   ,클래스 내부 선언 변수(Member Field)는 힙 영역에 메모리 할당 되기 때문에 자동 초기화 
   클래스 내부에서 어느 위치든 사용 가능한 변수. 접근 제한자에 따라 다른 클래스 나 상속 관계에서도 사용 가능
    Garbage Collection에 의해 메모리 제거

■ 자바에서의 약속
 사용자 정의 명칭(Class , Method , Field)
 - 첫 글자는 '_' ,'$', 영문 대,소문자 (한글 가능) ... 필드명으로 한글을 사용할수 있겠죠
 - 글자수에 제한이 없다.
 - 공백문자 및 특수 문자는 사용 불가능하다!!!!!
 - 숫자는 첫글자가 아닐때는 사용 가능하다.
 - 예약어 사용 불가!!!!
 - 기타 단순 약속(대,소문자의 규칙)
   Class의 첫번째 문자는 대문자
   method, Field의 첫번째 문자는 소문자
   Field의 상수는 전체 대문자로 해주는 것이 좋죠 ^^
   합성어 중간 단어 앞은 대문자!!!

■ 자바의 주석처리
주석 처리 : 프로그램 실행에 영향을 미치지 않는 설명글
C언어 주석 : /* ~ */ -여러 줄 주석
C++주석 : // -한줄 주석
JAVA DOC 주석 : /** ~ */ - Doc를 위한 주석

■ 상수 와 변수 그리고 자료형 개념
 상수 : 고유한 Data의 값으로 항상 동일한 의미를 가지는 개체
 변수 : 상수를 저장하거나 보관하는 장소
 변수명 : 변수에 대한 특정 이름
 자료형 : 변수의 크기를 규정지어 미리 만들어 둔 크기의 약속


■ 자바의 기본 자료형과 String 클래스 (42억 byte에 메모리 할당이 됨.)

 bit : 0과 1를 표시하는 최소 단위!!!(저급 언어)
 1bit --> 2가지 의 경우의 수
 2bit --> 4가지 의 경우의 수
 3bit --> 000,001,010,011,100,101,110,111  8가지의 경우수
 4bit --> 16가지
 5bit --> 32가지
 6bit --> 64
 7bit --> 128
 8bit --> 256 (최소 단위, 2의 7승) ==> 1 byte

 (고급 언어)
 논리형 자료형 : boolean (true,false) - 형변환 불가!!!!
 정수형 자료형 :
 - byte : 1byte(-128 ~ 127)  컴파일에러
 8bit
    0000 0000   -> 1byte
     (2진수 -> 10진수 , 0 )
    0000 0001
     (2진수 -> 10진수 , 1 )
    0000 0010
     (2진수 -> 10진수 , 2 )
    0000 0011
     (2진수 -> 10진수 , 3 )
    0111 1111
     (2진수 -> 10진수 , 127)
    1000 0000
     (2진수 -> 10진수 , 128  -128)
    1111 1110
     (2진수 -> 10진수 , 254  -2)
    1111 1111
     (2진수 -> 10진수 , 255  -1)
    위의 맨 앞자리를 음수,양수 로 구분한다.
     0000 0000 으로 다시 돌고 돈다!!!

 - short : 2byte(-32768 ~ 32767)
    2의 15승 ~ 2의 15 -1(왜, 0이 양수쪽에 포함되어 있기 때문이지)
 - char : 2byte (0 ~65535) : 문자형 (유니코드 , 1byte는 아스키 코드)
 - int : 4byte (-2,147,483,648  ~ 2,147,483,647)
   기본 자료형(자동으로 숫자는 integer로 된다)
 - long : 8byte ( -922경 ~ 922경)
 -2의 63승  ~ 2의 63승 -1

실수형 자료형
 - float : 4byte  
 - double : 8byte (기본 자료형)

클래스 자료형
- String 클래스 : 문자열 저장
  ex)
  String str = new String("Java");
  String str= "Java";


■ 아스키 제어문자 및 문자
0 '\0',null
8 '\b'
9 '\t'
10 '\n'
13 '\r' --아래와 처음으로 돌아가 : 엔터키는 '\r\n'
27 esc
48 ~ 57 '0' ~'9'
65 ~ 90 'A' ~ 'Z'
97 ~ 122 'a' ~ 'z'

■ Promotion 과 Casting
 형 변환의 의미
 - 상수의 값을 크기가 다른 변수에 담는 작업
 Promotion(큰 공간) : 자동 형 변환
 - 작은 공간의 변수 값을 큰 공간의 변수로 이동
 Casting(작은 공간) : 강제 형 변환
 - 큰 공간의 변수 값을 작은 공간의 변수로 이동
 - 데이터 손실 고려

 * boolean 형은 형 변환이 불가 하다!!!(다시한번 기억하시길 바랍니다.)


■ Wrapper라 불리는 클래스들
 - 자료의 효율적인 관리 와  은닉화 와 객체화
 - 종류 :  Boolean ,Byte , Short , Character , Integer , Long ,Float , Double
 - Documentation API  참고 활용


■  연산자의 개념
 - 피 연산자(상수 나 상수를 저장하고 있는 변수)들 사이의 계산방식을 특정한 기호로 표시 (+,-,*,/,%)
 - 연산자 우선 순위(필수 암기??)
  - 최우선 연산자 .,[],() -> 단항 연산자 -> 산술 연산자 -> 쉬프트 연산자 -> 관계 연산자 -> 비트 연산자
    -> 논리 연산자 -> 삼항 연산자 -> 배정 대입 연산자 -> 증감 후위 연산자 -> 순차 연산자

1 . 최우선 연산자 :   "." , "[]" , "()"
2. 단항 연산자(항이 하나로 구성되어 있다!!!!)
  - 논리 부정 과 비트 부정  : "!" , "~"   (!는 논리적인 부정에만 사용된다.)
 "~" 비트 부정 : 변수 *(-1) -1
  ex) ~4 = -5 이다.
 - 부호 연산 : "+/-"
 - 증감 전위 연산 : "++/--"
   자기 자신의 값을 1씩 증/감
   전위형는 상위 순위, 후위형 하위 순위 입니다.
 - 형 변환 연산 : "(cast 자료형)"

 - Type 비교 : "instanceof"
 Exam_07 ex = new Exam_07();
 boolean bool = ex instanceof Object;

 3. 산술 연산자 : 연산 결과의 자료형
 - "*","/","%" : 정수 연산 시 주의 ( 1/2 는 0 이 나올꺼야 ^^;;)
 - "+" , "-"
사칙연산 시에 integer보다 작은 자료형의 결과값은 int 형으로 리턴된다.
사칙연산시에 integer보다 큰 자료형의 결과값은 큰 자료형 형태로 리턴된다.
(단 정수 외에 실수에서는 실수를 쫒아 가죠~~)

4.  쉬프트 연산자 : 특정 비트수 만큼 이동시에 사용된다.
 한글 입력시 사용되는데,  16bit 속에 5bit씩 나눠서 초성,중성,종성 을 처리하고 , 나머지 1비트는 속성값.

 - "<<" : left shift 연산자
 1 << 3 = 8    => 1 * 2의3승

0000 0001  (앞의 3개의 0은 버려!!)
0000 1 
0000 1000 (뒤의 3개의 0은 채워)

 - ">>" : right shift 연산자

 8 >> 3 = 1
  => 8 * 1/2의3승

0000 1000 (뒤의 3개의 0은 버려!!)
   0 0001 
0000 0001 (앞의 3개의 0은 채워)


 - ">>>" : unsigned right shift 연산자
 : 앞자리를 0으로 체워라~~~0이던 1이던 상관 말고~~~!!!


5. 관계 연산자(boolean 에 결과값이나타는경우)
 -비교 관계 : > , < , >= , >=
 -항등 관계 : == , !=
비트 연산자 : 논리에 사용 가능 ("&","|")
 - "&" -and , "|" - or ,  "^" - exclusive or 배타적
 2진 비트 데이터로 바꿔야 한다.
 양쪽 비트가 모두 참이면 true
 양쪽 비트가 모두 거짓이면 false
 양쪽 비트가 서로 다르면 true
 0은 거짓, 1은 참이다.

 4 & 7
  0000 0100 
& 0000 0111
-----------------
  0000 0100 = 4

  0000 0100 
| 0000 0111
-----------------
  0000 0111 = 7

  0000 0100 
^ 0000 0111
-----------------
  0000 0011 = 3

6. 논리 연산자 :  "&&" - and , "||" -or
양쪽 논리를 가지고 논하고 , 앞에서 확인해서 논리가 통과 하면, 뒤에는 보지 않고 패스 한다.
이런 경우 비트 연산자를 쓴다.

6.  삼한 연산자 (if 문의 전신!!!! 두둥!!!)
  - "조건항 ? 항1 : 항2"
 배정 대입 연산자
  - "=" , "*-", "/=" , "%=" , "+=", "-=" , "<<=" , ">>=" , ">>>=" 등
 증감 연산자(후위)
  x--;
  t++;

7.  순차 연산자 (변수 선언할 때만 사용) :   - ","

■  제어문이란?
  - 문장의 흐름은 위->아래, 좌-> 우 의 순이다.
  - 문장의 흐름을 제어하여 예약어 - > 제어문

 if 제어 : 만약 ~ 라면
 1형식 : if(논리 조건문) { 내용부;}
 2형식 : if(논리 조건문){...}else{...}   3항 연산자
 3형식 : if(...){..}else if(...){...}else{...}

■ switch문은 특정 수나 문자에 대한 위치 이동을 제어 특징 , 수치나 문자에 따른 이동의 처리가 if문에 비해 빠르다.   컴파일 시에 위치가 정해진다.

switch(수치 or 문자){
  case 조건수치 or 문자 : 내용부 ; [break;]
  default : 만족하는 case가 없을 때 실행
}

cf) 주민 번호의 비밀 두둥!!!
1 2 3 4 5 6 ~ 1 2 3 4 5 6 7
12 년도수 , 34 월 , 56 일 -
1 성별 (9 or 0 - 1800년대생 9 남성 , 0 여성)
 (1 or 2 - 1900년대생 1 남성 , 2 여성)
 (3 or 4 - 2000년대생 3 남성 , 4 여성)
 (5 or 6 - 외국인 5 남성 , 6 여성)
2  출생지 (0 :서울 , 1: 경기인천,2:강원,3:충북,4:충남,5:전북,6:전남,7:경북,8:경남,9 제주도)
4  구
56 읍면동
7  패리티코드
{(A*2)+(B*3)+(C*4)+(D*5)+(E*6)+(F*7)+(G*8)+(H*9)+(I*2)+(J*3)+(K*4)+(L*5)} ≡ M1 (mod 11)
11-M1 ≡ M (mod10)
(a ≡ b (mod m) 는 a - b = mk (k 는 어떤 정수) 가 성립)

■ loop문 ( 단일 for 제어문 )
 정의 : 동일하거나 유사한 문장을 수치에 의해 반복 제어하는 문
 for(초기화영역;조건부영역;증감부영역){
 반복실행이 될 내용부
 }
 관련 예약어 : continue , break
 continue :  가장 가까이 있는 닫힌 } 로 이동
        break : 그냥 나가버렷!!!

■ 다중 for 제어문
 for(초기화영역;조건부영역;증감부영역){
 반복실행이 될 내용부
  for(초기화영역;조건부영역;증감부영역){
   반복실행이 될 내용부
  }
 반복실행이 될 내용부
 }
관련 예약어 : Label , continue , break

■ while 제어문 : 동일하거나 유사한 문장을 행위에 의해 제어 하는 문
while(논리조건문 or true){
 행위에 의한 반족 실행 내용부
}
관련 예약어: Label , continue, break

■ do ~ while 제어문
정의 : 선 실행 후 조건 비교 반복 제어문
do {
반복 실행 내용부;
}while(논리 조건문);

관련 예약어 : Label , continue, break