본문 바로가기

Java

Base62 encoding decoding public class Base62 { final int RADIX = 62; final String CODEC = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; public String encoding(long param) { StringBuffer sb = new StringBuffer(); while(param > 0) { sb.append(CODEC.charAt((int) (param % RADIX))); param /= RADIX; } return sb.toString(); } public long decoding(String param) { long sum = 0; long power = 1; for (int i = 0; i
Java Queue 구현 class Queue { private final int MAX_SIZE = 100000; private int head; private int tail; private Object[] array; public Queue() { this.head = 0; this.tail = -1; array = new Object[MAX_SIZE]; } public void add(Object o) { array[++tail] = o; } public Object peek() { return array[head]; } public Object poll() { return array[head++]; } public boolean empty() { return head > tail; } }
Java Stack 구현 class Stack { private final int MAX_SIZE = 100000; private int top; private Object[] array; public Stack() { this.top = -1; this.array = new Object[MAX_SIZE]; } public void push(Object o) { array[++top] = o; } public Object peek() { return array[top]; } public Object pop() { return array[top--]; } public boolean empty() { return top == -1; } }
XSS(Cross-site scripting) 특수문자 치환 public class XssFilter { public static String XssReplace(String param) { param = param.replaceAll("&", "&"); param = param.replaceAll("\"", """); param = param.replaceAll("'", "'"); param = param.replaceAll("", ">"); param = param.replaceAll("\r", " "); param = param.replaceAll("\n", ""); return param; } }
Java 프로그램에서 Proxy 사용 Java 프로그램에서 Proxy를 사용해서 네트워크 연결을 하려는 경우에는 Proxy IP와 Port를 세팅해주면 된다. System.setProperty("http.proxyHost", "IP Address"); System.setProperty("http.proxyPort", "Port Number"); 이 두줄을 프로그램 시작할 때 넣어주도록 하자.
Arrays.binarySearch() 사용 지금까지 매번 구현해서 사용했는데 Arrays API에 이분탐색 함수가 있었다. 좀 찾아볼걸. 하지만 일반적으로 자주 구현하던 방식이랑 차이가 있어서 주의해야하는 부분이 있다. 일단 나는 이분 탐색은 무조건 양수를 반환하게 구현한데 반해서 Arrays 라이브러리에 포함된 binarySearch() 함수는 음수값을 반환하는 경우가 있다. 이게 우리가 원하는 타겟이 딱 맞게 존재하는 경우에는 양수가 반환되는데 정확히 같은 값이 아니면 배열에서 자기 위치를 찾아 음수로 반환한다는 특징이 있다. 예를 들어 2, 4, 7, 9 이라는 숫자 배열이 있다고 하자. 배열이 0부터 시작하는 경우, 정상적으로 이분 탐색이 이뤄진다면 2를 찾을 때 0을 반환하고, 9를 찾는다면 3을 반환할 것이다. 이것은 일반적인 탐색 결..
쓰레드(Thread)의 사용 쓰레드(Thread)는 하나의 프로세스 내에서 여러 작업을 동시에 실행할 때 사용한다. 프로세스 내에서 쓰레드를 사용하면 다양한 작업을 동시에 진행할 수 있고 작업중에 얻게된 데이터를 공유할 수 있다는 이점과 여러개 프로세스를 사용할 경우 각 프로세스마다 메모리가 할당되는데 단일 프로세스 내의 쓰레드는 같은 메모리 공간을 공유한다는 이점이 있다. 쓰레드를 사용하는 대표적 사례로는 게임을 들 수 있을 것이다. 플레이어와 적의 움직임이 동시적으로 일어나야하지만 둘사이의 어떠한 연관성도 없기 때문에 둘의 움직임은 한 프로세스 내에서도 독립적으로 작동해야한다는 것을 알 수 있다. 쓰레드는 기본적으로 Thread Class를 상속받아 구현하며, 실제 쓰레드로 작동할 run() 함수를 start() 함수로 작동시키..
접근제어자 public, protected, default, private 접근제어자를 통해서 class간 변수 및 메소드 접근을 제어할 수 있다. public: 어떠한 조건에서도 모두 사용할 수 있다.protected: 같은 패키지 내에 존재하는 class나 상속 class에서 사용할 수 있다.defualt: 아무 것도 붙이지 않는 경우 default가 되며, 동일 패키지 내에 존재하는 class의 변수와 함수를 사용할 수 있다.private: 선언된 class 내부에서만 사용이 가능하다. 구체적인 테스트는 아래의 소스를 참고하자. package package1; import package2.Class3; public class Class1 { public String publicVar1; protected String protectedVar1; String defaultVa..