2013년 8월 2일 금요일

2013-08-02 [1강-JAVA기초] 계산기 프로그램 예제, 형상관리 프로그램, JAVA 프로그램 메모리구조

1.계산기 프로그램에서의 JAVA 문법설명

import 문장 선언 시 *를 사용하기 보다는 가능한 정확하게 선언한다.
ex) import java.util.Scanner;

로컬변수
- 메서드 및 블럭 안에 선언된 변수입니다.
- 해당 블럭 내에서만 사용 가능합니다.
- 블럭 안에 선언된 변수는 블럭 밖의 메서드 내에서는 사용이 가능합니다.
- 메서드 안에 선언된 모든 로컬 변수는 다른 메서드에서 사용 불가능합니다.
int result = 0;

클래스 변수
- 클래스에 static 으로 선언된 변수입니다.
- 클래스가 메모리에 로딩될 때 준비됩니다.
- 클래스의 모든 메서드가 접근이 가능합니다.
- 만약 해당 변수가 public, (default), protected로 공개되었다면,
- 그 조건에 맞추어 다른 클래스에서 접근할 수 있습니다.
ex) private static int v1;

static 블럭
- 클래스가 로딩되고 난 후 사용되기 전에 필요한 값을 준비하는 블럭입니다.
- 스태틱 블럭에서는 스태틱 변수와 스태틱 메서드만 사용가능. 인스턴스 변수/메서드 접근  불가능합니다.
- 클래스가 로딩되고 난 후 즉시 딱 한 번 이 블럭을 수행합니다.
ex) 
static {
scanner = new Scanner(System.in);
}

switch~case
JDK 1.6.x 이하에서는 op의 값은 4바이트 정수값만 가능합니다 (char,short,int)
JDK 1.7.x 부터 op는 String도 가능합니다
ex) 
switch(op) { case "+":  ...}

Refactoring
: replace temp with query
- 한 번 밖에 사용되지 않는 임시 변수는 직접 메서드 호출로 대체합니다.

ex)
//boolean yes = true;
do {
inputForm();
compute();
outputResult();
//yes = promptContinue();
} while(/*yes*/promptContinue());

->주석처리한 부분이 한 번 밖에 사용되지 않는 임시변수입니다.

클래스 이름 명명법
- 역할 명을 부여합니다.
- 명사로 작성합니다.

메서드 이름 명명법
- 소속 역할을 수행하는데 필요한 기능명을 부여합니다.
- 일을 시키는 형태로, 주로 동사로 시작합니다.

인스턴스 변수
개별적으로 관리되는 변수입니다.
Heap 영역에 존재합니다.
new 라는 명령어로 인스턴스 변수를 Heap에 만들 수 있습니다.
ex) new Calcualtor();


QName(fully-qualified name)
Calculator ==> 클래스 이름
net.bitacademy.java41.step03.Calculator 
==> 패키지명 + 클래스명 = fully-qualified name = QName

인스턴스 변수를 만들자
계산기로 두개의 결과를 처리하는 프로그램을 만드려고 합니다
중간 계산결과를 보관하기 위해 클래스 변수를 사용하면 병행 계산이 불가해집니다.
중간 계산 결과를 개별적으로 관리하기 방안이 필요해집니다.
==> 역할을 수행하는 동안 사용되는 값을 개별화 시키는 기법이 필요합니다.
==> 방법은 인스턴스화를 하는것입니다.
==> 개별적으로 관리되어야 할 값은 인스턴스 변수에 저장해야 합니다.
==> 인스턴스 변수 만들기는 어떻게? static 을 빼십시오!
Calculator의 인스턴스 변수를 두 개 준비합니다.

stack 메모리 영역
 - 메서드에서 만드는 로컬 변수를 저장
 - 메서드 호출이 끝나면 그 메서드를 위해 만들었던 모든 변수를 삭제.
Heap 메모리 영역
 - 인스턴스 변수를 저장

"Calculator c1 = new Calculator();" 문장의 해석!
JVM에게 요청합니다. Calculator 클래스를 확인하여 인스턴스 변수가 있다면 해당 변수를 Heap 영역에 준비하십시오.
- 인스턴스 생성!
- 인스턴스 변수가 시작되는 바이트의 주소를 리턴합니다.
- c1 변수는 인스턴스의 시작 주소를 저장합니다. 주소 변수 또는 포인터 변수라고 할 수 있   습니다.

인스턴스 메서드
- static 붙지 않는다.
- 호출할 때 반드시 인스턴스 주소를 앞에 붙여야 한다.
ex) c1.compute(...)


3. 형상관리 프로그램

- 소프트웨어 변경관리를 하는 프로그램입니다.(일명 버전관리툴)
- 사용하게 된 이유? S/W 규모가 커지면서 1인개발자에서 多인개발자로 프로젝트가 커지면    서 소프트웨어를 보다 체계적으로 변경관리하기 위한 system의 필요에 의해 만들어졌습      니다.

대표적인 프로그램의 종류


대표적으로 CVS의 내부 그림입니다.

① 처음에 Client1(프로젝트 생성자)이 소스를 서버에 올립니다.(share)
② 프로젝트 개발자들이 소스를 받습니다(checkout)
③ Client2가 수정사항이 있으면 서버에 commit을 합니다.
④ 그리고 Client1은 update를 받습니다.
⑤ Client3도 수정사항이 있으면 서버에 commit하는 데 Client2가 commit한 값과 같으면 충돌이 일어나면서 commit이 실패하게 됩니다. 그래서 (서버소스 + C소스) 를 하여 Merging과정을 거친 후 commit해야합니다.


<SVN> 변경된 것만 관리합니다. 전체를 업데이트 할 필요없기에 용량면에서 유리합니다.
<GIT> 서버에 있는 것을 모든 서버에 복제합니다.


4. SVN을 이클립스에 적용해보자


①이클립스의 MarketPlace에서 subversive를 설치합니다.




②SVN을 이용할 서버주소를 적습니다.



 ②SVN Repositories를 표시합니다.






 ③ 서버로부터 정보를 갱신하고 싶을 때 update를 이용합니다.





5. 프로그램 메모리 구조



- JVM자바가상머신(머신은 외국에서 컴퓨터의 의미)이 컴퓨터의 Ram의 한 영역을 차지하여 위와 같이 프로그램의 메모리를 차지합니다.

계산기 프로그램 내부 실행순서

- 위의 그림을 참고합니다.
 1. java -classpath .... net.bitacademy.java41.step05.CalcTest
 2. CalcTest.class 파일을 Method Area 영역에 로딩
 3. 클래스 로딩
   1) 클래스 파일이 유효한지 검사
   2) static 변수 준비.
   3) static 블럭 수행
 4. main() 메서드 호출
 5. Stack 영역에 main() 메서드의 로컬 변수를 준비
 6. main() 메서드의 명령어 실행 중 Calculator.init() 호출문을 만나면 Calculator 클래스 로딩

댓글 없음:

댓글 쓰기