SL-275 Day 5

2007. 1. 26. 16:38

<Assertion>
assert (boolean expression) : assertion fails;
expression가 false일때 적용
assert 함수의 인자는 Local Variable을 쓸 수 없다

* public method의 argument check에는 사용할 수 없다. 단 non-public method의 경우는 가능
* Assert가 조건식이 false가 되면 이후 statement는 수행되지 않는다

assert 컴파일 옵션
>javac -java 1.4 $(FileName)
assert 실행 옵션
>java -ea $(FileNameNoExt)

Test King Dump 문제 풀이
A-9, 17, 23, 46, 53, 57, 69, 74

<AWT>
Frame
: DefaultLayout : BorderLayout

Panel
: Resing x
: 독자적 노출 x, 반드시 Frame에 부착되어 노출
: DefaultLayout : FlowLayout

DefaultLayout : Default로 센터
BorderLayout :

<Event Handling 하는 순서>
①GUI 구성
②Source(이벤트가 발생하는 곳)에 Listener를 부착
   button.addActionListener(☆);
③EventHandler를 구현

ActionEvent -> 감지 -> ActionListener(인터페이스)
MouseMotionEvent ->
WindowsEvent

Listener(=ReceptionDesk) -> 발생하는 이벤트 인지
actionPerformed(ActionEvent e); Listener에 의해 내부적인 호출

<IO>
키보드로 입력받은 데이타를 콘솔창으로 출력하는 Pattern
①입력스트림 생성.
InputStreamReader ir = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(ir);
②읽어들인다
String line = br.readLine();
③콘솔창으로 출력
System.out.println(line);

* 스트림은 가상 버퍼에 저장 했다가 한꺼번에 출력한다
* Auto Flush 기능

스트림을 close() 할때 자동으로 flush() 된다
출력이 잘려서 나오면 AutoFlash Enable과 flush() 호출 여부 확인할 것.

FileInputStream

Stream

사용자 삽입 이미지












<Network>
i)client
①Socket 생성
Socket s = new Socket("ip", port);
②Stream생성
InputStream in = s.getInputStream();

ii)Server
①ServerSocket 생성 (ServerSocket은 클라이언트 Socket 접수 창구 역할)
ServerSocket server = new ServerSocket(port);
port range: 0 ~ 65534 (cf. 1 ~ 1024 reserved)
②client가 접속하면 socket을 리턴
Socket s = server.accept();


<차후과정>
SL-285 분산기술(DB연결)
SL-314 (HTTP를 이용한 분산 기술)
EJB(WAS 돌리는 분산 기술)

Posted by 창신다이

SL-275 Day 4

2007. 1. 25. 17:06

** 4일차 예정 교육

String/StringBuffer
<String>
"immutable 문자열 상수" - (변하지 않는)

==/equals()

  String s1 = new String("하바리");
①String s = new String("하바리");
  (s1.equals(s)) -> true 

②String s2 = "하바리";
  String s3 = "하바리";
  (s2 == s3) -> true 

System.out.println(5 + 5 + "하바리");
System.out.println("하바리" + 5 + 5);

※String 과 Non-Stinrg이 결합해서 String이 되는데, 숫자가 먼저오면 연산이 먼저 수행되고,
문자열이 먼저 오면 뒤에 연산이 수행되지 않는다.

<StringBuffer>
자주 변하는 문자열은 tring은 임시객체가 많이 생성되어 StringBuffer가 효율이 높다

** Test King Dump A 풀이
A-103. 135, 136, 137


<CommandLine>
public static void main(String[] args) {
 int grade = args[0];
 if (grade >= 90) System.out.println("A");
 if (grade >= 80 && grade < 90) System.out.println("B");
}
Run-Time에 인자를 받을 수 있도록 하는 메카니즘.
java Test args0 args1, ...
args[0] = args0;
args[1] = args1; 이다.

** Test King Dump 풀이
A-125, B-220

<Math>
바로바로 호출해서 쓰기 위해서 member method를 모두 static으로 선언
★★★
random() Method 호출
Math.random();

<Vector>
Vector v = new Vector(1, 50); // 초기 사이즈 : 1, 한번에 증가되는 사이즈 : 50
array와 다르게 resizing이 가능하다.
1. Object만 들어간다

<Wrapper class>
Primitive Data Type의 값들을 객체로 활용할 수 있도록 해줌.
byte -> Byte
sshort -> Short
int -> Integer
long -> Long
float -> Float
double -> Double
char -> Character
boolean -> Boolean

<Thread>
┌ Process : 실행중인 파일(~.class)
├ Thread : 하나의 Process 내에서 진행되는 세부적인 작업단위
│ ※Process와 Thread의 차이는 Data공유 여부
├ Multi-Tasking : Multi-Processing System(time-sliced방식) - 코드가 별도
└ Multi-Threading : Code, Data 공유(문제점 해결 -> 동기화)

Creating Thread
┌ ①class T extends Thread {
│ -> T t = new T();
└ ②class T implements Runnable {
 -> T t = new T();
    Thread tt = new Thread(t)
 -> public void run() {} 실행되는 Method

1. thread 객체 생성 Thread t = new Thread();
2. start를 P/G가 호출
3. 실행 가능 상태에서 run();을 받고 running 된다

의문점
1. who? JVM내의 Scheduler
2. why? 우선순위(1[low] ~ 5[default] ~ 10[high])에 의해서 호출됨

함수 정의에서 명시적으로 throws를 하는 것은 try ~ catch로 명시적인 처리를 해주면서 써야된다.

sleep : 자신 보다 우선순위가 낮은 쓰레드에게 양보
join : 특정 쓰레드가 수행될때 수행권을 보장받는 메쏘드. 다른 쓰레드가 끼어들지 못하도록...
InterruptedException 으로 감싸서 써야한다

public class MyStack {
 int idx = 0;
 char [] data = new char[6];
 public void push(char c) {
  data[idx] = c;
  idx++;
 }

 public char pop() {
  idx--;
  return data[idx];
 }
}

특정한 쓰레드가 수행을 다 끝내기전에 다른 쓰레드가 수행권을 가져감
->(Solution)동기화처리, Synchronized

i)synchronized(this) {lock을 걸려고 하는 bloack}
ii)return type 앞에 synchronized를 붙인다

<deadlock>
동기화 처리된 2개이상의 thread에서 발생
자신이 설정한 lock은 해제하지 않으면서 상대방이 lock을 해제하기만을 기다리는 영원한 교착상태

wait()
notify()
deadlock을 예방하기 위해서 동기화 처리된 쓰레드에서만 쓸 수 있다

Test King Dump 풀이
A-113, 114(?), 115, 116, 119

i)사용자정의 쓰레드 : ex. run() 함수
ii)데몬 쓰레드 : Demon 에서 호출되는 Thread, ex. main() 함수
setDaemon(true); // 이것을 만나면 main() method 호출함

** 내일 할 내용
<Assertion>

<Stream>

Posted by 창신다이

SL-275 Day 3

2007. 1. 24. 17:07

ch VII.
<Interface>
IS-A Relationship
<<interface>> ◁───── <<interface>>
※기능강화를 위해 사용

<Inner Class>
1. outer class 내부에서 선언
Inner i = new Inner();

2. outer class 바깥에서 선언
Outer o = new Outer();
Outer.Inner i = o.new Inner();

3. outer class 바깥에서 static 멤버 클래스 선언
Outer.Inner i = new Outer.Inner()

** Test King 덤프 A-82, 112 문제

ch IIX.
<Exception>
java.lang.Throwable
[Error(Serious한 손상), Exception(mild한 손상)]

* Throwable
    ┌ Error : Serious한 손상
    └ Exception : mild한 손상
        ┌ Runtime Exception: 컴파일 o, 실행 x(명시적처리x, 코드를 고치면 된다)
        │    ┌ ArithmeticException : 0으로 나눌때
        │    ├ NullPointerException : 생성되지 않은 객체 접근
        │    └ IndexOutOfBoundsException : 배열 범위 벗어날때
        └ IOException: 컴파일x(명시적처리o)

* Exception 처리 방법
①try ~ catch
try {
 // 예외 발생 가능 코드
} catch(IndexOutOfBoundsException e/* 발생한 Exception으로 잡는다*/) {
 // 예외가 잡혔을 때 필요한 코드
 e.printStackTrace();
} finally {
 //예외와 상관없이 무조건 실행할 코드
 // cf. 실행 안되는 경우
        i)System.exit(0);
        ii)Power Off
 iii)try ~ catch 실행 중 또 Exception 발생했을 때
}

sample.
i)예외발생x : try + finally
ii)예외발생o + 잘 잡았다 : catch + finally
iii)예외발생o + 못 잡았다 : finally
iV) return 했을떄 : finally

sample2.
try ~ catch 절 아래 statement가 수행 안될때.
i)못 잡았을때
ii)return될때

②throws
class A {
 public void go() throws ArithmeticException { // Exception을 던지니 go()를 호출한 곳에서 처리해라
  int i = 10, j = 0;                    // 원래 go()를 호출한 곳에서 명시적 처리를 해줘야 한다
  if (j == 0) throw new ArithmeticException();
 }
}

※ this("This is UserException..."); //this의 또 다른 기능 같은 클래스내에 또 다른 생성자 호출

** Exception에 관한 Test King 덤프 문제
A-12, 22, 29, 34(헷갈려 : try~catch 절 다음 statement 수행 여부), 38, 42 (throws 안쓴 예제), 56,
71(에러 발생시 try ~ catch절 무용지물, finally만 수행), 73(Exception 상속), 75(함정 문제),
88(이상), 90(중복 catch),

** Garbage에 관한 Test King 덤프 문제
35, 49, 76(객체 재생성)

<Collection Api> p.9-28
객체를 저장하는 방법론
* Collection : 가장 원시적인 방법으로 객체를 저장(순서x, 중복o)
       ┌ Set : "unique", 중복x, 순서x(기존에 있는 값은 저장x)
       │     ─ HashSet[class]:
       └ List : "ordered",순서o, 중복o(시작점과 끝점을 가지면서 환원형으로 자료 저장)
           ┌ Vector[class] :
           ├ ArrayList[class]
           └ LinkedList[class]

*Map : key - value 쌍으로 저장(순서x, key중복x)
    ─ HashTable[class]
        ─ Properties[class]

import java.util.*;
class SystemProperty {
 public static void main(String[] args) {
  Properties p = System.getProperties();
  Enumeration e = p.propertyNames();
  while (e.hasMoreElements())
  {
   String key = (String)e.nextElement();
   String value = p.getProperty(key);
   System.out.println(key + " : " + value);
  }
 }
}

ListIterator
+ hasPrevious()
+ previous()
양방향 검색

** 4일차 예정 교육

String
StringBuffer

*** 관련  Test King 덤프 문제
A-121(p.9-32)
B-244(natual order : 정렬된것 = SortedXXX), 245(???), 304, 305, 346

<Thread>

<Wrapper Class>

<Assertion>

<IO>

<AWT>

Posted by 창신다이

SL-275 Day2

2007. 1. 23. 17:35

2일차

ch.V Arrays

<Array>
같은 데이터타입을 가지는 여러값들이 하나의 변수를 통해서 한방에 처리되는  것.

★★★ 3단계 문법
※syntax
①선언 -> int[] i; or int i[]; // "int[]" : 데이터 타입 "i": reference variable
 ★선언할때 사이즈를 명시하면 안된다
②생성 -> i = new int[3]; //
 ★ new 사용
 ★ new 다음 []에 size 명시
 new로 메모리 할당시 묵시적 초기화가 이루어진다.
 int[] i = new int[3];
 ★Memory 도식화

사용자 삽입 이미지








③초기화
int[] i = {13, 27, 38}; // ";"은 생성자 호출이라 볼 수 있다

sample.
1. int 타입의 배열 생성(사이즈는 3)  -> int[] arr = new int[3];
2. 각각의 칸에 적당한 값으로 초기화   -> arr[0] = 1; arr[1] = 2; arr[2] = 3;
3. for 문을 이용해서 값들을 콘솔창에 출력 -> for (int i = 0; i < arr.length; i++) System.out.println("arr["+i+"]:"+arr[i]);

ch.VI Class Design
<Inheritance>
 [Sub, Child] class

사용자 삽입 이미지










1. Abstraction(추상화, 일반화)
다양한 Sub Class들 사이에서 공통적인 성질을 추출. 이 공통적인 성질을 일반적으로 갖는 독자적인 모듈을 윗단에 상정하는 것.
 [Super, Parent] Class

사용자 삽입 이미지








상속: 부모가 가진 모든것(member)이 자식에게 물려짐 + 자기자신만의 member 추가
  cf. Constructor는 member가 아니다

ex)
class Manager extends Employee{
 String dept;
}

class Engineer extends Employee {
 String tech;
}

<Polymophism> -> Method Overriding / Method Overloading
부모type으로 자식 객체 생성

Clothes 긴팔T = new Shirt(0, 0, 0);
부모type            자식객체

<Virtual Method Invocation의 원리>
1. Compile Time Type : 부모의 메모스를 호출
2. Runtime Type : 자식의 메소드가 실행
"상속관계의 오버라이딩된 메소드에서만 발생하는 원리"

<Method Overriding의 Rule> p.6-9
0. [전제조건] 반드시 상속관계의 두 클래스 사이에서 일어남
1. Method의 선언부는 모두 일치(리턴타입, 이름, 인자값)
2. More Modifier / Less Exception (부모 보다 자식의 Access Modifier가 More Modifier 이어야 한다)
3. 구현부는...{// } 반드시 달라야 한다
   > 즉 선언부는 같지만 Method의 기능이 달라졌기에 새로운 Method의 재탄생으로 봐야한다
   > "메소드 재정의"

<Overriding의 대표적인 사례>

사용자 삽입 이미지








<Method Overloading>
1. 상속과 전혀 상관없다
2. Method 이름 같다
3. Argument List는 반드시 달라야(순서, 갯수, 타입 중 하나라도)
★★
4. return type 상관없다
"하는일은 같지만 처리하는 데이터를 달리할때"

Class Hierachy
<Object Class>
equals() - 객체가 같은지는 주소값으로 비교
toString() - 기본적으로 생략되어 있다, 그래서 주소값은 문자열로 출력된다

sample.
class 인어공주 extends 여자 implements 물고기

<Constructor> (마무리 - 상속관계에서의 생성자)

<Access Modifier>

<Exceoption>

<swich에 들어올 수 있는 자료형>
byte, short, int, char

<package>

ch.VII
<Interface>
기능중심
다중상속 지원
interface Flyer {
 [public] [static] [final] int x = 10; // public, static, final 기본적으로 생략되어 있음
 [public] [abstract] void fly();  // public, abstract 기본적으로 생략되어 있음
 void land();
 void fly();
}

추상적인 method들의 집합
interface를 상속받는 클래스는 모든 member method를 구현해주어야 한다
interface는 abstract의 set
abstract는 완전한 super 클래스로만 쓴다

구성요소
1. abstact Method
2. Constant

<static>
1. 객체를 생성하기 이전에 Memory에 올라간다
  -> 객체 생성하지않고 바로 사용해도 된다 ex) switchIt(4);  -> public static void switchIt(int x) { }
2. 생성된 객체들이 static Member를 공유
3. ex) static int j = 0; -> local로 선언될 수 없다
4. static Area 에서는 this 사용할 수 없다
5. final : "내가 마지막이야"
  final static 같이 쓴다(순서 바꿔서 static final도 가능) ex) final static int SIZE_MAX = 100; 상수를 지정하는 변수의 이름은 대문자로 한다
  final class : "상속 금지"
  final method : "overriding 금지"

Posted by 창신다이

SL-275 Day1

2007. 1. 22. 16:21

중요한 덤프 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>

사용자 삽입 이미지
※ 표시의 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 사이트 참고]



Posted by 창신다이

BLOG main image
오랫동안 꿈을 그리는 사람은 마침내 그 꿈을 닮아 간다. -앙드레 말로- by 창신다이

공지사항

카테고리

분류 전체보기 (248)
공장이야기 (115)
Education (30)
ITIL (4)
오라클 (10)
Practice Oriented Course fo.. (7)
리버스엔지니어링 (1)
정보보호를 위한 해킹의 이론과 실제 (0)
SCJP (5)
세미나일정 (0)
자격증 (3)
기술사 (0)
회사이야기 (19)
일상 (73)

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

Total :
Today : Yesterday :