반응형

Java version 7 functions

 

Functions

1. try-with-resources

try (InputStream in = new FileInputStream(inFile); // try에 자원 객체를 전달하면 finally 블록으로 종료 처리를 하지 않아도 try 코드 블록이 끝나면 자동으로 자원을 종료해주는 기능.
     OutputStream out = new FileOutputStream(outFile)) {
    ...
} catch(IOException ex) {
    ...
}

 

2. multicatch

try (InputStream in = new FileInputStream(inFile); // try에 자원 객체를 전달하면 finally 블록으로 종료 처리를 하지 않아도 try 코드 블록이 끝나면 자동으로 자원을 종료해주는 기능.
     OutputStream out = new FileOutputStream(outFile)) {
    ...
} catch(IOException ex) {
    ...
}

 

3. switch-case에 문자열 지원

String str = "비밀";

switch(str) {
    case "진실": ...
         break;
    case "비밀": ...
         break;
    ...
    default: ...
         break;
}

 

4. Fork/Join

  • 어떤 계산 작업을 할 때 여러 개로 나누어 계산한 후 결과를 모으는 작업합니다.
  • 별도로 구현하지 않아도 라이브러리에서 Work Stealing 작업을 알아서 수행합니다.
// 기본
long total = 0;
for(int loop = from; loop <= to; loop++) {
	total += loop;
}

// Fork/Join
public class ForkJoinSample {
	static final ForkJoinPool mainPool = new ForkJoinPool();
    
	public static void main(String[] args) {
		long from = 0;
		long to = 10;
		GetSum sum = new GetSum(from, to);
		
		// 계산을 수행하는 객체를 넘겨주어 작업을 실행하고 결과를 받음
		Long result = mainPool.invoke(sum);
		System.out.println("total:" + result);
	}
}

public clas GetSum extends RecursiveTask<Long> {
	long from, to;
    
  public GetSum(long from, long to) {
    this.from = from;
    this.to = to;
	}

	public Long compute() {
		long gap = to - from;
		
		// 작업 단위가 작을 경우
		if(gap <= 3) {
			long result = 0;
		  for(int loop = from; loop <= to; loop++) {
			  result += loop;
			}
		  
			return result;
		}
		
		// 작업 단위가 클 경우
		// 두 개의 작업으로 나누어 동시에 실행시키고, 두 작업이 끝날 때 까지 결과를 기다림
		long middle = (from + to) / 2;
		GetSum prev = new GetSum(from, middle);
		prev.fork();
		GetSum post = new GetSum(middle + 1, to);
		// compute() 함수는 람다식을 통해서 기존의 값에 어떻게 연산을 할지 지정할 수 있습니다.
		return post.compute() + prev.join();
        
  }
}

 

5. ECC 암호화 기능 제공

반응형

+ Recent posts