2013년 9월 12일 목요일

Java의 예외, 다향성,String 설명

예외 , 다형성, String

1. 예외 처리하기

⑴ 예외 유형
  • java.lang.Throwable 클래스가 모든 예외의 클래스의 부모 클래스임.
  • Error, Exception, RuntimeException 예외 클래스의 세가지 유형

  1. Error 클래스 : 예외 상황으로 부터 회복이 프로그램 내에서는 어렵거나 불가능한 예외상황을 나타내는 예외 클래스의 부모클래스
    ==> OutOfMemoryError, StackOverflowError, AWTError, LinkageError
    ==> 예외처리가 별도로 필요하지 않는다.
  2. Exception 클래스 : 대부분의 프로그램이 처리해야 할 예외 사항
    ==> ClassNotFoundException, IOException, InterruptedException,DataFormatException
    ==> RuntimeException의 자식 클래스들을 제외한 모든 예외 class들은
    반드시 명시적으로 예외 처리 해야 함.
  3. RuntimeException 클래스 : JVM이 정상적으로 실행 도중에 발생할 수 있는 예외들의 부모 클래스임.
    반드시 처리할 필요는 없다.
    ==> IllegalArgumentException, IndexOutOfBoundsException,NullPointerException, SecurityException
    ==> 위 경우 예외가 발생했을 때 예외 구문 처리가 없으면 기본 동작으로 표준 에러 스트림으로 예외 내용을 출력하면서 프로세서 실행을 중단시킨다.

⑵  예외 처리하기
  1. try. . .catch
    구문메소드들은 선언할 때 throws라는 예약어를 사용하여 예외가 발생 가능하므로 예외 처리해야 함을 알린다.
    getMessage();  ==>  Throwable클래스로 부터 상속받고 예외의 메시지를 문자열로 되돌려 준다.
  2. finally 구문
    파일 입출력이나  네트워크 통신의 경우 자주 사용하는 것.
    예외가 발생하든 발생하지 않든 반드시 수행해야 할 명령들을 위해 finally구문이 고안 되었다.
  3. 사용자 정의 예외 클래스
    예외 클래스를 상속 받아서 만들면 된다.
    고려할 사항
    : 일반 예외 클래스를 상속할 경우 모든 예외 처리를 해야하며, 런타임 예외 클래스를 상속할 경우에는
    반드시 예외 처리를 할 필요는 없다.

2. 다형성(Polymorphism)

⑴ 객체 유형의 다형성
동일한 변수가 같은 부모 클래스를 가진 서로 다른 유형의 객체를 표현할 수 있다. 이때 메소드는        자식의 것을 호출하게 된다.
==>내포 다형성(inclusion polymorphism)
instanceof 연산자.
<변수> instanceof <클래스 이름>
⑵ 메소드 오버로드(method overloading)
==> 연산 다형성(operation polymorphism)의 항 형태.
==> 생성자에도 적용된다.

  • int work(), String work() ==> 컴파일 에러를 발생 시킨다.
    메소드는 메소드 이름, 인자의 갯수, 각 위치별 인자의 유형으로 구분하기 때문에
    반환 유형이 다른 메소드를 정의할 수 없다.

  • Override 와 Hide
    • method Override : 자식클래스가 부모로 부터 상속받은 메소드를 재정의 하는 것
    • Hide : 자식 클래스에서 필드가 재정의되면 부모 클래스의 동일한 이름을 가진 필드를 숨기는 것.
    • 자바언어가 원래 객체의 유형을 기억하고 있어서 형 변환되더라도 원래 객체 유형의 해당 메소드를 호출하는 가상 함수(Virtual function)방식을 사용하기 때문
  • 필드의 경우 자식 클래스에서 재정의할 경우 항상 필드는 감춤이 되지만,
    메소드의 경우에는 3가지 경우 가능성이 있다.
    • 인스턴스 메소드를 재정의하면 메소드 오버라이드가 되고
    • static 메소드(static 메소드는 클래스 메소드라고도)인 경우에는 메소드 감춤이 된다.
    • 부모 클래스의 메소드가 abstract였다면 자식 클래스에서 동일한 메소드를 재정한것은 인터페이스 메소드를 정의하는 경우처럼 구현(implement)이라고 부른다.

3. final 와 abstract

⑴ final
  1. final 필드 : final 지시자가 필드 앞에 올 경우에는 상수를 가르킨다.
    ex) public final static Color black ;
  2. final 메소드 : final 지시자가 메소드 앞에 오게 되면 class 상속 할때 자식 클래스에서 이 메소드는 override 할 수 없다.
  3. final 클래스 : final 로 선언된 class는 자식 클래스를 가질 수 없다. 즉 클래스 상속 계층 구조에서 끝을 나타나게 된다.

⑵ abstract

  1. abstract 메소드 : 몸체를 구현하지 않는다.--> abstract 메소드를 가지고 있으면 클래스도 미완이므로 abstract로 선언 되어야함.
    ex)public static void doSomething();
  2. abstract 클래스: abstract 클래스로 선언되면 미완의 클래스로 간주 되므로 인스턴스화 할 수 없고 반드시              상속 해서 사용 해야 한다.
    상속 받는 경우 반드시 abstract 메소드를 모두 구현 해야한다.(그렇치 않으면 abstract 클래스가된다.)

4. String 클래스 사용하기

⑴ String 클래스의 특권
  1. " "에 의한 즉석 인스턴스화예) String a = "abc";
    String b = new String("abc");
    char value[] = {'a','b','c'};
    String c = new String(value);
  2. String 연산자 '+'예) System.out.println(100+99+"Hello"); ==> 199Hello
    System.out.println("Hello"+100+99); ==> Hello10099
    • 이유 + 연산자는 왼쪽 두 항부터 차례로 일어 나므로
    • + 연산자 양쪽이 String 이 아닌 경우 ==> 컴파일 에러가 발생한다.
    • 한쪽은 String이고 다른 한쪽은 String 객체가 아닌 경우 toString()메소드가 실행되어 객체의 16진수값이 나타난다.
⑵  String , StringBuffer 클래스 메소드

  • String 객체는 변경 할 수 없기 때문이다.
  • StringBuffer 는 변경 가능한 클래스 이다.

Java Applet 간단 설명

1. HelloApplet만들기

  • HTML문서가 반드시 있어야 한다.
  • 항상 public class로 선언되어야 한다.
  • java.applet.Applet 을 상속해야 한다.
  • paint()메소들 추가한다.
  • 초기화 메소드로 init()을 제공한다.==> 애플릿에서 가장 먼저 호출되는 메소드임.
    (application에서 생성자에서 행했던 일은 한다.
    ex)배경색지정, 이벤트처리 객체 등록
  • repaint() 메소드 : AWT에서 컴포넌트를 다시 그리도록 요청한다.==> paint()을 호출한다.
  • 애플릿은 반드시 HTML문서를 사용하여 실행한다.
    <applet></applet>
    실행 : appletviewer ****.html

2. 웝 브라우저와 애플릿의 기본 메소드

메소드  원형
설명
public void init()
애플릿을 초기화 한다. 애플릿이 처음 시스템에 적재될 때 한 번만 브라우저에 의해서 자동으로 호출된다.애플릿에 사용되는 여러 가지 초기화를 수행하기에 좋은 메소드 이다.
public void start()
애플릿이 시작될 때 호출된다. init()메소드가 호출된 후에 호출되며 ,브라우저가 애플릿이 포함되어 있는 문서를 방문할 때마다 호출된다. 따라서 웝 페이지 방문할 때 마다 수행해야 할일들을 이 메소드 안에서 시작시켰다가 stop()메소드에서 중지시키면된다.
public void stop()
애플릿 실행을 중지할 때 호출한다. 웹 브라우저가 애플릿이 있는 페이지에서 다른 페이지로 이동 할 때 그리고 destory()메소드가 호출되기 직전에도 호출된다. 웹페이지를 벗어날 때마다 중지시킬 일들을 이 메소드에서 수행한다.
public void destory()
애플릿을 위해 할당했던 리소스를 환수해야 할 때 브라우저에 의해 호출 된다. 애플릿이 열였던 리소스들을 청소한다. 이 메소드가 호출되기 직전에 항상 stop() 메소드가 호출된다.

# 브라우저가 웝 페이지를 호출할때 메소드의 수행과정
  1. URL을 입력하여 HTML문서를 요청한다.
  2. HTML문서를 읽고 applet태그를 찾는다.
  3. applet태그를 발견 하면 태그에서 지정한 applet byte code를 읽는다.(class file)
  4. 애플릿을 브라우저의 JVM에 넘긴다.
  5. 안전성을 검사한다. JVM은 class를 메모리에 적재한다.
  6. 브라우저가 init()을 실행한다.
    Applet클래스의 init(),start(),stop(),destory()은 아무런 일도 수행하지 않는다.
  7. 브라우저는 Html문서를 번역하여 display하기 시작한다.그 다음 브라우저는 start()메소드 실행함.
  8. 다른 사이트로 이동하면 stop()를 실행한다. 모든 활성화된 쓰레드를 중지시키는 일을 한다.
  9. stop()이 종료한 후에 브라우저에 필요에 따라 destory()메소드를 호출함으로써 브라우저의 실행 환경에게 애플릿이 종료할 것을 요청한다.

3. HTML문서와 <APPLET> tag

⑴ <APPLET> tag
  • <PARAM NAME ="HELLO" VALUE="JAVA APPLET"> tag을(여러 개) 가질수 있다.
    • <PARAM>tag이 외에는 tag와 text는 모두 무시 하게 된다.
    • NAME 속성은 대소문자를 구분 하지 않는다.public String getParameter(String "HELLO");
      String = "JAVA APPLET";
⑵ <APPLET> tag의 속성
속성이름
설명
CODE
애플릿 클래스 파일 이름을 지정한다.(필수 속성)
직렬화된 applet을 사용할 경우 CODE속성 대신에 OBJECT속성을 사용함
WIDTH, HEIGHT
HTML문서안에서 차지할 애플릿의 폭와 넓이를 픽셀단위로 지정.(필수 속성)
CODEBASE
애플릿 클래스 파일과 문서 위치가 틀린 경우 클래스 파일 위치를 URL로 입력한다.
ARCHIVE
애플릿 클래스 파일이 압축 파일 일 때 지정, 여러개 일 때 "," 을 사용.
OBJECT
직렬화된 화일 ".ser"일 때 브라우저는 init()을 실 행하지 않고 start()을 실행 한다.
NAME
브라우저에서 applet을 식별하기 위해서 사용
ALIGN
텍스트와 정렬 시키기 위해서
ALT
<IMG>와 동일한 속성
VSPACE,HSPACE
<IMG>와 동일한 속성

4. 애플릿 보안

자바 보안 시스템에 따른 일반적인 애플릿의 금지 행위
  • 라이브러리를 적재하거난 Native 메소드를 사용
  • 애플릿 실행 컴퓨터의 파일을 읽거나 쓰기
  • 애플릿 바이트코드가 있는 호스트 이외의 호스트와의 네트워크 접속
  • 애플릿 실행 컴퓨터와 다른 프로그램 실행
  • 시스템 등록 정보(일부만 가능함)

5. 이미지와 오디오 사용하기

Image getImage(URL url); //여기서 url은 절대 경로
Image getImage(URL url,String name); //url은 절대 경로, name 상대경로를 사용
AudioClip getAudioClip(URL url);
AudioClip getAudioClip(URL url,String name);
public void play();
public void loop();
public void stop();

2013년 9월 11일 수요일

Head First Networking #2

2장. 네트워크 레이아웃 설계하기


네트워크 구축계획을 세우는 방법
주요 실행 단계들
  1. 네트워크 장비와 설치될 위치의 목록을 작성
  2. 장애물을 고려하여 계획을 조정
  3. 케이블을 설치할 때 필요한 케이블 관리도구 목록을 작성
  4. 케이블을 설치

기타 정보
  • 건물 평면도를 사용하여 케이블 설치계획 수립
  • 케이블의 여분은 보통 5 ~ 10% 추가로 필요함.
  • 장비의 전력 공급까지 고려 해야 함.
  • 장애물 관통/우회 여부 - 영구적인가 임시적인가
  • 네트워크 케이블과 커다란 전선은 반드시 피해야 한다. 만약 피 할수 없다면 한 발자국 정도라도 떨어뜨려야 한다.

장애요소들
  • 벽 - 관통하거나 주위에 설치하기도 함.
  • 계단 - 방해되지 않도록 J훅이나 트레이 적절한 위치에 사용하기도 함.
  • 창문 - 통과하거나 관통 불가 창틀 위쪽이나 아래쪽으로 설치해야 함.
  • 싱크대, 샤워실과 같이 습기가 있는 모든 장소들 - 케이블을 부식시키거나 스파크를 일으킴, 절대 설치 불가
  • 가스레인지와 그 외의 발열제품 - 열은 케이블에 치명적임. 220V 작동하는 전기레인지와 가까우면 네트워크 장비에 장애를 일으키기도 함.
  • 전동기를 이용한 장비 - 열뿐만 아니라 진동과 전자파를 발생시킴, 진동은 네트워크 장비에 좋지 않은 영향을 미침, 그리고 전자파 또한 큰 장애의 원인됨.

케이블 관리도구

명칭
설명
사진
J훅
(전선클립)
J훅은 케이블을 걸어 놓을 때 사용합니다.
- 다른 명칭으로 전선클립이라고 하기도 한다.
*
케이블 프로텍터
(Cable protected,
전선보호관)
케이블을 바닥에 설치해야 하는 경우, 케이블을 보호하기 위해서 사용합니다.
- 전선보호관 이라고도 함.
*
케이블 트레이
(Cable tray)
비교적 멀리 떨어진 위치에 많은 양의 케이블 설치할 때 사용함. 케이블 트레이는 공업제품의 형태로써 대부분 지하나
*
레이스웨이
(Raceway)
벽에 잭이 없는 작업공간에서 케이블을 연결할 때 사용합니다. 보통 회사의 개인 책상은 전화선과 네트워크 케이블을 설치하기 위해 활용합니다.
*
케이블타이

케이블을 깔끔하게 정리할 수 있는 최고의 방법, 너무 꽉 조이지는 말아야 함.
CAT-5 케이블의 선을 너무 조이게 되면 케이블이 뒤틀려 변형되거나 문제가 발생할 수 있음.
*
스머프 튜브
(케이블 보호 튜브)
건물 벽 내부에 설치합니다. 한쪽 끝을 벽의 단자함에 연결하고 다른 한쪽을 끝을 사람들이 접근하기 쉬운 곳에 설치합니다. 그러나 지하나 다락방처럼 숨겨진 장에는 사용하지 않습니다.
*
패치 패널
(patch panel)
클로짓 내부의 케이블과 전선의 연결 상태를 정리하는데 사용하는 도구
- 전화기의 스위치 보드처럼 작동하지만 케이블을 위한 장비
*
110블록
(110 Blocks)
과거 음성급 회선 접속에 주로 사용되었던 66블록(25쌍,50회선 수용)에 비해 데이터급 회선까지 포함 수용하기에 적합하도록 25~500쌍 정도의 회선을 고정시키고 정렬하기 위한 단자대(커넥팅 블록)을 말한다.
*
임팩트 툴
1/10 블록이나 PATCH PANNEL 작업시 사용하는 툴
*
라벨프린터