'Code/JAVA'에 해당되는 글 62건

Code/JAVA

멀티 스레드 예제_BeepThread

반응형

 

Runnable을 구현하는 BeepThread 생성 ->  run() 메소드 정의

Toolkit 이용하여 beep음 내는 beep() 호출

sleep에 대해 예외 처리 필요

 

 

메인 클래스에서 BeepThread 객체 생성(obj)

Thread 를 obj로 만들고 start() -> BeepThread의 run() 작동

 

 

'띵' 이란 문자 5번 출력. 

0.5초동안 sleep

반응형

'Code > JAVA' 카테고리의 다른 글

멀티 스레드 예제_yield  (0) 2019.06.20
멀티 스레드 예제_join()  (0) 2019.06.19
멀티 스레드_5  (0) 2019.06.19
멀티 스레드_4  (0) 2019.06.19
멀티 스레드_3  (0) 2019.06.19
Code/JAVA

멀티 스레드_5

반응형


- 스레드 상태 제어

 : 스레드의 상태를 변경하는 것. -> 정교한 스레드 상태 제어가 필요 

 

1. interrupt() : 

일시 정지 상태의 스레드에서 interruptedException 예외를 발생시켜, 예외처리코드(catch)에서 실행 대기상태 or 종료 상태로 갈 수 있도록 함 
미래에 일시 정지 상태가 되면/ 일시 정지일 때 interrupt() 발생 시켜면 예외 발생

 
2. nofify() / notifyAll()

 : 동기화 블록 내에서 wait() 메소드에 의해 일시 정지 상태 스레드 -> 실행 대기 상태로 

 

3. wait() / wait(long millis)

 : 동기화 블록 내에서 스레드를 일시 정지 상태로 만듬. 매개값으로 주어진 시간 지나면 자동적으로 실행 대기 상태 됨. 시간 없을 시 nofify() 통해 실행 대기 상태로 갈 수 있음 

 

4. resume() 

: suspend() 메소드에 의해 일시 정지 상태 스레드 -> 실행 대기 상태로 

 

5. suspend()

 : 스레드가 일시 정지 상태로 만듬. resume() 메소드 호출하면 다시 실행 대기 상태로 됨 

 

6. sleep(long millis) 

: 주어진 시간 동안 스레드를 일시 정지 상태로 만든다. 시간 지나면 자동으로 실행 대기 상태

 ex)Thread.sleep(1000); -> 1초 잠듬 

 

7. join() /join(long millis) 

: join() 메소드 호출한 스레드는 일시 정지 상태. 실행 대기 상태로 갈려면 join() 메소드를 멤버로 갖는 스레드가 종료 되거나 매개값으로 주어진 시간 지나야 함 
계산을 다 마친 후 값을 가져와야 하는 경우. 다른 스레드의 종료를 기다렸다가 실행해야 하는 경우 

 

8. yield()

 : 실행 중 우선순위 동일한 다른 스레드에게 실행 양보하고 실행 대기 상태가 됨 -> 반복문 많이 실행하는데 무의미한 반복 계속 될 때 다른 스레드에게 양보하고 자신이 실행 대기 상태 가는 것 -> 성능에 도움됨 

 

9. stop() 

: 스레드 즉시 종료 -> 경우에 따라 실행 중인 스레드 종료할 필요가 있다. ex) 동영상 끝까지 안보고 멈춤 요구할 경우 

 


** 경우에 따라 교대 작업이 필요한 경우, 자신의 작업이 끝나면 상대방 스레드 일시 정지 상태 풀어주고, 자신은 일시정지 상태로 만든다 -> 공유 객체 때문    

 

 


 

 

- 공유 객체는 두 스레드가 작업할 내용을 각각 동기화 메소드로 구분해 놓고, 한 스레드 작업 완료하면 notify() 메소드 호출해 일시 정지 있는 다른 메소드 실행 대기 상태로 만들고, 자신은 두번 작업하지 않기 위해 wait()으로 일시 정지 상태 만듦.

 
- notify() : wait()로 인해 일시 정지된 스레드 중 한 개를 실행 대기로 만든다

 
- notifyAll() : wait()으로 일시 정지된 모든 스레드를 실행 대기 상태로 만든다 

 

* 이 메소드들은 Object 클래스에 선언된 메소드 이므로 모든 공유 객체에서 호출 가능. but,동기화 메소드 또는 블록 내에서만 사용 가능 

 

 


 



- 데몬 스레드 

: 주 스레드의 작업을 돋는 보조적인 역할을 수행하는 보조 스레드. 
주 스레드 종료되면 강제적으로 자동 종료 됨. 

ex) 미디어 플레이어의 영상/음악 재생(데몬 스레드), 미디어 플레이어(주 스레드)

 

 

- 스레드 그룹 : 관련된 스레드를 묶어서 관리할 목적으로 이용 

- 스레드 풀 

: 병렬 작업 처리가 많아지면 스레드 개수가 증가되고 그에 다른 스레드 생성과 스케줄링으로 인해 cpu가 바빠져 메모리 사용량이 늘어남. -> 성능 저하 
스레드 풀은 작업 처리에 사용되는 스레드를 제한된 개수만큼 정해놓고 큐에 들어오는 작업들을 하나씩 스레드가 맡아서 처리. 작업처리가 끝난 스레드는 다시 작업 큐에서 새로운 작업 가져와 처리 
-> 작업 처리 요청 폭등해도 스레드의 전체 개수가 늘어나지 않으므로 성능 급격히 저하되지 않는다. 

 

 

-<이것이 자바다1>. 한빛 미디어 

반응형

'Code > JAVA' 카테고리의 다른 글

멀티 스레드 예제_join()  (0) 2019.06.19
멀티 스레드 예제_BeepThread  (0) 2019.06.19
멀티 스레드_4  (0) 2019.06.19
멀티 스레드_3  (0) 2019.06.19
멀티 스레드_2  (0) 2019.06.18
Code/JAVA

멀티 스레드_4

반응형


- 임계 영역 : 멀티 스레드 프로그램에서 단 하나의 스레드만 실행할 수 있는 코드 영역

- 동기화 : 보내고 받는 영역이 서로 okay 되면 전송하고 받음
   임계 영역을 지정하기 위해 동기화 메소드와 동기화 블록 제공 -> 스레드 내부에 동기화 존재 시 객체 잠금 걸어 다른 스레드가 임계 영역 코드를 실행하지 못함
   synchronized -> 인스턴스, 정적 메소드 어디든 가능

 

- 메소드
   ex) public synchronized void method(){

         //메소드 전체 내용이 임계영역이므로 스레드가 동기화 메소드 실행하는 즉시 객체는 잠금 일어나고                         //스레드는 동기화 메소드 실행 종료하면 잠금 풀림


        임계 영역  //단 하나의 스레드만 실행
  }

 


   
- 일부 내용만 임계 영역으로 만들고 싶다면 
   ex) public void method(){
                            //여러 스레드가 실행 가능 영역
                           synchronized(공유 객체){
                                       임계 영역  //단 하나의 스레드만 실행 -> 동기화 블록
                             }
       }

 

- 외부 코드들은 여러 스레드 동시에 실행할 수 있지만, 동기화 블록 내부 코드는 임계 영역이므로 한번에 한 스레드만 실행할 수 있고, 다른 스레드 실행 불가

- 실행 대기 상태 : 아직 스케줄링이 되지 않아서 실행을 기다리고 있는 상태 ex) 스레드 객체 생성하고, start() 메소드호출하면 상태 대기 상태 됨

- 실행 상태 : 스레드 스케줄링으로 선택된 스레드가 비로서 cpu 점유하고 run() 메소드 실행 -> running 실행 상태

- 대기 상태 : 스레드 스케줄링의 선태 기다리고 있는 상태
실행 대기 상태에는 모두 실행 되기 전에 스레드 스케줄링에 의해 실행 대기상태로 돌아갈 수 있음
그리고 실행 대기 상태에 있는 다른 스레드가 선택되어 실행 상태가 됨 -> 대기/실행 번갈아 자신의 run()을 조금씩 실행

- 종료 상태 : 실행 상태에서 run() 메소드 종료되면, 더 이상 실행할 코드가 없기 때문에 스레드이 실행이 멈춤

- 일시 정지 상태 : 스레드가 실행할 수 없는 상태. WAITING, TIMED_WAITING, BLOCKED 
  실행 상태로 가기 위해서 일시 정지 상태 -> 실행 대기 상태로 가야함
  * 예로 미디어 플레이어에서 동영상 보는 것

 

 

- getState() : 스레드의 상태에 따라 Thread.state 열거 상수 리턴 

객체 생성 NEW  스레드 객체가 생성, 아직 start() 메소드가 호출 되지 않은 상태 
실행 대기 RUNNABLE  실행 상태로 언제든지 갈 수 있는 상태 
일시 정지 WAITING  다른 스레드가 통지할 때까지 기다리는 상태 
TIMED_WAITING 주어진 시간 동안 기다리는 상태 
BLOCKED  사용하고자 하는 객체의 락이 풀릴 때까지 기다리는 상태 
종료  TERMINATED 실행을 마친 상태 

  

ex) Thread.State state = targetThread.getState(); 
    if(state == Thread.State.NEW){targetThread.start();} 
    if(state == Thread.State.TERMINATED){break;} 



-<이것이 자바다1>. 한빛미디어  

반응형

'Code > JAVA' 카테고리의 다른 글

멀티 스레드 예제_BeepThread  (0) 2019.06.19
멀티 스레드_5  (0) 2019.06.19
멀티 스레드_3  (0) 2019.06.19
멀티 스레드_2  (0) 2019.06.18
멀티 스레드_1  (0) 2019.06.18
Code/JAVA

멀티 스레드_3

반응형


- 스레드 이름 

: 스레드는 자신의 이름 가지고 있음. 디버깅 할 때 어떤 스레드가 어떤 작업 하는지 조사할 목적으로 가끔 사용


thread.setName("스레드 이름"); -> 스레드 이름 설정
thread.getName(); -> 스레드 이름 가져옴
// 위 두개는 인스턴스 메소드 -> 스레드 객체의 참조 필요


Thread thread = Thread.currentThread(); -> 스레드 객체 참조 가지고 있지 않으면, 정적 메소드인 currentThread() 이용하여 실행하는 현재 스레드 참조 가능

 

- 멀티 스레드는 동시성, 병렬성으로 실행됨
- 동시성 : 멀티 작업을 위해 하나의 코어에서 멀티 스레드가 번갈아가면서 실행하는 성질
- 병렬성 : 멀티 작업을 위해 멀티 코어에서 개별 스레드를 동시에 실행하는 성질

 

 


  

 


- 스레드 스케줄링 

스레드의 개수 > 코어의 개수 -> 스레드를 어떤 순서에 의해 동시성으로 실행할 것인가를 결정해야 함
스레드 스케줄링에 의해 스레드들은 아주 짧은 시간에 번갈아가면서 run()메소드를 조금씩 실행함

 


1. 우선 순위 방식 : 우선 순위가 높은 스레드가 실행 상태를 더 많이 가지도록 스케줄링 하는 것 -> 우선 순위 번호 부여할 수 있기 때문에 개발자가 코드로 제어 가능


    1 - 10까지 부여되는데 1 : 제일 낮음.  우선 순위 부여 X 이면 기본적으로 5의 우선순위 할당
    thread.setPriority() 메소드 : 우선순위 변경 가능
    ex) thread.setPriority(Thread.MAX_PRIORITY = 10 / .NORM_PRIORITY = 5/ .MIN_PRIORITY = 1);
    

다른 스레드에 비해 실행 기회 많이 주고 싶으면 우선 순위 높게 -> 최소 5개 이상의 스레드가 실행되어야 우선순위 영향 받음


2. 순환 할당 방식 : 시간 할당량을 정해서 하나의 스레드를 정해진 시간만큼 실행하고 다시 다른 스레드를 실행하는 방식 -> JVM에 의해 정해지기 때문에 코드로 제어 불가

 

 

-<이것이 자바다1>. 한빛 미디어 

반응형

'Code > JAVA' 카테고리의 다른 글

멀티 스레드_5  (0) 2019.06.19
멀티 스레드_4  (0) 2019.06.19
멀티 스레드_2  (0) 2019.06.18
멀티 스레드_1  (0) 2019.06.18
기본 API 클래스  (0) 2019.06.18
Code/JAVA

멀티 스레드_2

반응형

- 메인 스레드(Main thread)

    main() 메소드 실행하면 시작됨
   첫 코드부터 차례로 순차적으로 실행, 마지막 코드 or return 만나면 실행 종료

- 어떤 자바건 메인 스레드는 반드시 존재. 작업 이외의 추가적인 병렬 작업의 수만큼 스레드 생성

 


1. java.lang.Thread 클래스 객체화 생성 가능 

   ex)class Task implements Runnable 
   ex)Thread thread = new Thread(Runnable target);  //생성자 호출

   runnable 은 작업 스레드가 실행할 수 있는 코드를 가지고 있는 개체, 인터페이스 타입이기 때문에 구현 객체 만들어 대입, 실체 스레드 아님
   public void run(){} -> 재정의해서 작업 스레드가 실행할 코드 작성
  
   ex)  1) 기본 
             class A implements Runnable{             //Runnable 구현
                           public void run(){              //인터페이스 구현을 받아서 재정의 필요
                                         //실행문
                            }
                }

              class b {
                            public static void main(String[] args){
                                     Runnable task = new A();                     //Runnable를 구현하는 A를 만들고
                                     Thread thread = new Thread(task);         //스레드로 만들어
                                     thread.start();                                     //실행
                                      //메인에서 돌아갈 스레드 만들기
                                }
             }

 


        2) Runnable 익명 객체 이용

           Thread thread = new Thread(new Runnable(){
                      @override
                      public void run(){
                             //실행문
                     }
           });



       3) 람다식 이용

            Thread thread = new Thread(()-> {
                 //실행문
          });

 


2. Thread 상속해 하위 클래스 만들어 생성 가능 
: 작업 스레드가 실행할 작업을 Runnable로 만들지 않고, Thread의 하위 클래스로 작업 스레드를 정의하면서 작업 내용 포함 가능
    
ex) public class A extends Thread {
                @override
                 public void run(){
                        //실행문
                 }
     }
    public class b {
                  public void main(String[] args){
                         Thread thread = new A();
                         thread.start();     //스레드 실행
                   }
    }


ex) 익명 객체
    Thread thread = new Thread(){
                    public void run(){
                              //실행문
                     }
    }


- Thread 호출 -> thread.start(); 를 통해 run() 실행

반응형

'Code > JAVA' 카테고리의 다른 글

멀티 스레드_4  (0) 2019.06.19
멀티 스레드_3  (0) 2019.06.19
멀티 스레드_1  (0) 2019.06.18
기본 API 클래스  (0) 2019.06.18
예외 처리  (0) 2019.06.18
Code/JAVA

멀티 스레드_1

반응형

- 프로세스

운영체제에서는 실행 중인 하나의 애플리케이션
사용자가 애플리케이션을 실행하면 운영체제로부터 실행에 필요한 메모리를 할당받아 애플리케이션의 코드를 실행하는 것


- 멀티 태스킹 

: 두 가지 이상의 작업을 동시에 처리하는 것
운영체제는 멀티 태스킹을 할 수 있도록 CPU 및 메모리 자원을 프로세스마다 적절히 할당하고, 병렬로 실행시킴

- 스레드 : 한 가닥의 실. 한가지 작업을 실행하기 위해 순차적으로 실행할 코드를 실처럼 이어 놓았다해서 유래된 이름
   

* 멀티 태스킹 != 멀티 스레드
* 멀티 프로세스 > 프로세스들 > 하나의 프로세스 안 싱글 스레드, 멀티 스레드 존재

 


- 멀티 프로세스 

: 운영체제에서 할당받은 자신의 메모리 가지고 실행하기 때문에 서로 독립적 -> 오류 발생해도 다른 프로세스 영향 미치지 않음

BUT, 멀티 스레드는 하나의 프로세스 내부에 생성되기 때문에 하나의 스레드가 예외 발생 시키면 프로세스 자체가 종료 될 수 있어서 다른 스레드에 영향 미치게 됨 -> 예외 처리 중요


- 멀티 스레드는 실행중인 어플리케이션 하나라도 있으면, 프로세스 종료되지 않음

- 사용

대용량 데이터의처리 시간을 줄이기 위해 데이터를 분할해 병렬로 처리하는 곳, UI를 가지고 있는 애플리케이션에서 네트워크 통신하기 위해 사용
다수 클라이언트의 요청을 처리하는 서버 개발할 때에도 사용
애플리케이션 개발에 중요한 기능이기 때문에 이해 필요

 

 

-<이것이 자바다1>. 한빛 미디어  

반응형

'Code > JAVA' 카테고리의 다른 글

멀티 스레드_3  (0) 2019.06.19
멀티 스레드_2  (0) 2019.06.18
기본 API 클래스  (0) 2019.06.18
예외 처리  (0) 2019.06.18
중첩 클래스 예제  (0) 2019.06.18
Code/JAVA

기본 API 클래스

반응형

- 기본 API

라이브러리(library). 프로그램 개발에 자주 사용되는 클래스 및 인터페이스의 모음 의미

- API 도큐먼트 : 쉽게 API를 찾아 이용할 수 있도록 문서화한 것

 


 

1. java.lang : 자바 프로그램의 기본적인 클래스를 담고 있는 패키지. import 없이 사용 가능

Object : 자바 클래스의 최상위 클래스로 사용 -> extends 안 하면 자동으로 extends Object 됨
System : 표준 입출력 장치(키보드/모니터)로부터 데이터 입력받을 때/ 출력시킬 대 사용. 
Class : 클래스를 메모리로 로딩할 때 사용
String : 문자열 저장하고 여러가지 정보 얻을 때
StringBuffer, StringBuilder : 문자열 저장하고 내부 문자열 조작할 때
Math : 수학 함수 이용할 때
Wrapper(Byte,Short,Integer,Character,Float, Double, Long, Boolean) : 기본 타입의 데이터 갖는 객체 만들 때 사용, 문자열을 기본 타입으로 변환할 대 , 입력값 검사에 사용

2. java.util : 자바 프로그램 개발에 조미료 같은 역할. 컬렉션 클래스들이 대부분

Arrays : 배열 조작(비교, 복사, 정렬, 찾기)할 때 사용
Calendar : 운영체제의 날짜와 시간 얻을 때 사용
Date : 날짜와 시간 정보 저장하는 클래스
Objects : 객체 비교,null 여부 등 조사할 때 사용
StringTokenizer : 특정 문자로 구분되는 문자열 찾을 
Random : 난수 얻을 때 사용

 



- Object 


1. equals() : 매개 타입은 Object. 모든 객체가 매개 값으로 대입될 수 있음. Object가 최상위 타입으로 모든 객체가 Object 타입으로 자동 변환 가능하기 때문에
비교 연산자인 == 와 같음.. 같으면 true, 아니면 false ex) 기준 객체. equals(비교 객체);

2. hashCode() : 객체 해시코드. 객체를 식별할 하나의 정수 값
객체의 메모리 번지를 이용해서 해시코드를 만들어 리턴하기 때문에 객체마다 다른 값 가짐
hashCode() 리턴 값 -같음 -> equals() 리턴 값 -> 동등 객체, 아닐 시 다른 객체

3. toString() : 객체 문자 정보. 객체의 문자 정보. 기본적으로 Object클래스의 toString -> [클래스명@16진수 해시 코드]
오버 라이딩하여 재정의해서 필요에 따라 쓸 수 있음

4. clone() : 객체 복제. 원본 객체의 필드 값과 동일한 값을 가지는 새로운 객체를 생성하는 것 -> 원본 객체를 안전하게 보호하기 이해서
     - 얕은 복제(thin clone) : 단순히 필드값을 복사해서 객체에 복사하는 것 -> 필드 값만 복제하기 때문에 필드가 기본 타입이면 값 복사, 필드가 참조 타입이면 객체 번지 복사
implements cloneable -> 복제 할 수 있다는 표시 try-catch문으로 예외처리(CloneNotSupportedException) 해줘야 함
     - 깊은 복제(deep clone) : 얕은 복제는 참조 타입은 번지도 복제되기 때문에 원본 객체의 필드와 복제된 객체 필드는 같은 객체 참조 -> 복제가 변경하면 원본도 변경됨
참조하고 있는 객체도 복제하는 것 -> clone() 메소드 재정의해서 참조 객체를 복제하는 코드를 직접 작성해야 함

5. finalize() : 객체 소멸자. 참조하지 않는 배열이나 객체를 쓰레기 수집기가 힙 영역에서 자동으로 소멸시킴
쓰레기 수집기는 객체를 소멸하기 직전에 마지막으로 객체의 소멸자를 실행시킴

-buffer : 데이터를 임시로 저장하는 메모리 StringBuffer(멀티 스레드 지원/동기화 ), StringBuilder (단일 스레드)
- 정규 표현식 : 문자열이 정해져 있는 형식으로 구성되어 있는지 검증해야 함 ex) 이메일, 전화번호 등  
- Pattern 클래스 : 정규 표현식으로 문자열을 검증하는 방법.                                                   ex) boolean result = Pattern.matches("정규식","검증할 문자열");

- Wrapper(포장) 클래스 : 기본 타입의 값을 내부에 두고 포장하기 때문, 기본 타입 값은 외부에서 변경될 수 없음
- Format : 일정한 포맷을 정해서 사용 가능 문자열 비교 : MessageFormat.format(); 

 

 

-<이것이 자바다1>. 한빛미디어

 

반응형

'Code > JAVA' 카테고리의 다른 글

멀티 스레드_2  (0) 2019.06.18
멀티 스레드_1  (0) 2019.06.18
예외 처리  (0) 2019.06.18
중첩 클래스 예제  (0) 2019.06.18
중첩 클래스  (0) 2019.06.18
Code/JAVA

예외 처리

반응형

-에러

: 하드웨어의 오작동 또는 고장으로 인해 응용프로그램 실행 오루가 발생한은 것

- 예외 

: 개발자가 이런 에러를 대체할 방법을 만들은 것, 사용자의 잘못된 조작 또는 개발자의 잘못된 코딩으로 인해 발생하는 프로그램 오류

 


 1. 일반 예외 

컴파일러 체크 예외라고도 하며, 자바소스를 컴파일 하는 과정에서 예외처리 코드가 필요한지 검사하기 때문               -> Exceiption 상속받고 runtime Exception 은 상속x

 2. 실행 예외 

컴파일 하는 과정에서 예외 처리 코드를 검사하지 않는 예외 -> runtimeException 상속 받음
 -> 컴파일 시 예외처리를 확인하는 차이 뿐, 둘 다 예외처리가 필요함
 자바에서는 예외를 클래스에서 관리, JVM은 프로그램 실행 도중에 예외 발생하면, 해당 예외 클래스로 객체 생성         -> java.lang.Exception

 

 


 



- 실행 예외 :

자바 컴파일러가 체크하지 않기 때문에 오로지 개발자의 경험에 의해서 예외 처리 코드 삽입 -> 안할 시 종료

 1. NullPointerException

 : 객체 참조가 없는 상태, 즉 null 값을 갖는 참조 변수로 객체 접근 연산자인 도트(.) 사용했을 때 발생

2. ArrayIndexOutOfBoundsException : 배열에서 인덱스 범위 초과하여 사용할 경우 실행 예외임

3. NumberFormatException : 문자열을 숫자로 변환하는 중 숫자로 변환 할 수 없는 값 있을 시 발생 
     문자열 숫자로 변환 방법 : Integer.parseInt(String s) -> 주어진 문자열을 정수로, Double.parseDouble(String s)             -> 주어진 문자열을 실수로
     여기서 Integer, Double 은 Wrapper 클래스라고 함

4. ClassCastException : 타입변환은 상위 클래스와 하위 클래스 간에 발생하고 구현클래스와 인터페이스 간도 발생함
 이런 관계 아니라면 클래스는 다른 클래스로 타입 변환 불가 -> 강제로 변환 시 발생

 


- 예외 처리 코드 

: 프로그램에서 예외 발생했을 경우 프로그램의 갑작스러운 종료를 막고, 정상 실행을 유지할 수 있도록 처리하는 코드
 try {예외 발생 가능 코드} catch { 예외 처리 } finally { 항상 실행 / 생략 가능}

- 다중 catch 

: try 블록 내부는 다양한 종류의 예외 발생 가능 -> catch (예외 e){} catch(예외 e){} 다중 생성 가능 -> 예외 발생 시 catch로 넘어가기 때문에 여러개 catch해도 하나만 실행

- catch 순서 

: 여러개 작성 할 때 상위 예외 클래스가 하위 예외 클래스보다 아래쪽에 위치해야 함
즉, try{} 안에 예외 발생 할 것 같은 문장들 작성 시 위에 있는 명령의 예외 처리를 catch로 제일 먼저 작성하기 -> 왜나면 실행 순서대로 예외 되면 바로 catch 불러버리기 때문

- 멀티 catch 

: catch에서 여러개의 예외를 처리할 수 있도록 multi catch기능을 추가함
ex) catch(예외처리 | 예외처리){} -> ()안에 동일하게 처리하고 싶은 예외 적으면 됨

 

- 자동 리소스 닫기 

: try - with - resources 사용하면 예외 발생 여부와 상관없이 사용했던 리스소 객체(각종 입출력 스트림, 서버 소켓, 소켓, 각종 채널)의 close() 메소드 호출해서 안전하게 리소스 닫음
* 리소스 : 데이터를 읽고 쓰는 객체
       ex) try(FileInputStream fis = new FileInputStream("file.txt")){
                  ......
            }catch(IOException e){...} -> 예외 발생 시 자동으로 FileinputStream에서 close() 메소드 호출


        ex) implements AutoCloseable{.... public void close() throws Exception {...}}

 


- 예외 떠넘기기 

 : 메소드를 호출한 곳으로 예외 떠넘길 때. throws -> 메소드 선언부 끝에 작성되어 메소드를 처리하지 않은 예외를 호출한 곳으로 떠넘기는 역할
  ex) 리턴 타입  메소드명(매개변수,...) throws Exception {..} -> 모든 예외 넘김

- 사용자 정의 예외 

: 어플리케이션 예외(어플리케이션 서비스와 관련된 예외)는 개발자가 직접 정의해서 만들어야 해서
 컴파일러가 체크하는 일반 예외로 선언할 수 있고 컴파일러가 체크하지 않는 실행 예외로 선언 할 수 있다.
  ex) public class xxxException extends [Exception | RuntimeException]{} (클래스) 
      public void method() throws xxxException {throw new xxxExeption("message")};  (메소드) 

       -> 메소드 호출 한 곳에서는 try-catch 문 써야함


- 예외 정보 얻기 : e.getMessage() : 예외 코드 리턴, e.printStackTrace() :

 

 

-<이것이 자바다1>. 한빛 미디 

반응형

'Code > JAVA' 카테고리의 다른 글

멀티 스레드_1  (0) 2019.06.18
기본 API 클래스  (0) 2019.06.18
중첩 클래스 예제  (0) 2019.06.18
중첩 클래스  (0) 2019.06.18
인터페이스 예제  (0) 2019.06.18
Code/JAVA

중첩 클래스 예제

반응형

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
/*
 
 * inner class : outer class 멤버를 자유롭게 사용할 수 있게 해주는 것
 
 * - member inner class
 
 * - static inner class : 오직 한개. 
 
 * - local inner class : 
 
 * - annoymous inner class : 객체 만들려면 이름 쓰는데 이름 없음 그냥 new 하면 됨, 이벤트 처리도 같은 개념
 
 * 
 
 *  1/4 자주 많이 씀
 
 *  
 
 *  class A{
 
 *      class b{
 
 *      }
 
 *  }
 
 *  
 
 *  독립적으로 존재하는 객체 만드는 것이 아니라 a의 메소드 처럼 만드는 것
 
 *  메소드 만들면 클래스 내에서 맘대로 쓸 수 있음 -> 밖에서 접근 가능
 
 *  but, 이너 클래스 같은 경우는 내 멤버로 인식해 아웃 클래스가 이너 클래스를 자유롭게 사용할 수 있음
 
 * 
 
 * */
 
public class InnerClass {
 
                                //local inner class
 
    
 
    private int a;                        //private지만 같은 클래스 내이기에 class B에서도 사용할 수있움
 
    
 
    public InnerClass() {
 
        System.out.println("Outer Class");
 
        a=30;
 
    }
 
    
 
    class B{                            //inner class 객체 생성 시 outer 클래스 통해서 만들어야해
 
        
 
        public B() {
 
            a=50;
 
            System.out.println("Inner Class"+a);
 
        }
 
        
 
        
 
    }
 
    
 
    public static void main(String[] a) {
 
        
 
        InnerClass ic = new InnerClass();                //inner class 생성 법
 
        InnerClass.B b = ic.new B();
 
        
 
        InnerClass.B aa = new InnerClass().new B();
 
        
 
    }
 
    
 
}
 
 
 
Colored by Color Scripter
 
 
 
 
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4f; text-decoration:none">Colored by Color Scripter
 
반응형

'Code > JAVA' 카테고리의 다른 글

기본 API 클래스  (0) 2019.06.18
예외 처리  (0) 2019.06.18
중첩 클래스  (0) 2019.06.18
인터페이스 예제  (0) 2019.06.18
인터페이스_2  (0) 2019.06.18
Code/JAVA

중첩 클래스

반응형

중첩 클래스 

클래스 내부에 선언한 클래스, 사용하면 두 클래스의 멤버에 쉽게 접근 할 수 있고, 외부에 불필요한 관계 클래스 감춤으로써 코드의 복잡성 줄일 수 있음 
ex) class a {  class b {  }} class a{ interface i { }}

 

- 멤버 클래스 : 클래스의 멤버로서 선언되는 중첩 클래스 
ex) class a { class b{ }}  - 인스턴스 멤버 클래스 : a 객체 생성해야만 사용할 수 있는 b 중첩 클래스 
class a{   static class b {  }}  - 정적 멤버 클래스 : a 클래스로 바로 접근 할 수 있는 b 중첩 클래스

 

- 로컬 클래스 : 메소드내부에 선언되는 중첩 클래스

ex) class a{ void method(){ class b{ }}} : method()가 실행할 때만 사용할 수 있는 b 중첩 클래스

 

 




1. 인스턴스 멤버 클래스 

static 키워드 없이 선언된 클래스. 인스턴스 필드와 메소드만 선언 가능하고 정적 필드와 메소드는 선언 불가 
ex) A a = new A(); A.B b = a.new B();

2. 정적 멤버 클래스 

static 키워드로 선언된 클래스. 모든 종류의 필드와 메소드 선언 가능 
ex) A.c c = new A.C();

3. 로컬 클래스

중첩 클래스는 메소드 내에서도 선언 가능. 접근 지정자 + static 붙일 수 없음 -> 메소드 내부에서만 사용되므로 접근 제한 할 필요 없음 
ex) void method(){ class D{...} D d = new D();} -> 메소드 실행 될 때, 메소드 내에서 객체 생성 후 사용

 


 

- 중첩 인터페이스 

클래스 멤버로 선언된 인터페이스 -> why? 해당 클래스와 긴밀한 관계를 맺는 구현 클래스를 만들기 위해서, 특히 UI 이벤트 처리 위해 
 ex) class a{ interface B {...}}

 

- 익명 객체

이름 없는 객체, 단독으로 생성 불가, 클래스 상속하거나 인터페이스를 구현해야만 상속 가능. 
필드 초기값이나 로컬 변수의 초기값, 매개 변수의 매개값으로 주로 대입 -> UI 이벤트 처리 객체나 스레드 객체를 간편하게 생성할 목적으로 활용 
  ex) class A { Parent p = new Parent(){  ... // 필드 선언}} 

-> 익명 자식 객체 내부에서만 사용되고 외부에서 접근 불가 why? 익명 자식 객체는 부모 타입 변수에 대입되므로 부모 타입에 선언된 것만 사용할 수 있기 때문

 

- 익명 구현 객체 생성

구현 클래스 재사용 되지 않고 오로지 해당 필드와 변수의 초기값으로 사용 하는 경우 익명 구현 객체를 초기값으로 대입하는 것이 좋다 
       ex) 인터페이스 [필드|변수] = new 인터페이스(){  //인터페이스에 선언된 추상 메소드와 실체 메소드 선언;  }

 

 

-<이것이 자바다1>. 한빛미디어 

반응형

'Code > JAVA' 카테고리의 다른 글

예외 처리  (0) 2019.06.18
중첩 클래스 예제  (0) 2019.06.18
인터페이스 예제  (0) 2019.06.18
인터페이스_2  (0) 2019.06.18
인터페이스_1  (0) 2019.06.18
 [ 1 ]  [ 2 ]  [ 3 ]  [ 4 ]  [ 5 ]  [ ··· ]  [ 7 ] 

푸터바

태그

알림

이 블로그는 구글에서 제공한 크롬에 최적화 되어있고, 네이버에서 제공한 나눔글꼴이 적용되어 있습니다.

카운터

  • Today :
  • Yesterday :
  • Total :