반응형

전체 글 654

java stringtokenizer 예제

tringTokenizer(String str, String delim) : 문자열 str을 지정된 구분자로 나누는 StringTokenizer를 생성한다.int countTokens() : 전체 토큰수를 반환한다.boolean hasMoreTokens() : 토큰이 남아있는지 알려준다.String nextToken() : 다음토큰을 반환한다. ex) String source = "100, 200, 300, 400, 500";StringTokenizer st = new StringTokenizer(source, ","); while(st.hasMoreTokens()){System.out.println(st.nextToken());}}}

JAVA/JAVA 관련 2016.12.22

JAVA 메모리 관련 정보 GC, 메모리영역

자바 메모리 누수 측정 방법자바 프로그램의 실제 메로리 사용량은 시스템의 작업관리자에서 나오는 메모리 사용량으로는 측정 할 수없기에 디버그 출력으로 totalMemory() - freeMemory()를 출력하거나, 개발 도구를 사용하여 측정하는 것이좋다. GC 알고리즘메모리가 GC로 부터 해소가 되지 않는 루트 참조 객체(직간접적으로 참조가 되는 모드 객체)는 크게 3가지경우이다.Static 변수에 의한 객체 참조모든 현재 자바 스레드 스택내의 지역 변수, 매개 변수에 의한 객체 참조JNI 프로그램에 의해 동적으로 만들어지고 제거되는 JNI global 객체 참조이러한 경우에 사용할 수 있는 객체로 분류되어 GC에서 가져가지 않아 메모리가 누수될 수 있다. 자바 메모리영역은 3가지로 구성되어 있다.Hea..

JAVA/JAVA 관련 2016.12.22

두가지 유형의 자바 예외처리

1. 코드public static void main(String args[]){method 1();} statci void method1(){try{throw new Exception(); // 일부러 예외처리}catch (Exception e){System.out.println("method1 메서드 내에서 예외가 처리되었습니다");e.printStackTrace();}}} 결과method1메서드 내에서 예외가 처리 되었습니다.java.lang.Exception at javas.javas.method1(javas.java:12) at javas.javas.main(javas.java:8) 2. 코드public static void main(String args[]){try{method1();}catch..

JAVA/예외처리 2016.12.21

자바 예외처리

1. try - catch -finally 문try{// 예외가 발생할 가능성이 있는 문장들을 넣는다.} catch (Exception e){//예외처리를 위한 문장을 적는다.} finally{// 예외 발생여부에 관계없이 항상 수행되어야 하는 문장들을 넣는다.} 2. 메서드 예외 처리 메서드에 예외를 선언하려면, 메서드의 선언부에 키워드 throws를 사용해서 메서드내에서 발생할 수 있는 예외를 적어주기만 하면 된다.(예외가 여러개일 경우에는 , 쉼표로 구분한다.) void method() throws Exception1, Execption2, ... ExceptionN{} 이 메서드를 사용하려는 사람은 이메서드를 사용하기 위해서 어떤한 예외들일 처리되어야 하는지 쉽게 알수 있다. ( 자바가 가지는 장..

JAVA/예외처리 2016.12.21

Eclipse 구성

Eclipse - 종전의 개발 툴은 개발자로 하여금 툴에 갇혀 있또록 만드는 한계가 있었다. 이클립스는 모든 플랫폼을 제공해 주는것을 지향한다. - eclipse 기본 플랫폼 위에 각자의 갭라 용도에 맞는 플러그인을 추가하고, 스스로가 업무 환경에 맞춰 개발 환경을 꾸밀 수 있도록 지원한다. Eclipse plug_in- 이클립스를 구성하는 각각의 기능 단위.- 이클립스에서 동작하는 코드조각- plugin.xml : 해당 플러그인이 다른 플러그인과의 확장점 등을 설명하는 설명서- icons : 아이콘과 같은 리소스- com : 컴파일된 자바코드 플러그인 설치 방법1. 플러그인 파일을 다운 받아서 압축을 푼 후, 내부에 있는 jar 파일을 복사하여 eclipse 폴더 아래 plugins 폴더에 붙여넣고 이..

JAVA/eclipse 2016.12.21

멀티 스레드

멀티 쓰레딩의 장점- CPU의 사용률을 향상시킨다.- 자원을 보다 효율적으로 사용할 수 있다.- 사용자에 대한 응답성이 향상된다.- 작업이 분리되어 코드가 간결해진다. Thread 클래스 vs Runnable 인터페이스Thread 클래스를 사용하는 방법과 Runnable 인터페이스를 구현하는 방법 두가지가 있다.- Thread클래스를 상속받으면 다른 상속이 불가능 하기에 대체로 Runnable인터페이스를 사용한다. - Runnable 인터페이스를 구현하는 방법이 재사용성이 높고 코드의 일관성을 유지할 수 있는 장점이 있다.- Runnable 인터페이스는 run()메서드만 정의되어있는 간단한 인터페이스이다.- Thread 클래스를 상속받으면, Thread 클래스의 메소드를 직접 호출할 수 있지만 .Runn..

JAVA/Thread 2016.12.21

쓰레드 개념정리

쓰레드의 스케줄링과 관련된 메서드void interrupt() : sleep()이나 join()에 의해 일시정지상태인 쓰레드를 실행대기 상태로 만든다.void join(), join(long millis) : 지정된 시간동안 쓰레드가 실행되도록 한다. / 해당 쓰레드가 종료될때 까지 main 쓰레드는 대기한다.void resume() : suspend()에 의해 일시정지상태에 있는 쓰레드를 실행대기상태로 만든다.static void sleep(long miillis) : 지정된 시간 동안 쓰레드를 일시정지 시킨다. 시간이 지난후 다시 실행대기상태가 된다.void stop() : .쓰레드를 즉시 종료신킨다.void suspend() : 쓰레드를 일시정지 시킨다.static void yield() : 실행중..

JAVA/Thread 2016.12.21

JAVA 데몬 스레드 소개

데몬 쓰레드는 다른 일반 쓰레드의 작업을 돕는 보조적인 역할을 수행하는 쓰레드이다. boolean isDeaemon() 쓰레드가 daemon 쓰레드 인지 확인void setDaemon(boolean on) 쓰레드를 데몬 쓰레드로 또는 사용자 쓰레드로 변경한다. 자동저장 쓰레드 프로그래밍 package javas; import javax.swing.JOptionPane; public class Thread1 { static boolean autoSave = false; public static void main(String args[]) { Runnable r = new Thread_1(); Thread t1 = new Thread(r); t1.setDaemon(true); t1.start(); for (..

JAVA/Thread 2016.12.21

Thread wait(), notify() 소개

문제점하나의 쓰레드가 객체에 lock 을 걸고 어떤 조건이 만족될 때까지 기다려야 하는 경우, 이 쓰레드를 그대로 놔두면 이 객체를 사용하려는 다른 쓰레드들은 lock이 풀릴 때 까지 같이 기다려야 하는 상황이 발생 해결책 이런 비효율을 개선하기 위해서 wait()와 notify()를 사용한다. 한 쓰레드가 객체에 lock을 걸고 오래 기다리는 대신 wait()을 호출해서 다른 쓰레드에게 제어권을 넘겨주고 대기상태로 기다리다가 다른 쓰레드에 의해서 notify() 가 호출 되면 다시 실행 상태가 되도록 하는 것이다. wait(), notify(), notifyAll()- object 클래스에 정의된 메소드이므로 모든 객체에서 호출이 가능하다.- 동기화 블록(synchronized블록) 내에서만 사용이 가..

JAVA/Thread 2016.12.21

Thread 크리티컬 세션

쓰레드가 같은 부분을 공유하여 멀티프로세스보다 훨씬 좋은 장점을 가지고 있다 그러나 그 만큼 같은 부분을 공유하기 때문에 문제가 생기는 경우가 있다. 그래서 해당 쓰레드가 그 부분을 사용하고 있다면 다른 쓰레드가 접근할 수 없도록 하는 동기화 작업이 필요하다. Log를 남기는 작업을 하는 프로그램을 살펴보자 import java.io.*;import java.util.*; public class LogFile{private Writer out; public LogFile(File f) throws IOException{ FileWriter fw = new FileWriter(f); this.out = new VufferedWriter(fw);} public void writeEntry(String mes..

JAVA/Thread 2016.12.21

JAVA 스레드 스케줄링

스레드 스케줄링 # 스레드 스케줄링에는 크게 선점형과 협력형 두 가지가 있다. 선점형 스레드 스케줄러- 선점형 스레드 스케줄러는 스레드에게 공평하게 분배된 CPU 시간이 소진되었을 때, 스레드를 중지시키고 다른 스레드에게 CPU 제어권을 넘겨주는 일을 결정한다. 협력형 스레드 스케줄러- 협력형 스레드 스케줄러는 CPU 제어권을 다른 스레드에게 넘겨주기 전에 실행 중인 스레드가 스스로 실행을 중단 할때 까지 기다린다.- 협력형은 기아현상이 일어 날 수 있다. 모든 자바 가상머신은 우선순위에 따른 선점형 스레드 스케줄링 방식의 사용이보장된다.(선점형 스레드는 우선순위가 높은 스레드를 먼저 실행시키는 등의 문제로 인해 다른 스레드들은 기아현상에빠질 수도 있다. 잘 사용해야 한다.)-> 우선순위가 높은 스레드들..

JAVA/Thread 2016.12.21

Thread 동기화 문제

Thread 동기화 문제스레드는 중앙의 리소스풀로 부터 빌린다. 스레드는 메모리, 파일 핸들, 소켓 등의 리소스를 공유하여 프로그램을 좀 더효율적으로 만단ㄷ. 두 스레드가 동시에 같은 리소스를 사용하지만 않는다면 멀티 스레드 프로그램이 각 프로스스가별도의 리소스를 유지하는 멀티 프로세스 프로그램보다 훨씬 효율적이다.그러나 언제 어느 문장이 실행될지 몰라 결과의 순서를 예측할 수 없고, 자원을 공유하고 있을 경우 데드락 현상이 발생할 수 있다.스레드에 동일자원 접근에 대해 배타적인 접근을 할당해 줄 방법은 Synchronized를 명시해주는 방법이다.예제)Run(){System.out.println(result);} Thread.start() 진행 시 System.out.println 자원을 서로 공유하기..

JAVA/Thread 2016.12.21

JAVA Thread Futher, Callable, Executor

Futher, Callable, Executor스레드가 필요할 때 스레드를 생성하여 제공하는 ExecutorServiceCallabe 객체를 생성하여 Executor에 추가하여 객체를 순차적으로 실행한 후 Future 클래스로 결과를 반환 받는다.Callable 객체는 인터페이스이고 어떤 항목이든 담을 수 있는 call() 메소드 하나만 포함한다.EX) Callable 객체Class findmaxTask implements Callable{ FindMaxTas(int[] data, int start, int end){Super(data,start,end);} Public Integer getMax(){생략}} MultiThreadedMaxFinder 객체 Public class MultithreadedM..

JAVA/Thread 2016.12.21

Thread 폴링 방식

폴링 방식계속 돌면서 쓰레드가 종료될 때까지 while문으로 대기하다가 출력되면 종료콜링 방식쓰레드 안에서 종료되면 호출 하는 방식호출할 클래스의 레퍼런스를 알기위해서 대게 생성자로 해당 클래스에 대한 정보를 넘긴다.콜백이 폴링보다 좋은 이유는 CPU 시간을 낭비하지 않는다.콜백에 대표적인 예는 UI 컴포넌트에 이벤트를 달고 리스너를 지정해 주는 것이다. 그러면 해당 객체는 본인을 호출할경우 해당 메소드를 호출하는 콜백을 진행한다. 이는 옵저버 패턴이라고 한다. 스레드의 run() 메소드의 실행이 거의 끝나갈때, 마지막으로 해야 할 작업은 결과값과 함께 메인 프로그램에서 미리 정해 놓은 메소드를 호출하는 것이다. 메인 프로그램이 각각의 스레드에 대해서 결과를 물어 보는 것이 아니라, 각각의 스레드가 메인..

JAVA/Thread 2016.12.21

스트림(Stream)_입출력 스트림

스트림(stream)- 네트워크 프로그램의 가장 큰 비중은 입출력(I/O) 출력스트림1. java.io.OutputStream제공메소드public abstract void write(int b) throws IOExceptionpublic void write(byte[] data) throws IOExceptionpublic void write(byte[] data, int offset, int length) throws IOExceptionpublic void flush() throws IOException // 버퍼가 아직 가득 차지 않은 상황에서 강제로 버퍼의 내용을 전송public void close() throws IOException //스트림 사용이 끝나면 해당스트림을 닫는다. - Outpu..

JAVA/Input & output 2016.12.21

STS의 github 연동

1. http://wedul.tistory.com/6 에서 해당 작업을 선진행한다. 2. cmd창 또는 terminal창을 키고 저장할 저장소를 먼저 clone한다.git clone "저장소의 ssh주소" 저장소가 없을 경우에는 github에서 저장소를 먼저 생성한다. 3. STS에서 현재 프로젝트에 우측 클릭한 후 "Team" -> "Share Project.."를 선택한다. 저장소를 복제한 위치를 repository경로에 추가하고 추가하고 싶은 프로젝트를 선택하고 확인을 누른다. 4. window -> show view -> git을 선택한 후 보여지는 git 저장소에서 commit을 눌러서 저장소에 올린다. 5. github에 프로젝트가 추가된것을 확인할 수 있다.

web/Spring 2016.12.21

Mybatis의 #{} 문법 사용방법

Mapper에서 #{num}에 들어가는 값은 getNum(), setNum()을 의미한다. 만약 하나의 mapper에서 두 개이상의 #{userid}, #{userpw} 와 같이 사용된다면 그것은 map의 형태로 들어오는 데이터의 key값이 안에 들어가 있는 문자열이다. 예를 들어 mapper에 insert into tbl_member (userid, userpw, username, email) values (#{userid}, #{userpw}, #{username}, #{email}) 다음과 같이 되어 있을 경우 DAOImpl 클래스에서 Public

web/Spring 2016.12.21

Mybatis 관련 정리

iBaties Mybatis이전 버전인 iBaties는 개발자가 모든 SQL을 XML로 작성하고, SQL 문을 사용하는 DAO 클래스를 설계하는 SQL문을 사용하는 DAO 클래스를 설계해서 SQL 문을 호출하는 방식의 코드 Mybatis Mybatis는 ibaties에서 애노테이션을 지원하고 인터페이스와 애노테이션을 통해서 SQL 문을 설정하고처리할 수 있는 형태로 발전 Mybaties 특징 XML만을 이용해서 SQL문을 설정, DAO에서는 XML을 찾아서 실행하는 코드를 작성하는 방식 (대표적으로 사용) -> SQL 문은 별도의 XML로 작성되기 때문에 SQL문의 수정이나 유지보수에 적합 -> 개발 시 코드의 양이 많아지고, 복잡성이 증가 애노테이션과 인터페이스만을 이용해서 SQL문을 설정 -> 별도의..

web/Spring 2016.12.21

typeAliases 사용방법

XML Mapper를 이용하는 데 있어 매번 parameterType이나 resultType을 패키지까지 포함된 클래스명을 작성하는 일이 번거롭다면 Mybatis의 설정 파일 mybatis-config.xml을 사용해서 typeAliases를지정해주면 된다. typeAliases는 하위 요소로 package와 typeAlias 요소를 가질 수 있다. 이 방법을 이용하면 매번 parameterType이나 resultType에 사용하는 클래스의 이름을 지정해줄 필요가 없다. 그렇게 되면 Mapper xml 에서 더 이상 resultType, marameterType에 긴 패키지명을 포함할 필요가 없다. 클래스명만 입력하면 된다.기존의 mapper파일에서 resultType을 설정할때 길게 입력하였다.다음과 ..

web/Spring 2016.12.21
반응형