분류 전체보기

·Language/Java
Io, nio 차이입출력방식 : 스트림방식 , 채널방식버퍼방식 : 논 버퍼, 버퍼비동기방식 : 지원안함, 지원블로킹/논블로킹 방식 : 블로킹방식, 블로킹/논블로킹모두 지원 스트림 vs 채널스트림 : 입력을 하기위해 입력 스트림을 생성하고 출력을 하기위해 출력 스트림을 생성해야함NIO(채널) : 채널은 양방향으로 입력과 출력이 가능. 입출력을 하기 위해 별도의 채널을 만들 필요가 없음. 버퍼 vs 논버퍼IO에서는 스트림이 1바이트를 쓰면 입력스트림이 1바이트를 읽는다. (이런 시스템은 대체로 느림)그래서 버퍼를 이용하여 복수 개의 바이트를 한꺼번에 입력받고 출력하는 것이 빠른 성능을 냄(보조 스트림 BufferedInputStream, BufferedOutputStream) IO는 스트림에서 읽은 데이터를..
·Language/Java
WatchService(와치서비스) - 디렉토리 내부에서 파일 생성, 수정, 삭제 등의 내용 변화를 감시하는데 사용. (파일변경 통지 매커니즘으로알려짐)ex) 텍스트 에디터 1. 생성WatchService watchService = FileSystems.getDefault().newWatchService(); Path 객체에서 register() 메소드에 watchService를 등록하고 어떤 변화(생성, 삭제, 수정)를 감시할 것인지 StandardWatchEventKinds을 지정한다. 2. 감시자 지정Path path = Paths.get("d:/test");path.register(watchService, StandardWatchEventKinds.ENTRY_CREATE, StandardWatch..
·Language/Java
규칙2. 생성자 인자가 많을 때는 Builder 패턴 적용을 고려하라 정적 팩터리나 생성자의 문제- 선택적 인자가 많은 상황에 잘 적응하지 못하다는 것 프로그래머들은 보통 점층적 생성자 패턴(telescoping constructor pattern)을 적용- 필수 인자만 받는 생성자를 하나 정의하고, 선택적 인자를 하나 받는 생성자를 추가하고, 거기에 두 개의 선택적 인자를 받는 생성자를 추가하는 식으로 생성자들을 쌓아 올리듯 추가하는 것.결국 모든 선택적 인자를 다 받는 생성자를 추가하면 정의는 끝나게됨.ex)1234567891011121314151617181920212223242526272829//점층적 생성자 패턴 - 더 많은 인자 개수에 잘 적응하지 못한다. public class Nutritio..
·Language/Java
규칙 1. 생성자대신 정적 팩터리 메서드를 사용할 수 없는지 생각해 보라 클래스를 통해 객체를 만드는 일반적인 방법- public으로 선언된 생성자(constructor) 다른 방법클래스에 public으로 선언된 정적 팩터리 메서드(static factory method)를 추가하는 것.Ex)_Boolean 클래스의 valueOf 정적 팩터리 메서드의 장점 1. 생성자와는 달리 정적 팩터리 메서드에는 이름(name)이 있다.- 생성자에 전달되는 인자(parameter)들은 어떤 객체가 생성되는지를 설명하지 못함.- 정적 팩터리 메서드는 이름을 잘 짓기만하면 사용하기 쉽고, 클라이언트 코드의 가독성(readability)도 높아짐- 클래스에는 시그니처(signature)별로 하나의 생성자만 넣을 수 있는데..
·OS-Tools/Linux
리눅스에서 could not initialize class javax.imageio.ImageIO 에러가 발생할 경우 1sudo apt-get install libxrender1 libxtst6 libxi6 을 설치해주면 된다.
·OS-Tools/Linux
리눅스에서 java.lang.NoClassDefFoundError: sun/awt/X11GraphicsEnvironment 에러가 발생할 경우 - 시스템 프로퍼티 java.awt.headless를 true로 설정해주면 된다. - 톰캣의 경우 catalina.sh 파일 제일 위에 CATALINA_OPTS="-Djava.awt.headless=true" 를 추가한다. ps -eaf | grep java 로 확인해보면 "-Djava.awt.headless=true가 추가되어있는 것을 확인할 수 있다. 1CATALINA_OPTS="-Djava.awt.headless=truecs
·일상
시간은 흘러간다 시간은 아무도 기다려주지 않는다 시간은 짧다 그러나 시간은 모든 것을 말해준다 해야할 일을 미루지 말자 나이는 숫자일뿐 열정은 나이를 먹지 않는다 도전하자 포기하지 말자 두려워 말자 시간이 지나고 10년 후 20년 후 나를 되돌아 봤을때 후회하지 않도록
·Database/Database
1. PK 컬럼 순서, 대충하지 말자 여러 개의 컬럼으로 구성된 PK 구성 테이블에서 있는 그대로 테이블을 생성해 버리면 발생하는 문제점1) 인덱스 구성에서 의도하지 않은 순서의 Primary Key Unique Index가 생성된다.2) 그에 따라 SQL 실행 시 성능 저하 현상이 나타날 수 있다.3) 많은 인덱스가 생성되므로 입력/수정/삭제 시 불필요한 내부 작업이 증가해 성능에 악영향을 마친다. 해결방법- 테이블 생성 전에 SQL Where 절을 분석하여 엔티티 타입의 PK 컬럼 순서를 조정하는 작업을 수행해야 한다.(PK 순서 트랜잭션의 처리 유형에 의해 조정) 1-1. PK 구성과 인덱스 이용- 스키마를 생성하기 이전에 데이터 모델의 PK 순서를 조절하지 않은 채 테이블을 생성하면 인덱스를 이용..
·Language/Java
2. 스레드의 안전성 도입 2-0-1. 스레드 안전(Thread Safety) - 멀티 스레드 프로그래밍에서 어떤 함수나 변수, 혹은 객체가 여러 스레드로부터 동시에 접근이 이루어져도 프로그램의 실행에는 문제가 없음을 말한다. ex) 하나의 함수가 한 스레드로부터 호출되어 실행 중일 때, 다른 스레드가 그 함수를 호출하여 동시에 함께 실행되더라도 각 스레드에서의 함수의 수행결과가 올바르게 출력되는 것. - 병렬 프로그램에서 단순히 스레드와 락(Lock)만 신경 써서 해결되지 않는다. 스레드와 락은 병렬 프로그램을 올바르게 잘 사용하기 위한 도구일 뿐이다. 2-0-2. 스레드에 안전한 코드를 작성하는 방법 - 공유되고 변경할 수 있는 스레드의 상태에 대한 접근을 관리하는 것 2-0-3. 객체의 상태 - 인..
·Language/Java
String 보다는 StringBuilder, StringBuffer를 사용해야하는 이유. 이유는 간단하다. String보다는 Stringbuilder 와 StringBuffer이 성능ㅇ ㅣ좋으므로.. 1. StringBuilder와 StringBuffer을 사용시 append 를 이용할 때 하지 말 것String str ="abcde";String a = new String();StringBuffer sb= new StringBuffer();StringBuilder sbs = new StringBuilder();long start = System.currentTimeMillis();for(int i=0; i
조슈아。
'분류 전체보기' 카테고리의 글 목록 (12 Page)