중요한 덤프 2가지
1. 최신덤프 (2006년 11월자)
2. Test King 덤프
3. 우그필 덤프(고득점)
2~3가지 반복.
ch. I
자바의 핵심 단위 class
class Test {
member variable(변수) : 항상 변하는 값(특징, 성격)이 저장되는 공간
member method(기능) : 해당 클래스를 통해서 실행되는 행위
}
위의 Test 는 class의 Identifier(식별자)
class Person {
// Data Type + 변수명
String name = "송윤아";
int age = 29;
String address = "방배동";
public void getInfo() {
System.out.println(name + " " + age); // 콘솔창에 출력
}
}
class Home {
}
j2sdk
1. 설치
2. 환경변수 설정
3. 툴(이클립스가 대세) 설치
개체지향
1. 유지보수성↑
2. 확장성↑
KeyWord = Reserved Word
main() method -> 실행을 위한 method (main이 있으면 실행이 되고 없으면 안된다)
모든 클래스가 가질 수 있는 기능이 수행되기 위해서는 main 함수가 와야한다.
컴파일러가 하는일
1. syntax checking
★★
2. type checking
jdk -> Java Development Kit
★★
jre -> Java Runtime Environment
jre/lib/rt.jar 에 패키지 개념으로 들어있다.
패키지 = 폴더
-> 유사한 기능을 가지는 클래스 끼리 묶었다
가장 기본적인 기능들을 가지는 패키지 -> "lang"
★
"lang, util"
<Java Application의 내부실행과정>
③④⑤⑥⑦
Test.java (소스코드 작성 및 저장) -> ①Compile -> Test.class(byte code) -> ②Interpreter(Runtime)
└──────────────── JVM에서 실행 ─────────────────┘
<Interpreting 과정>
[class file Loader] -> [Byte Code Verifier](타겟 플랫폼에 적합한 코드인지 확인) -> Interpreter(JIT Code Generater, Hot Spot)
※ jdk 1.1 버전에서는 Byte Code 한줄씩 읽고 해석해서 속도 문제가 심각했다
※ jdk 1.2 버전에서는 JIT Code Generator 방식으로 묶음으로 읽고 해석해서 속도 향상
※ jdk 1.3 버전에서는 Hot Spot 방식으로 자주 쓰이는 코드를 메모리에 적재시켜 놓음
Test.class
Vertical Platform
※ JVM : Byte Code Interpreter
JVM에서만 돌아가기 때문에 Byte Code로 만들어 놓는다
각각의 OS에 JVM만 있으면 Platform Independence
Write Once Run Anywhere!
ch. II
Dog d = new Dog(); 라고 하면, d에는 Dog의 주소가 들어간다.
Dog가 메모리에 올라간다. 즉, Dog의 멤버(attribute, method)가 올라간다.
d.setWeight();
";" 는 statement의 종결을 의미. 그리고 Calling을 의미한다.
local variable = temporay variable = automatically variable
work method. <- calling method 가 없으면 호출이 안된다
<Access Modifier>
private : 같은 클래스 내
[default] or [friendly] : 아무것도 붙이지 않은 경우, 같은 폴더내 접근 허용
protected : default와 같으나 두 클래스가 상속관계에 있을때 public과 동일
public : 어디에서든 접근 허용
<Constructor>
1. Construtor는 객체가 생성될 때마다 호출
2. Default Constructor는 컴파일러가 자동으로 넣어준다
Default Constructor는 생성자 body가 비어있는 생성자
★★★
3. Constuctor의 역할은 멤버 변수 초기화 -> 생성자에서 멤버 초기화를 하는 이유는 객체 생성시 바로 속성을 줄 수 있다
4. Explicitly Constructor는 Argument가 하나 이상인 것
5. Explicitly Constructor가 하나라도 있으면 컴파일러가 Default Constructor를 안 넣어준다
6. Access Modifier를 아무것도 붙이지 않으면 default이다
7. 생성자의 Access Modifier는 Class의 Access Modifier와 동일하게 한다
<Package>
1. package란 유사한 기능을 가진 클래스들의 묶음이다
2.top_level package와 sub_level package
┌ top_level package와 sub_level package는 dot(.)으로 구분
└ ex) java.util.Vector
<top> <sub> <클래스이름>
3. source code에서 comment를 제외하고 package 보다 위에 오는 것은 없다.
4. package 선언은 lower로 해주는 것이 관례이다
ch. III
/** Documentation Comment */
Identifier Rule (P.3-7)
1. A~Z, a-z, 모두 가능하다
2. 숫자는 두번째 문자부터 올 수 있다
3. 키워드, 특수문자는 사용할 수 없다
4. 자바는 대소문자에 Sensitive 하다
5. $, _ 는 Identifier로서 가능하다
6. 길이에 제약 없다
ex) 1. void_simple
2. _System
3. $$$
4. 4Season
5. MAXIM
<Data Type>
*정수형 기본값 0
*문자형 기본값 -> '\u0000'
*논리형 기본값 -> false
<Storage, numeric>
-2^(n-1) ~ 2^(n-1) - 1
n: 비트수
<Default Data Type>
0.7로 선언했을때 double로 지정된다.
float salary = 350,000; <- compilation error
350,000 은 기본적으로 double이 되므로 에러가 난다. (flaot: 32bit / double : 64bit)
float salrary = 350,000.0f;
double salary = 350,000.0f; <- 자동형변환, 350,000.0f이 double로 확장된다
★★★ type casting
float salary = (float)350,000.0d;
<Default_value>
int age; <- Member Variable 일때 기본값이 들어간다.
<Memory Allocation>
public class MyDate {
private int year = 2000;
private int month = 1;
private int day = 1;
public MyDate(int day, int month, int year) {
this.day = day;
this.month = month;
this.year = year;
}
//로컬변수와 멤버변수의 이름이 같을때 this 키워드로 구분한다
}
public class MyTest {
public static void main(String args[]) {
MyData today = new MyData(22, 7, 1964);
}
}
stack : today를 참조할 수 있는 값(멤버변수가 heap에 적재된 주소)을 가진다
heap : 클래스 객체의 멤버, 기본값을 가진다.
1. 묵시적 초기화 (0, 0, 0) (절대로 생략될 수 없다)
2. 명시적 초기화(프로그래머에 의한 초기화) (1, 1, 2000)
3. 생성자 구동에 의한 초기화 (22, 7, 1964)
-> 비로소 위치값을 가진다
1일차 과제:
Shift 연산
if ~ else / switch
for / while / do~while
상속 / interface
[SL-275 교재 말고 다른 책 or 사이트 참고]