본문 바로가기

java

(22)
[JAVA] Try-with-Resouce가 코드를 만들어 주는 방법 자바 7부터 try-with-resource 가 등장했다. try-with-resource를 사용하면 코드의 가독성이 훨씬 좋아진다는 장점이 있다. 아래의 예제를 통해 살펴보자. [기존 try-catch-finally] static void copy(String src, String dst) throws IOException { InputStream in = new FileInputStream(src); try{ OutputStream out = new FileOutputStream(dst) ; try{ byte[] buf = new byte[BUFFER_SIZE]; int n; while ((n = in.read(buf)) >= 0) out.write(buf , 0 , n); } finally { ou..
코어의 수 확인하기(Get OS-level system information) 1. 코어의 수 확인하기 https://stackoverflow.com/questions/25552/get-os-level-system-information Get OS-level system information I'm currently building a Java app that could end up being run on many different platforms, but primarily variants of Solaris, Linux and Windows. Has anyone been able to successfully extract inform... stackoverflow.com 2. 스레드 풀의 적정 크기는? 스레드 풀의 적절한 사이즈는? [스레드 풀/Thread Pool] 스레드 풀..
[JAVA]옵저버 패턴 예제 옵저버 패턴으로 트위터 같은 커스터 마이즈된 알림 시스템을 설계하고 구현할 수 있다. 다양한 신문 매체(뉴욕 타임즈, 가디언, 르몽드)가 뉴스 트윗을 구독하고 있으며 특정 키워드를 포함하는 트윗이 등록되면 알림을 받고 싶어한다. 우선 다양한 옵저버를 그룹화할 Observer 인터페이스가 필요하다. Observer 인터페이스는 새로운 트윗이 있을때 주제(Feed) 가 호출할 수 있도록 notify라고 하는 하나의 메서드를 제공한다. public interface Observer { void notify(String tweet); } public class NYTimes implements Observer { @Override public void notify(String tweet) { if(tweet !..
[JAVA] 람다식 실용예제 - 실행 어라운드 패턴 실행 어라운드 패턴 자원처리에 처리하는 **순환 패턴 Recurrent pattern 은 자원을 열고, 처리한 다음에, 자원을 닫는 순서로 이루어 진다. 설정과 정리 과정은 대부분 비슷하다. 실행 어라운드 패턴은 실제 자원을 처리하는 코드를 설정과 정리 두 과정이 둘러싸는 형태를 갖는다. 아래의 코드에서 기존의 설정, 정리과정은 재사용하고 processFile 메서드만 다른 동작을 수행하도록 명령 할 수 있다. 1단계 : 동작 파라미터화 public String processFile() throws IOEception { try(BufferedReader br = new BufferedReader(new FileReader("data.txt"))) { return br.readLine(); } } 2단계..
디자인 패턴(Design Pattern) - 목적에 따른 분류 디자인 패턴이란? (소프트웨어) 디자인 패턴이란 특정 문맥에서 공통적으로 발생하는 문제에 대해 쓰이는 재사용 가능한 해결책 목적별로 일정한 패턴이 제시되어 있음 완전한 정답이 되는 알고리즘과 달리 현재 상황에 맞춰 최적화된 패턴을 결정하여 사용하는 것이 좋음 대표적으로 구체화된 디자인 패턴은 GoF(Gang of Four) 에서 제시한 23개의 패턴이 있음 * Gang of Four : Erich Gamma, Richard Helm, Ralph johnson, john Vissides, 총 4명을 일컬음 디자인 패턴의 장점 개발자 간의 원활한 협업이 가능 소프트웨어의 구조를 파악하기 용이함 재사용을 통해 개발 시간 단축 설계 변경이 있을 경우 비교적 원활하게 조치가 가능 디자인 패턴은 개발자 세계에서 공..
[JAVA]java Serializable 직렬화란? (1) 데이터 구조나 오브젝트 상태를 동일하거나 다른 컴퓨터 환경에 저장(이를테면 파일이나 메모리 버퍼에서, 또는 네트워크 연결 링크간 전송) 하고 나중에 재구성 할 수 있는 포맷으로 변환하는 과정이다. 오브젝트를 직렬화 하는 과정의 반대로, 일련의 바이트로부터 데이터 구조를 추출하는 일은 역직렬화라고 한다. 위키 백과 - https://ko.wikipedia.org/wiki/%EC%A7%81%EB%A0%AC%ED%99%94 (2) 시스템적으로 이야기 하자면 JVM(Java Virtual Machin 이하 JVM) 의 메모리 상주(힙 또는 스택)되어 있는 객체 데이터를 바이트 형태로 변환하는 기술과 직렬화된 바이트 형태의 데이터를 객체로 변환해서 JVM 으로 상주 시키는 형태를 같이 이야기 한..
[JAVA] 자바의 정석 - Stream 스트림(Stream)이란? - List 를 정렬할 때는 Collections.sort(), 배열을 정렬할 때는 Arrays.sort() 를 사용해야한다. 이는 메서드의 기능 중복과 데이터 소스마다 다른 방식으로 다뤄야 한다는 점에서 재사용성과 중복성의 불편함이 있다. 이러한 문제를 다루기 위해 만든것이 '스트림(Stream)' - 스트림(Stream) 은 데이터 소스를 추상화 하고 데이터를 다루는데 자주 사용되는 메서드를을 정의해 놓았다. - 데이터 소스를 추상화 해 놓았다는 것은, 데이터가 무엇이던 간에 같은 방식으로 다룰수 있게 되었다는 것이다. 두 데이터 소스 (String[], List)를 기반으로 하는 스트림 생성 방법은 다음과 같다 String[] strArr = { "aaa", "ddd" ,..