교육용으로 만든 자료를 정리한 것이다. IntelliJ Community Edition 은 무료지만, JAVA EE 지원이 되지 않습니다. 하지만, Smart Tomcat 이라는 플러그인을 설치하면 간단한 서블릿 웹 앱 프로젝트에 한해서 실행 및 디버깅을 진행할 수 있습니다. (1) Gradle 프로젝트 생성 Gradle 프로젝트로 새 프로젝트를 생성합니다. (2) Smart Tomcat 플러그인 설치 상단 메뉴 File => Settings 에 들어가서 좌측 탭의 Plugins 를 선택합니다. 그 뒤에 Smart Tomcat 을 검색하여 설치합니다. (3) build.gradle 편집 build.gradle 파일 상단에 (repositories 블럭 밑) 아래와 같이 입력해줍니다. sourceSets ..
27인치 4K 해상도의 모니터로 이클립스를 열었을 때 조금 당황스러웠었다. 눈을 모니터에 가까이 가져가야 보일 정도의 작은 아이콘과 패키지 익스플로어의 깨알 같은 폰트들이 보였기 때문이다. 이런 경우 eclipse 디렉토리에 있는 eclipse.ini 파일을 열어서 가장 마지막 줄에 아래의 옵션을 추가해주면 된다. -Dswt.enable.autoScale=true -Dswt.autoScale=200 -Dswt.autoScale.method=nearest
JAVA 에서 특정 URL 경로로 데이터를 가져오기 위하여 URL Encoding 을 해야할 때 여간 귀찮은 것이 아니다.그래서 아래처럼 URLEncoder 클래스를 수정한 BorwerURLEncoder 를 만들었다. 사용법은 URLEncoder 와 동일하며, 마치 브라우저 창에서 URL 주소를 입력해 놓은 것처럼 출력되도록 하였다. BrowserURLEncoder.java import java.io.CharArrayWriter; import java.io.UnsupportedEncodingException; import java.net.URL; import java.nio.charset.Charset; import java.nio.charset.IllegalCharsetNameException; imp..
JAVA6 부터 자바 스크립트 엔진을 기본적으로 지원한다. (ps, 안드로이드에서는 자바 스크립트 엔진이 직접 포함되지 않는다. 그렇기 때문에 RhinoScriptEngine 프로젝트를 직접 적용해야 한다. https://github.com/mozilla/rhino) JAVA8 미만은 RhinoScriptEngine 을 사용하며, 8 버전에서는 NashornScriptEngine 을 사용한다. 하지만 사용방법은 동일하다. 물론 각 브라우저에서 사용할 수 있는 자바 스크립트 API 는 제공되지 않는다. 아래 예제는 콘솔을 통하여 두 수를 입력 받아 각각 함수와 객체를 이용하여 덧셈을 하고 그 결과 값을 출력해 주는 코드다. test.js : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ..
세 줄 요약. 1. JAVA 의 String 클래스는 유니코드로 처리되는 char 의 배열 이외에 어떠한 인코딩 정보를 갖고 있지 않는다. 2. String.getByte('인코딩명') 을 사용하여 인코딩 할 수 있으며, new String(byte[], "인코딩명") 을 사용하여 디코딩 할 수 있다/.3. EUC-KR 에서 UTF-8 으로 바꾸기 위해서는 EUC-KR ---> java.lang.String ----> UTF-8 과 같은 방식으로 변환 할 수 있다. 기본적으로 자바의 String 클래스는 2 byte 크기의 유니코드를 사용하여 문자열을 처리하는 Character 배열을 감싸고 있는 형태이다. https://docs.oracle.com/javase/8/docs/api/java/lang/Ch..
이클립스로 작성된 다양한 프로젝트들을 의존하는 프로젝트를 생성하는 경우 인코딩 문제로 당황스러울 때가 종종 있다. 만약 여러개의 프로젝트내의 소스 파일들이 각각 다른 인코딩으로 저장되었을 경우 이 것을 한 번에 utf-8 로 바꾸는 방법에 대하여 알아볼 것이다. 1. 텍스트 파일 (혹은 java 파일) 의 인코딩 정보 가져오기 Text 파일 혹은 Java 소스 파일의 인코딩을 확인하는 방법은 여러가지가 있지만 가장 정확하면서 간단한 방법은 바로 juniversalchardet (https://code.google.com/p/juniversalchardet/) 라이브러리를 사용하는 것이다. (무식한? 방법으로는 파일을 읽어서 테스트 하려는 인코딩의 스트링으로 변환하고 character 배열을 받아 0xff..
이 슬라이드를 보고 암이 치료되었습니다... 위 슬라이드 내용을 아래와 같이 정리해 봤다. Base :: Objects.equal(), Objects.hashCode(), MoreObjectes.toStringHelper(), ComparisonChain.compare() public class Employee implements Comparable{ public String name; public Integer age; public Job job; @Override public boolean equals(Object o) { if(!(o instanceof Employee)) return false; Employee that = (Employee)o; return Objects.equal(name, t..
Exchanger 는 뜻 그대로 쓰레드상에서 두 개의 인스턴스를 교환해주는 역할을 한다. 만약 한쪽의 쓰레드에서만 교환 메소드를 호출한다면 다른쪽에서 교환 메소드를 호출하기 전까지 대기하고 있는데. 이 클래스는 java 의 gc 와 같은 동작에서 사용할 수 있다. 예를 들어 설명하면 다음과 같다. (이해를 돕기 위하여 '요청' 이라는 표현을 사용하였다. 정확히는 교환 대상이 되는 인스턴스 값을 인자로 하는 교환 메소드 호출이다.) 1. 데이터를 '스택에 쌓는 쓰레드' 와, '스택을 비우는 쓰레드' 가 있다. 이 두 개의 쓰레드에는 각각의 '스택' 이 있다. 2. 데이터를 '스택에 쌓는 쓰레드' 는 계속해서 데이터를 자신의 '스택' 에 추가한다. 이 동작을 반복하다 스택이 가득차면 '스택' 교환을 요청하고..
CyclicBarrier 를 사용하면 동시에 실행되는 쓰레드 내부 원하는 지점에서 대기를 걸어주고 모든 쓰레드가 대기 상태에 들어갔을때, 대기를 풀어주는 동작을 할 수 있다. 예를들어 설명하면 N 개의 쓰레드가 돌고 있다고 가정하고 CyclicBarrier 를 생성할 때 인자값으로 N 을 준다. 각각의 쓰레드 내에서 CyclicBarrier 의 await() 를 호출하고 호출 횟수가 N번에 도달했을 때, N개의 모든 쓰레드의 대기 상태가 해제된다. 아래 그림 참고. 설명이 조금 애매한데, 그냥 대충 보고 눈치것 이해하는 것이 좋다. CyclicBarrier를 활용한 예제코드:public class main { private final static int THREADS = 5; private static ..
만약 백그라운드에서 실행되고 있는 싱글 쓰레드가 종료되기를 기다리는 코드를 작성해야 한다면 당장 Thread 클래스의 join() 메소드 부터 떠올리게 될 것이다. 아래와 같이 말이다. 간단한 join() 사용예:Thread thread = new Thread() { @Override public void run() { System.out.println("start trhead."); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("end trhead."); } }; thread.start(); try { // 스레드가 끝날때 까지 대기한다. thread.join();..
자주쓰는 함수라 매번 코딩하기 귀찮아서 올려 놓는다. 아래는 4개의 길이를 갖는 byte 배열을 int 로 바꾸거나 int 를 4개의 길이를 갖는 byte 배열로 바꾸는 것이다.// 아래의 방법 외에 다음과 같이 간단한 방법도 존재한다. :// byte[] byteArray = ByteBuffer.allocate(4).putInt(value).array(); public byte[] intToByteArray(int value) { byte[] byteArray = new byte[4]; byteArray[0] = (byte)(value >> 24); byteArray[1] = (byte)(value >> 16); byteArray[2] = (byte)(value >> 8); byteArray[3] = ..
- Total
- Today
- Yesterday
- Android
- 가습기
- json
- ESP8266
- 이더넷
- ndk
- NeoPixel
- Cheapduino
- Java
- 개발
- WS2812B
- 부트로더
- activity
- oled
- ATtiny85
- noidemcu
- 병렬 프로그래밍
- 블루투스
- arduino
- 안드로이드
- 아두이노
- 알리익스프레스
- 침블락
- 칩두이노
- Iot
- bluetooth
- 안드로이드 개발
- 스마트 무드등
- ENC28J60
- HC-06
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |