상단

Java, Servlet, JSP에 대한 기본적인 사항을 정리한다.

 

프로그램 문법


 

Java 기초

  • 주석

 
 //  한줄 짜리 주석
 /*  여러줄 짜리 주석  */
 

상수/변수 선언

  • 변수의 선언/삭제 및 적용 범위

 
 

연산자

 

조건문/반복문

 

오류 처리

  • 오류 수집

 
 try {
 } catch(ex) {
 } finally {
 }
 

코드 변환

  • UTF-8로 인코딩 parameter을 서버(Java)에서 받는 방법

 
 request.setCharacterEncoding("utf-8");
 String name = request.getParameter("name");
 

기타 사항

 

입출력


브라우저 입출력

  • URL

 
 URL url = null;
 HttpURLConnection conn = null;
 //BufferedWriter out = null;
 PrintWriter out = null;
 BufferedReader inp = null;
 String buf = null;
 
 try {
     url = new URL(requestURL);
     conn = (HttpURLConnection) url.openConnection();
     conn.setRequestMethod("POST");
     conn.setRequestProperty("Content-type", "application/x-www-form-urlencoded");
     conn.setDoOutput(true);
     conn.setDoInput(true);
     
     //out = new BufferedWriter(new OutputStreamWriter(conn.getOutputStream()));
     out = new PrintWriter(new OutputStreamWriter(conn.getOutputStream(), "8859_1"), true);
     out.write("Post data");
     out.flush();
     
     if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) {
         inp = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
         while ((buf = inp.readLine()) != null) {
             System.out.println(buf);
         }
     } else {
         System.out.println("Bad post ... : " + conn.getResponseCode() + " : " + conn.getResponseMessage());
     }
     inp.close();
     out.close();
 } catch (MalformedURLException e) {
     System.out.println(e);
     return false;
 } catch (IOException e) {
     System.out.println(e);
     return false;
 } finally {
     if (inp != null) {
     try { inp.close(); } catch (IOException e) { }
     inp = null;
 }
 
 if (out != null) {
 try { out.close(); } catch (Exception e) { }
 out = null;
 }
 }
 

Cookie 입출력

  • Cookie 조회

 
 private String getCookie(HttpServletRequest req, String name)
 {
 	String rtStr = null; 
 	Cookie cookies[](.md) = null;
 
 	cookies = req.getCookies();
 	for (int idx = 0;idx < cookies.length;idx++) {
 	    if (cookies[idx](idx.md).getName().equals(name)) {
 	    	rtStr = cookies[idx](idx.md).getValue();
 	    	break;
 	    }
 	}
 	return rtStr;
 }
 
  • Cookie 등록

 
 Cookie cookie = new Cookie("username", name);
 cookie.setMaxAge(30*60);  //30분...
 response.addCookie(cookie);
 

Session 입출력

Container 입출력

콘솔 입출력

파일 입출력

 String inputLine = null;
 File tmpFile = null;
 BufferedReader inp = null;
 
 tmpFile = new File("/docs/hello.html");
 try {
     inp = new BufferedReader(new FileReader(tmpFile));
     while ((inputLine = inp.readLine()) != null) {
     }
 } catch (FileNotFoundException e) {
     e.printStackTrace();
 } catch (IOException e) {
     e.printStackTrace();
 } finally {
     if (inp != null) {
         try {
             inp.close();
         } catch (IOException e) {
             e.printStackTrace();
         }
     }
     inp = null;
 }
 

Excel File 입출력

 
 package com.jopenbusiness.util;
 
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
 
 import org.apache.poi.ss.usermodel.Cell;
 import org.apache.poi.ss.usermodel.DateUtil;
 import org.apache.poi.xssf.usermodel.XSSFCell;
 import org.apache.poi.xssf.usermodel.XSSFRow;
 import org.apache.poi.xssf.usermodel.XSSFSheet;
 import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 
 //---	HSSF : ~.xls, XSSF : ~.xlsx 
 public class UtilExcel {
 	public static XSSFWorkbook getWorkbook(String fileName) { 
 		try { 
 			return new XSSFWorkbook(new FileInputStream(new File (fileName)));
 		} catch (FileNotFoundException e) {
 			e.printStackTrace();
 		} catch (IOException e) {
 			e.printStackTrace();
 		}
 		return null;
 	}
  	
 	public static XSSFSheet getSheet(String fileName, String sheetName) {
 		XSSFWorkbook excel = null;
 		
 		excel = getWorkbook(fileName);
 		return (excel == null) ? null:excel.getSheet(sheetName);
 	}
  	
 	public static XSSFCell getCell(XSSFSheet sheet, Integer idxRow, Integer idxCol) {
 		XSSFRow row = null;
 		
 		row = sheet.getRow(idxRow);
 		return (row == null) ? null:row.getCell(idxCol);
 	}
  
 	public static String getCellType(XSSFCell cell) {
 		if (cell == null) {
 			return "String";
 		}
 		switch (cell.getCellType()) {
 		case Cell.CELL_TYPE_NUMERIC : return (DateUtil.isCellDateFormatted(cell)) ? "Date/" + cell.getCellType():"Numeric/" + cell.getCellType();
 		case Cell.CELL_TYPE_STRING 	: return "String/" + cell.getCellType();
 		case Cell.CELL_TYPE_FORMULA : return "Formula/" + cell.getCellType();
 		case Cell.CELL_TYPE_BOOLEAN : return "Boolean/" + cell.getCellType();
 
 		case Cell.CELL_TYPE_BLANK 	: return "Blank/" + cell.getCellType();
 		case Cell.CELL_TYPE_ERROR 	: return "Error/" + cell.getCellType();
 		default 					: return "Other/" + cell.getCellType();
 		}
 	}
  
 	public static String getCellType(XSSFSheet sheet, Integer idxRow, Integer idxCol) {
 		return getCellType(getCell(sheet, idxRow, idxCol));
 	}
  
 	public static String getCellString(XSSFCell cell, String defaultValue) {
 		String rtStr = null;
  
 		if (cell == null) {
 			return defaultValue;
 		}
  		
 		switch (cell.getCellType()) {
 		case Cell.CELL_TYPE_STRING :
 			rtStr = cell.getStringCellValue();
 			break;
 		case Cell.CELL_TYPE_NUMERIC :
 			if (DateUtil.isCellDateFormatted(cell)) {
 				rtStr = UtilDate.getFormattedDate(cell.getDateCellValue(), UtilDate.SIMPLE_DATE_FORMAT);
 			} else {
 				rtStr = String.valueOf(cell.getNumericCellValue());
 			}
 			break;
 		case Cell.CELL_TYPE_BOOLEAN :
 			rtStr = (cell.getBooleanCellValue()) ? "true":"false";
 			break;
 		case Cell.CELL_TYPE_FORMULA :
 //			rtStr = cell.getCellFormula();
  			rtStr = cell.getRawValue();
  			break;
 		case Cell.CELL_TYPE_BLANK :
 			rtStr = cell.getStringCellValue();
 			break;
 		case Cell.CELL_TYPE_ERROR :
 			rtStr = cell.getErrorCellString();
 			break;
 		default :
 			rtStr = "/" + cell.getCellType() + "/" + cell.toString() + "/";
 		}
 		return rtStr;
 	}
  
 	public static String getCellString(XSSFCell cell) {
 		return getCellString(cell, "");
 	}
  	
 	public static String getCellString(XSSFSheet sheet, Integer idxRow, Integer idxCol, String defaultValue) {
 		return getCellString(getCell(sheet, idxRow, idxCol), defaultValue);
 	}
  
 	public static String getCellString(XSSFSheet sheet, Integer idxRow, Integer idxCol) {
 		return getCellString(sheet, idxRow, idxCol, "");
 	}
  	
 	public static List getRowStrings(XSSFSheet sheet, Integer idxRow, Integer idxColFr, Integer idxColTo) {
 		List rtList = null;
  		
 		rtList = new ArrayList();
 		for (Integer idx = idxColFr;idx <= idxColTo;idx++) {
 			rtList.add(getCellString(sheet, idxRow, idx));
 		}
 		return rtList;
 	}
  	
 	public static List> getTableStrings(XSSFSheet sheet, Integer idxColFr, Integer idxColTo) {
 		List> rtList = null;
 		List rowList = null;
 		Integer cntSkip = null;
 		Integer idxRow = null;
 		String tmpApply = null;
  
 		idxRow = 0;
 		cntSkip = 0;
 		rtList = new ArrayList>();
 		while (true) {
 			rowList = getRowStrings(sheet, idxRow, idxColFr, idxColTo);
 			if (sheet.getLastRowNum() < idxRow) {
 				break;
 			}
 			idxRow++;
 
 			tmpApply = rowList.get(0);
 			if ((tmpApply != null) && (tmpApply.equalsIgnoreCase("End Table"))) {
 				break;
 			}
  			
 			if ((tmpApply == null) || (!tmpApply.equals("적용"))) {
 				cntSkip = cntSkip + 1;
 				if (100 < cntSkip) {
 					break;
 				}
 				continue;
 			}			
 			cntSkip = 0;
 			rtList.add(rowList);
 		}
 		return rtList;
 	}
  
 	public static List findRowStrings(XSSFSheet sheet, Integer findIdx, String findStr, Integer idxColFr, Integer idxColTo) {
  		String tmpStr = null;
 
 		for (Integer idx = sheet.getFirstRowNum();idx <= sheet.getLastRowNum();idx++) {
 			tmpStr = getCellString(sheet, idx, findIdx);
 			if ((tmpStr != null) && (tmpStr.equals(findStr))) {
 				return getRowStrings(sheet, idx, idxColFr, idxColTo);
 			}
 		}		
 		return null;
 	}
  	
 	public static String toString(List dataStr) {
 		String rtStr = null;
 		
 		for (String item : dataStr) {
 			rtStr = (rtStr == null) ? "":rtStr + ", ";
 			rtStr = rtStr + "[+ item + "](")";
 		}
 		return rtStr;
 	}
  }
 

Java Reflection


Java에서 제공하는 Java Reflection 기능을 사용하면 동적으로 Class, Method를 관리할 수 있다.

 
  • Java Reflection Class (rt.jar)

    • sun.reflect

      • Reflection, ReflectionFactory

    • sun.refletc.misc

      • ConstructorUtil, FieldUtil, MethodUtil, ReflectUtil, Trampoline

     
  • 사용 예 1

 
         try {
            Class c = Class.forName(args[0](0.md)); //---  c = String.class
            Method m[](.md) = c.getDeclaredMethods();
  //--- getDeclaredMethods()메소드 대신 getMethods()를 사용하게 되면, 상속된 메소드의 정보까지 얻을수있다.
            for (int i = 0; i < m.length; i++)
            System.out.println(m[i](i.md).toString());
         }
         catch (Throwable e) {
            System.err.println(e);
         }
 
  //--- 생성자 반환
     Constructor ctorlist[](.md)
               = cls.getDeclaredConstructors();
 
    Class cls = Class.forName("A");
            boolean b1 
              = cls.isInstance(new Integer(37));
 
  Field fieldlist[](.md) 
              = cls.getDeclaredFields();
 
 //-- Method 실행
        Class cls = Class.forName("method2");
           Class partypes[] = new Class[2](2.md);
            partypes[0](0.md) = Integer.TYPE;
            partypes[1](1.md) = Integer.TYPE;
            Method meth = cls.getMethod(
              "add", partypes);
            method2 methobj = new method2();
            Object arglist[] = new Object[2](2.md);
            arglist[0](0.md) = new Integer(37);
            arglist[1](1.md) = new Integer(47);
            Object retobj 
              = meth.invoke(methobj, arglist);
            Integer retval = (Integer)retobj;
            System.out.println(retval.intValue());
 
 //--- 클래스 생성
           Class cls = Class.forName("constructor2");
           Class partypes[] = new Class[2](2.md);
            partypes[0](0.md) = Integer.TYPE;
            partypes[1](1.md) = Integer.TYPE;
            Constructor ct 
              = cls.getConstructor(partypes);
            Object arglist[] = new Object[2](2.md);
            arglist[0](0.md) = new Integer(37);
            arglist[1](1.md) = new Integer(47);
            Object retobj = ct.newInstance(arglist);
 
 //--- 배열 관리
      try {
            Class cls = Class.forName(
              "java.lang.String");
            Object arr = Array.newInstance(cls, 10);
            Array.set(arr, 5, "this is a test");
            String s = (String)Array.get(arr, 5);
            System.out.println(s);
 
 
 

Shutdown 관리


  • Shutdown 상황

    • Throwable

      • Exception, Error

    • SIGINT : Ctrl_C, ShutdownHook 호출됨

    • SIGTERM : kill ~, ShutdownHook 호출됨

    • SIGKILL : kill -9 ~

 
 

자주 사용하는 Class


HashMap

 HashMap map = new HashMap();
 
 map.put("name", "value");
 for (Map.Entry entry : processInfo.entrySet()) {
    entry.getKey(), entry.getValue()
 }
 

ArrayList

 

사용자 정의 라이브러리


윈도우 Command Line에서 Java 프로그램 실행

  • extractHtml.vbs (WScript 파일)

 
 '===============================================================================
 '       프로그램 명     : /extractHtml.vbs
 '       프로그램 설명   : Java를 컴파일하고 실행하기 위한 스크립트
 '       작성자          : 산사랑
 '       작성일          : 2008.07.08 ~ 2008.07.08
 '------ [관리](History) ---------------------------------------------------------
 '       수정자          :
 '       수정일          :
 '       수정 내용       :
 '------ [Copyright](Copyright.md) ------------------------------------------------------------
 '      Copyright (c) 1995-2008 pnuskgh, All rights reserved.
 '===============================================================================
 On Error Resume Next
 
 '-------------------------------------------------------------------------------
 '       Main Routine
 '-------------------------------------------------------------------------------
 Dim objShell
 
 Set objShell = CreateObject("WScript.Shell")
 'objShell.Run "cmd /C ""javac extractHtml.java & java extractHtml & notepad extractHtml.out & pause"""
 objShell.Run "cmd /C ""javac extractHtml.java & java extractHtml & notepad extractHtml.out"""
 Set objShell = Nothing
 
 '===============================================================================
 '       프로그램 명     : /ant_run.vbs
 '===============================================================================
 

DES 암복호화

  • DES 암호화, 복호화 모듈

 
 public class UtilCrypto {
 	public static Key desKey = null;
 
 	public static Key getDesKey() {
 		if (desKey == null) {
 			desKey = makeDesKey();
 		}
 		return desKey;
 	}
 
 	public static void setDesKey(Key desKey) {
 		UtilCrypto.desKey = desKey;
 	}
 	
 	public static Key makeDesKey() {
 		KeyGenerator generator = null;
 
 		try {
 			generator = KeyGenerator.getInstance("DES");
 //			generator = KeyGenerator.getInstance("TripleDES");
 //			generator = KeyGenerator.getInstance("AES");
 			generator.init(new SecureRandom());
 			return generator.generateKey();
 		} catch (NoSuchAlgorithmException e) {
 			e.printStackTrace();
 		}
 		return null;
 	}
 
 	public static String crypt(String algorithm, Integer cryptMode, Key key, String inpStr) {
 		String rtStr = null;
 		Cipher cipher = null;
 		
 		if ((inpStr == null) || (inpStr.length() == 0)) {
 			return "";
 		}
 		
 		try {
 			if (algorithm.equals("DES")) {
 				cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
 			} else if (algorithm.equals("TripleDES")) {
 				cipher = Cipher.getInstance("TripleDES/ECB/PKCS5Padding");
 			} else if (algorithm.equals("RSA")) {
 				cipher = Cipher.getInstance("RSA");
 			} else {
 				cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
 			}
 			
 			if (cryptMode == Cipher.ENCRYPT_MODE) {
 				cipher.init(Cipher.ENCRYPT_MODE, key);
 				rtStr = Base64Encoder.encode(cipher.doFinal(inpStr.getBytes("UTF-8")));
 			} else {
 				cipher.init(Cipher.DECRYPT_MODE, key);
 				rtStr = new String(cipher.doFinal(Base64Decoder.decodeToBytes(inpStr)), "UTF-8");
 			}
 		} catch (NoSuchAlgorithmException e) {
 			e.printStackTrace();
 		} catch (NoSuchPaddingException e) {
 			e.printStackTrace();
 		} catch (InvalidKeyException e) {
 			e.printStackTrace();
 		} catch (IllegalBlockSizeException e) {
 			e.printStackTrace();
 		} catch (BadPaddingException e) {
 			e.printStackTrace();
 		} catch (UnsupportedEncodingException e) {
 			e.printStackTrace();
 		}
 		return rtStr;
 	}
 	
 	public static String encryptDes(String plain) {
 		return crypt("DES", Cipher.ENCRYPT_MODE, getDesKey(), plain);
 	}
 	
 	public static String decryptDes(String security) {
 		return crypt("DES", Cipher.DECRYPT_MODE, getDesKey(), security);
 	}
 }
 

RSA 암복호화

 public class UtilCrypto {
 	public static KeyPair rsaKey = null;
 
 	public static KeyPair getRsaKeyPair() {
 		if (rsaKey == null) {
 			rsaKey = makeRsaKeyPair();
 		}
 		return rsaKey;
 	}
 	
 	public static Key getRsaPublicKey() {
 		if (rsaKey == null) {
 			getRsaKeyPair();
 		}
 		return rsaKey.getPublic();
 	}
 
 	public static Key getRsaPrivateKey() {
 		if (rsaKey == null) {
 			getRsaKeyPair();
 		}
 		return rsaKey.getPrivate();
 	}
 	
 	public static void setRsaKeyPair(KeyPair rsaKey) {
 		UtilCrypto.rsaKey = rsaKey;
 	}
 	
 	public static KeyPair makeRsaKeyPair() {
 		KeyPairGenerator generator = null;
 		
 		try {
 			generator = KeyPairGenerator.getInstance("RSA");
 			generator.initialize(2048);						//--- keysize
 			return generator.genKeyPair();
 		} catch (NoSuchAlgorithmException e) {
 			e.printStackTrace();
 		}
 		return null;
 	}
 
 	public static String encryptRsa(String plain) {
 		return crypt("RSA", Cipher.ENCRYPT_MODE, getRsaPublicKey(), plain);
 	}
 	
 	public static String decryptRsa(String security) {
 		return crypt("RSA", Cipher.DECRYPT_MODE, getRsaPrivateKey(), security);
 	}
 }
 

사용자 정의 프로그램


HTML에서 원하는 문자열 추출

  • extractHtml.java : 여러 페이지로 작성된 HTML에서 원하는 문자열을 추출하는 프로그램, 필요시 수정하여 사용하세요.

 
 //==============================================================================
 //      프로그램 명     : extractHtml.java, Version 0.01
 //      프로그램 설명   : HTML에서 원하는 문자열을 추출
 //      작성자          : 산사랑
 //      작성일          : 2008.07.08 ~ 2008.07.08
 //----- [관리](History) ---------------------------------------------------------
 //      수정자          :
 //      수정일          :
 //      수정 내용       :
 //----- [Copyright](Copyright.md) ------------------------------------------------------------
 //      Copyright (c) 1995-2008 pnuskgh, All rights reserved.
 //==============================================================================
 import java.io.*;
 import java.net.*;
 
 class extractHtml
 {
     public static void main(String args[](.md)) 
     {
         int idx = 0, checkIdx = 0, cntRead = 0;
         URL url = null;
         String strUrl = "http://serverHost/main.php?catid=&skey=&page=";
         String inputLine = null;
         BufferedReader inp = null;
 
         BufferedWriter out = null;
         File outFile = null;
         String fileNameOut = "extractHtml.out";
         String delimiter = "|";
 
         try {
             outFile = new File(fileNameOut);
             if (outFile.exists()) {
                 outFile.delete();
             }
             out = new BufferedWriter(new FileWriter(outFile));
 
             for (idx = 1;idx <= 221;idx++) {
                 url = new URL(strUrl + idx);
                 inp = new BufferedReader(new InputStreamReader(url.openStream()));
                 while ((inputLine = inp.readLine()) != null) {
                     if (-1 < inputLine.indexOf("main.php?in=building_detail")) {
                         checkIdx = checkIdx + 1;
                         if (checkIdx == 1) {
                             out.write(idx + delimiter + ++cntRead + delimiter);
                             out.write(inputLine.substring(inputLine.lastIndexOf("'>") + 2, inputLine.indexOf("")) + delimiter);
                         }
                         if (checkIdx == 2) {
                             out.write(inputLine.substring(inputLine.lastIndexOf("'>") + 2, inputLine.indexOf("")) + delimiter);
                         }
                     }
                     if (-1 < inputLine.indexOf("/main.php?in=corp_detail&type=corp")) {
                         checkIdx = checkIdx + 1;
                         if (checkIdx == 5) {
                             out.write(inputLine.substring(inputLine.lastIndexOf("'>") + 2, inputLine.indexOf("")) + delimiter);
                             out.write("http://serverHost/main.php?id=" + inputLine.substring(inputLine.indexOf("id=") + 3, inputLine.indexOf("page=") - 1) + "\r\n");
                             checkIdx = 0;
                         } else {
                             out.write(inputLine.substring(inputLine.lastIndexOf("'>") + 2, inputLine.indexOf("")) +  delimiter);
                         }
                     }
                 }
                 inp.close();
             }
             out.flush();
             out.close();
         } catch (Exception e) {
             System.out.println(e);
         } finally {
     	    if (inp != null) {
     	        try {
                     inp.close();
                 } catch (IOException e) {
                     e.printStackTrace();
                 }
     	    }
     	    inp = null;
 
     	    if (out != null) {
     	        try {
                     out.close();
                 } catch (IOException e) {
                     e.printStackTrace();
                 }
     	    }
     	    out = null;
         }
     }
 }
 
 //==============================================================================
 //      프로그램 명     : extractHtml.java
 //==============================================================================
 

UUID 생성

  • Universally Unique Identifier(또는 Globally Unique Identifier)의 종류

    • v1 : MAC address based

    • v2 : DCE Security based

    • v3 : Name based + MD5 hash

    • v4 : Random

    • v5 : Name based + SHA1 hash

     
  • UUID의 구성

    • 128 bits (16 bytes) 숫자

    • 8-4-4-4-12 형태의 36개의 문자열

     
  • Sample

 
 package kr.co.daou.common;
 
 import java.util.Random;
 import java.util.UUID;
 
 import org.safehaus.uuid.UUIDGenerator;
 
 public class GUID
 {
 	private static Random rand = null;
 	
 	public static void main(String args[](.md)) {
 		System.out.println("Unique ID Generation Test");
 		
 		for (int cnt = 0;cnt < 100;cnt ++) {
 			System.out.println(getPrefixUUID("user"));
 		}
 	}
 	
 	public static String getPrefixUUID(String prefix)
 	{
 	    return prefix + "." + getUUID1();
 	}
 	
 	public static String getUUID() {
 		return getUUID1();
 	}
 	
 
 	//--- MAC address based, [uuid-3.2.jar (MIT License)](http://johannburkard.de/software/uuid/) 사용
 	public static String getUUID1() {
 		return (new com.eaio.uuid.UUID()).toString();
 	}
 
 	//--- Name based + MD5 hash, java.util.UUID 사용
 	public static String getUUID3() {
 		return getUUID3("Hello World!");
 	}
 
 	public static String getUUID3(String seed) {
 		seed = seed + Long.toString(rand.nextLong());
 		return UUID.nameUUIDFromBytes(seed.getBytes()).toString();
 	}
 
 	//--- Random, java.util.UUID 사용
 	public static String getUUID4() {
 		return UUID.randomUUID().toString();
 	}
 
 	//--- Random, [jug-lgpl-2.0.0.jar (GNU LGPL)](http://jug.safehaus.org/) 사용
 	public static String getUUID4_1() {
 		return UUIDGenerator.getInstance().generateRandomBasedUUID().toString();
 	}
 
 	//--- [jug-lgpl-2.0.0.jar (GNU LGPL)](http://jug.safehaus.org/) 사용
 	public static String getUUID_jug() {
 		return UUIDGenerator.getInstance().generateTimeBasedUUID().toString();
 	}
 
 	static {
 		rand = new Random(System.currentTimeMillis());
 	}
 }
 
 
 

Java 8


 
 
 
 
 

람다식 (Lambda Expression)

 

함수형 프로그램밍을 통해 멀티 코어 CPU 지원

 

람다식 형태

 
  • (x, y) -> { x + y }

  • (x, y) -> x + y

  • x -> x + 5

 
 
 //--- 함수형 인터페이스 : 추상 메서드가 한개인 인터페이스
 @FunctionalInterface
 public interface funcArg {
 int methodOne(int a, int b);   
 }
 
 funcArg aa = (a, b) -> { return a + b }
 
 public void test(int one, int two, funcArg arg1) {
 arg1.methodOne(one, two);
 }
 test(1, 2, aa);
 

Stream (Java Collection API)

 
  • Collection을 Pipe 형식으로 처리하는 함수형 API 지원

  • Collection (List, Map, Set)을 Stream으로 처리

  • java.util.stream

 
 
 List numbers = null;
 List strings = null;
 
 numbers = Arrays.asList(1, 2, 3, 4, 5, 6);
 
 for (Integer number : numbers) {                       //--- 예전 방식
 System.out.println(number);
 }
 
 numbers.forEach(value -> System.out.println(value));   //--- 최신 방식 
 //--- numbers.forEach((Integer value) -> System.out.println(value));
 //--- numbers.forEach(System.out::println);
 
 strings = numbers.stream()
            .filter(v -> v > 4)
            .map(v -> new String("" + (v + 10)))
            .collect(Collectors.toList());
 strings.forEach(System.out::println);
 
 
 

스트림의 종류

 
  • Stream<T>

  • IntStream, LongStream, DoubleStream

 
 
 
 

병렬 처리

 
  • 순차 처리 스트림

  • *numbers.stream()

  • *numbers.parallelStream().sequential()

  • 병렬 처리 스트림

  • *numbers.parallelStream()

  • *numbers.stream().parallel()

 
 
 
 

스트림용 함수

 
  • .forEach() : 각각에 대해서 처리

  • .anyMatch() : 조건을 만족할 때 True 반환

  • .filter() : True에 해당하는 데이터 반환

  • .sorted() : 정렬 조건에 따라 정렬

  • ~.collect(Collectors.toList()) : List 반환

  • ~.findFirst() : 첫번째 데이터 반환

  • .orElseThrow(() -> new Exception()) : 데이터가 없으면 Exception 발생

 
 
 
 

Nashorn

 

[[JavaScript|JavaScript]] 엔진으로 ECMAScript 5.1 (ECMA-262) 준수

 

Java 7의 invokedynamic 활용, Java 객체 호출 가능

 

javax.script (JSR 223) API 지원

 
 
 

Nashorn (나즈혼) 실행

 
  • jjs 명령어

  • ScriptManager

 
 

ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn");
engine.eval("~");

 

문제 해결


  • "java.lang.OutOfMemoryError: PermGen space" 오류가 발생할 경우 다음 옵션을 준다.

 
 -Xms512m
 -Xmx1024m
 -XX:PermSize=64M         //--- 해당 옵션
 -XX:MaxPermSize=128M     //--- 해당 옵션
 -verbose:gc
 -verbose:class
 

관련 자료


 
 
 

Java Decompiler

 
  • JD-GUI : GUI 기반의 Java Decompiler (free for non-commercial use)

  • JAD : 고전적인 Java Decompiler

 
 

참고 문헌


 
 

분류: 기술_자료실 
Java 
프로그램_언어

최종 수정일: 2024-09-30 12:26:18

이전글 :
다음글 :