본문 바로가기

java48

[Java] JAVA9 의 특징 JAVA9의 특징에 대하여 정리된 글들이 있어서 찾아서 스크랩 해보았다. - jshell의 제공 - 스크립트 언어와 유사한 shell 제공- JAVA 모듈화 도입 - 필요한 라이브러리만 JAR로 묶어서 경량화 가능 나만 모르고 있던 – Java 9 (Java9 빠르게 훑어 보기)Java 9의 변화와 특징 대충 정리 Java9 특징 훑어보기 from duriepark 유현석 자바9 특징 (Java9 Features) from Chang-Hwan Han 2017. 11. 10.
[java] jar 파일 실행 Main 클래스가 포함된 파일을 jar로 묶어서 아래와 같이 실행한다. -cp에 필요한 클래스 파일을 콜론(:)을 이용하여 입력한다. * 윈도우는 세미콜론(;) 디렉토리 전체를 설정할 때는 *를 이용한다. 주의할 점은 *.jar은 안된다. java -cp jar1:jar2 your.package.MainClass arg1 arg2 java -cp ./*:/usr/lib/* your.package.MainClass args 2017. 7. 27.
[Java] Object와 String 객체의 equals() 비교 자바의 기본 객체 함수 중 하나인 equal() 함수는 객체의 값을 비교하는 연산자이다. == 연산자는 객체의 주소를 비교하고, equals()는 객체의 값을 비교하는 연산자이다. 보통 equals()는 문자열(String)의 값을 비교하는데 많이 사용한다. Object의 equals() 함수는 다음과 같다. 즉, 객체의 주소값을 비교하여 반환한다. public boolean equals(Object obj) { return (this == obj); } 하지만 String 객체의 equals() 함수는 다음과 같다. 문자열의 char 를 하나하나 비교하여 동일하면 true, 다르면 false 를 반환한다. public boolean equals(Object anObject) { if (this == a.. 2017. 3. 22.
[Tool][Java] 자바 디컴파일러 jar 파일을 분석할 수 있는 디컴파일러 는이클립스, IntelliJ 플러그인을 제공하고, 단독으로 실행가능한 툴을 제공하는 JD 가 가장 대표적이다. 단독 실행가능한 툴은 클래스, 메소드 검색이 가능하고, 드래그 앤 드랍으로 분석이 가능하기 때문에 간편하게 사용이 가능하다. 단, 모든 내용을 메모리에 올려놓고 사용하는지 약간 무겁다. 모든 내용을 자주 분석해야 하는 경우에는 분석 결과를 파일로 만들어 놓고 사용하는 것이 좋을 것이고, 아니면 JD를 이용하면 될 것 같다. JD - http://jd.benow.ca/온라인 디컴파일러 - http://www.javadecompilers.com/ 2017. 1. 9.
[java] 디자인패턴 [Creational] 1. Factory Method Pattern - 이 패턴은 다른 패턴에서 전반적으로 사용이 된다.- 동일한 인터페이스를 상속하는 클래스를 만들고, 인터페이스에 따른 클래스를 생성하는 패턴 2. AbstractFactoryPattern - Factory Method Pattern를 보강하는데 도움을 준다. 3. BuilderPattern - Factory Method Pattern와 비교해 보라구 하네요. 4. SingletonPattern - AbstractFactoryPattern을 만드는데 이용된다. 5. PrototypePattern - 아마도 가장 복잡한 creational pattern일 것이다. CommandPattern과 같이 이용된다. [Structural] 1. .. 2016. 12. 4.
[java][jsoup] HTML 파싱을 위한 jsoup 라이브러리 예제 자바에서 HTML 파싱을 위해서 jsoup 라이브러리를 이용하면 된다. 이 라이브러리를 이용하면 html 을 get, post 방식으로 가져오는 것부터 파싱하는 것까지 한번에 처리할 수 있다. Jsoup 홈페이지(https://jsoup.org/)에서 다운로드 해도 되고, 메이븐으로 디펜던시를 추가해도 된다. org.jsoup jsoup 1.10.1 이 라이브러리를 이용하여 다음의 해외축구 사이트의 순위표를 파싱하여 처리해보면다음과 같이 처리할 수 있다. http://score.sports.media.daum.net/record/soccer/epl/trnk.daum https://jsoup.org/ 2016. 11. 9.
[java][프록시] 네트워크 프록시 설정 자바에서 네트워크 프로그래밍을 하는 중에 프록시를 설정하는 방법은 Proxy 클래스를 이용하는 것과 시스템 프로퍼티에 프록시를 설정하는 방법이 있다. 아래의 예에서는 HttpURLConnection 을 이용하는 경우에는 Proxy 클래스를 이용하면 간단하게 처리할 수 있다. 만약 다른 외부 라이브러리를 이용하여 처리하는 경우 해당 라이브러리에 프록시 설정이 없다면시스템 프로퍼티를 이용하여 처리하면 된다. ex) jsoup package sdk.java.web; import java.io.BufferedReader;import java.io.InputStreamReader;import java.net.HttpURLConnection;import java.net.InetSocketAddress;import .. 2016. 11. 8.
[java][스크랩] JSON 파서 선택하기 서비님이 JSON 라이브러리의 속도 관련해서 분석을 해주셨다. 많이 사용되고 있는 아래의 JSON 파싱 라이브러리 관련해서속도 체크를 한 결과 다음과 같다. JSON.simple ( Yidong Fang )GSON ( Google )Jackson ( FasterXML )JSONP ( Oracle ) 당신의 개발 환경이 빅데이터처리와 같이 주로 큰사이즈의 JSON을 처리해야한다면 Jackson 을 써라. 대용량 환경에서 GSON은 좋지않은 선택임.마이크로 서비스와 분산아키텍처 설정등과 같이 작은 용량의 많은 json 파일을 처리하는 환경이라면 GSON을 써라.대용량과 소용량 모두를 다양하게 처리하는 환경이라면 양쪽에서 2순위 정도를 기록한 JSON.simple 이 좋을수도 있겠다. 나는 작은 용량의 데이터.. 2016. 10. 6.
[Java] 큐(Queue) 자료구조에서 큐는 FIFO(First In First Out) 구조의 자료이다. 처음 들어간 데이터를 출력한다. 구현방식에 따라 다양한 종류가 존재한다. 자바의 util 에는 기본적으로 큐를 제공하기 때문에 해당 부분을 이용하면 된다. ArrayDeque 를 이용하면 되는데 주의할 점이 하나 있다. * 데이터를 입력하는 방법에 offer(), push() 두가지 메소드가 있는데 push는 데이터를 앞으로 입력하고, offer는 데이터를 뒤로 입력한다. push 만을 이용하여 데이터를 입력하면 스택처럼 동작하고, offer 만을 이용하여 데이터를 입력하면 큐로 동작한다. 따라서 데이터를 입력할 때 메소드를 잘 선택하여 입력해야 한다. import java.util.ArrayDeque; public clas.. 2016. 6. 10.
[JAVA] 스택(Stack) 스택은 자료구조에서 LIFO(Last In First Out) 구조를 가지는 자료구조이다. 구현하는 방식에 따라 종류가 많이 있다. 자바의 util 에 기본적으로 스택을 제공해주기 때문에 따로 구현하지 않고 이 클래스를 사용하면 된다. import java.util.Stack; public class StackExample { public static void main(String[] args) { Stack stack = new Stack(); // 데이터 입력 stack.push(5); stack.push(4); stack.push(3); stack.push(2); stack.push(1); // 데이터 출력 System.out.println("마지막에 넣은 데이터부터 출력.."); System.ou.. 2016. 6. 10.
[JAVA] 버블정렬 버블정렬(거품정렬) 시간복잡도가 n의 제곱으로 늘어나기 때문에 시간이 굉장히 오래 걸린다. 정렬에 걸리는 시간은 오래 걸리지만 알고리즘이 단순하기 때문에 자주 사용된다. 알고리즘은 다음과 같다. 배열의 n번과 n+1번을 비교하여 n번이 더 크면 둘을 바꾼다. 즉 더 큰값을 뒤로 돌린다. 이를 반복하여 가장 큰값을 맨뒤로 보내고 이를 처음부터 마지막의 앞까지 반복하여 정렬을 진행한다. https://namu.wiki/w/%EC%A0%95%EB%A0%AC%20%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98#s-2.1.1 https://ko.wikipedia.org/wiki/%EA%B1%B0%ED%92%88_%EC%A0%95%EB%A0%AC 2016. 6. 8.
Tree 구조 트리구조 2016. 5. 24.
[Math] 좌표계의 x, y를 이용한 각도 구하기 Java의 Math 클래스를 이용하여 좌표계의 각도를 구하는 방법은 아래와 같다. 2016. 5. 19.
[개념] 스택(stack)과 힙(heap) 힙[heap]- new 연산을 이용하여 생성되는 객체의 저장 공간 - out of memory 가 발생하는 공간 스택[stack]- 컴파일러에 의해 사이즈가 결정- 지역변수, 매개변수 등을 위한 공간- 메소드가 호출될때 생성되었다가 사라진다. 2016. 2. 16.
[자료구조] 힙과 힙소트 힙 힙은 자료구조의 하나로 최대값, 최소값을 찾아내는 연산을 빠르게 하기 위해 고안된 완전이진트리를 기본으로한다. l 최대힙 : 부모노드의 값이 자식노드보다 크다. l 최소힙 : 자식노드의 값이 부모노드보다 크다. 부모와 자식 노드간의 대소관계만 정해지고, 자식 노드간의 대소관계는 정해지지 않는다. 힙정렬 힙을 구성하여 정렬을 수행하는 것을 힙정렬이라 한다. 최대힙을 이용하여 정렬을 수행하는 방법은 다음과 같다. 1. 최대힙을 구성한다. 2. 최대힙의 루트값을 배열의 맨뒤로 보내고 배열의 사이즈를 하나 줄인다. 3. 변경된 배열에 대해서 최대힙을 다시 구성한다. 4. 2 ~ 3의 과정을 배열의 길이가 1이 될때까지 반복한다. 소스코드[Java] public class MaxHeapSort { public.. 2015. 6. 8.
[어노테이션] 어노테이션과 리플렉션을 이용한 메소드 실행시간 출력하기 어노테이션과 리플렉션을 이용한 메소드 실행시간 출력 클래스에 PrintTime 어노테이션이 설정된 메소드를 찾아서 실행 시간을 출력한다. 어노테이션 @Target 은 어노테이션이 적용될 타입을 설정한다. Method, Filed 등을 설정할 수 있다. 한번에 여러 개를 적용하는 것도 가능하다. @Retention 은 어노테이션이 적용될 시점을 설정한다. Source, Runtime 등을 적용할 수 있다. 적용 시점에 따라 어노테이션 정보가 안 보일 수도 있다. 리플렉션 Class.forName() 메소드를 이용하여 데이터를 생성한다. 메소드와 메소드의 어노테이션 정보를 확인하여 @PrintTime 어노테이션이 적용된 메소드를 실행하고 실행시간을 출력한다. 테스트로 스트림을 이용한 버전과 for 문을 이용.. 2015. 6. 4.
[알고리즘] 퀵정렬 퀵 소트 퀵소트는 비교정렬의 한 종류이다. 찰스 앤터니 리처드 호어가 개발한 정렬 알고리즘이다. 데이터 양이 크고 섞여 있을 경우 가장 빠른 속도를 낼 수 있다. 알고리즘 1. 리스트 가운데서 하나의 원소를 고른다. (이 원소를 피벗이라 한다.) 2. 피벗 앞에는 피벗보다 작은 원소들이 오고, 피벗 뒤에는 큰 원소들이 오도록 피벗을 기준으로 리스트를 둘로 나눈다. 이렇게 피벗의 위치가 정해진다. 3. 피벗의 앞쪽 리스트와 피벗의 뒤쪽 리스트에 대하여 1, 2 를 반복한다. 소스코드[Java] package sdk.java.example.sort; import java.util.Random; public class QuickSort { /** * 퀵 소트 처리 * * @param array * @param.. 2015. 6. 1.
BASE 64 인코딩 Base 64란 8비트 데이터를 문자코드에 영향을 받지 않는 공통 ASCII 문자로 이루어진 6비트 데이터로 변환하는 것이다. 8bit 데이터 3개가 6bit 데이터 4개로 변환되는 것이다. 이 6bit 데이터는 ASCII 코드로 변환이 되고, 이를 이용하면 이기종간 문자코드가 달라도 데이터 처리가 가능하게 된다. 위키, 참고1, 참고2, 참고3 Java에서 Base64 인코딩을 처리하려고 하면 sun.misc.BASE64Decoder 를 이용하게 되는데 Java에서 sun 의 하위폴더에 들어있는 패키지를 이용하는 것은 권장하지 않는다고 한다. 따라서 되도록 이면 apache 등에서 제공해주는 라이브러리를 이용하는 것이 좋을 것 같다. (apache common 의 codec 참조) 일단 sun의 라이브.. 2013. 4. 15.