moonscode 236

Java // 개념 // Scheduling // Thread & Timer & ScheduledExecutorService

업데이트 :: 2018.08.03 Thread이용방법Timer & TimeTaskScheduledExecutorServiceTimer는 스레드가 기다리는 걸까 ?Thread이용방법Thread.sleep(1000); 다음방법은 간단하지만 프로그램의 성능을 저하 할 수 있음메인스레드라면 스레드가 잡여 후속 작업을 수행하지 못함Thread t = new Thread() { public void run() { Thread.sleep(1000); } }; 다음방법은 워크스레드를 사용해서 프로그램이 멈추진 않음하지만 해당 워커스레드는 다음작업이 오기전까지 기다려야함Timer & TimeTask태스크를 시작할때 취소할때를 통제처음 시작할때 타이밍을 원하는데로 할수있음다음 코드는 비동기로 동작 ("async test"..

Java/Java 개념 2018.08.03

Java // 구현 // Client SocketChannel (in Server) // NIO NonBlocking

- NIO NonBlocking 기반 서버의 클라이언트 추상클래스- NonBlocking이라서 receive() 메소드에 스레드를 할당하지 않아도 Selector가 메소드를 실행- "route()"와 "terminate()"를 메소드 오버라이딩해서 처리 public abstract class Client { /* Field */ public SocketChannel socketChannel; public SelectionKey selectionKey; public Selector selector; public String response; private Charset charset = Charset.forName("UTF-8"); /* Constructor */ public Client(SocketCha..

Java/Java 구현 2018.08.03

Java // 구현 // Server Socket // NIO NonBlocking

- NIO NonBlocking 기반 서버- Selector가 Blocking 되어 있지 않는 "accept() 와 receive()"를 수신시 매칭해주는 중재자 역할을 함- 클라이언트의 생성과 중지는 "startClient() & stopClient()"의 메소드 오버라이딩이 필요- 싱글톤으로 전역접근가능- 제네릭으로 특정 클라이언트 처리 /* ServerOthello - singleton */ public abstract class Server { private static Server instance; /* Field */ public ExecutorService executorService; public ServerSocketChannel serverSocketChannel; public Sele..

Java/Java 구현 2018.08.03

Java FX // 구현 // Scene // SceneManager

Scene을 싱글톤 전역객체로 관리하기Scene을 어디서든 사용할 수 있도록 Singleton 처리 합니다. primaryStage에 대한 접근이나, Scene을 이용하는 경우 다음 SceneManager를 통해 할 수 있습니다. public class SceneManager { private static SceneManager instance; Stage stage; Scene scene; Share share; public SceneManager( Stage stage ) { if(SceneManager.instance != null) return; SceneManager.instance = this; this.stage = stage; this.share = new Share(); this.stag..

Java/JavaFX 구현 2018.08.03

문제 // 자료구조 // 배열(Array) // 행렬회전 // toJava

/** * [행렬회전] * 이미지를 표현하는 N * N 행렬 * 이미지의 각 픽셀은 4바이트로 표현됩니다. 이미지를 90도 회전시키는 메소드를 작성 * 행렬을 추가로 사용하지 않고서도 만들수 있습니까 ? * * [풀이] * => 픽셀이 4바이트, int 배열 * => 일반화해서 규칙을 찾아야함 * * */ public class Q07 { /* main */ public static void main(String[] args) { // == sample == int[][] square = new int[][] { new int[] { 1, 2, 3 }, new int[] { 4, 5, 6 }, new int[] { 7, 8, 9 } }; printSquare(square); System.out.print..

문제 // 자료구조 // 문자열(String) // 문자열회전 // toJava

/** * [문자열회전] * 한 단어가 다른 문자열에 포함되어 있는지 판변하는 isSubString이라는 메서드가 있다고 가정 * s1과 s2의 두 문자열이 주어졌고, s2가 s1을 회전시킨 결과인지 판별하고자함 * 가령 waterbottle은 erbottlewat을 회전시켜서 얻을 수 있는 문자열 * isSubString 메소드를 한번만 호출해서 판별하는 코드를 작성 ( 한번만 잘라서 같은 문자열이 되는지 ) * *[풀이] * => 회전이란 의미를 명확히 * => [방법1] 두번의 패턴을 비교하는 방법 * => [방법2] 1번의 회전으로 같아진다면 문자열에 마지막에 갔을때 다시 처음으로 가면 문자열이 이어짐 * */ public class Q09 { /* main */ public static void..

문제 // 자료구조 // 배열(Array) // 0행렬 // toJava

/** * [0행렬] * M * N 행렬의 한 원소가 0일 경우 * 해당 원소가 속한 행과 열의 모든 원소를 0으로 설정하는 알고리즘을 작성 * * [풀이] * => 스캔하며 문자열이 0인 것을 찾음 * => 찾음과 동시에 요청사항을 처리하면 * => 후반부에 처리에 의해서 원하지 않은 "0"이 발생할 수 있음 * => 찾아진 0에 대해서 요청사항을 처리해줌 * * */ public class Q08 { /* main */ public static void main(String[] args) { // == sample == int[][] square = new int[][] { new int[] { 1, 2, 1, 3, 1 }, new int[] { 4, 5, 0, 6, 1 }, new int[] { 7..

문제 // 자료구조 // 문자열(String) // 문자열압축 // toJava

/** * [문자열압축] * 반복되는 문자의 개수를 세는 방식의 기본직인 문자열 압축 메서드를 작성 * [ex] aabcccaaa => a2b1c3a3 * 만약 압축된 문자열의 길이가 문자열의 길이보다 길다면 기존 문자열을 반환 * 문자열은 대소분자 알파벳으로만 이루어짐 * * [풀이] * => StringBuilder 이용 문자열 압축처리 */ public class Q06 { /* main */ public static void main(String[] args) { System.out.println(compress("aasseerffffff")); // 압축성공 System.out.println(compress("aaabbbsss")); // 압축성공 System.out.println(compres..

문제 // 자료구조 // 문자열(String) // 유사문자열검증 // toJava

/** * [유사문자열] * 문자열을 편집하는 방법에는 세가지가 있습니다. * 문자 삽입 / 문자 삭제 / 문자 교체 * 문자열 2개가 주어졌을때 문자열을 같게 만들기 위한 편집 횟수가 1회 이내인지 확인하는 함수 * * [풀이] * => 케이스분류 * => 문자열 교체일 경우, 문자열의 갯수가 같아야 * => 문자열 추가일 경우, 변경할 문자열이 1개 적어야 * => 문자열 삭제일 경우, 변경할 문자열이 1개 많아야 * */ public class Q05 { public static void main(String[] args) { System.out.println(checkSimilarity("abc", "abc")); // true System.out.println(checkSimilarity("ab..

문제 // 자료구조 // 문자열(String) // 회문순열검증 // toJava

/** * [회문순열] * 주어진 문자열이 회문의 순열이지 아닌지 확인하는 함수 * 주어진 문자열이 재배치를 통해서 회문이 되는 문자열인지 아닌지 판단하는 함수 * * [풀이] * => 회문이란 ? 앞으로 읽으나 뒤로 읽으나 같은 단어 혹은 구절을 의미 * => 순열이란 ? 문자열을 재배치하는 말함 * => * 결국 각각의 문자열이 모두 짝수개 거나 1개만이 홀수여야 함 * * [추가사항] * => 아스키코드에 한해 알파벳만 처리하도록 하겠습니다. * */ public class Q04 { public static void main(String[] args) { System.out.println(Character.getNumericValue(' ')); // -1 System.out.println(Cha..