본문 바로가기

Java

(24)
디자인 패턴5 - 컴포지트 패턴 ( Composite pattern ) 디자인패턴5 - 컴포지트 패턴 (Composite pattern )이것도 단어 뜻을 그대로 살펴보면 composite(복합물) 패턴? 또 뭔가 조합을 하는 패턴인 것 같다. 사용자(클라이언트)가 어떠한 조합으로 생성 된 클래스를 동일하게 사용할 때 쓰는 패턴이다. 말만 보면 항상 와닿지 않는다. public class Keyboard { private int price; private int power; public Keyboard(int power, int price) { this.power = power; this.price = price; } public int getPrice() { return price; } public int getPower() { return power; }}public c..
디자인 패턴4 - 템플릿 메소드 패턴이란(Template method pattern) 템플릿 메소드 패턴이란?이것도 뜻만 살펴 보면 템플릿? 뭔가 양식을 정해놓고 메소드? 함수를 이용하는 패턴일까 싶다. 어떤 작업을 처리하는 방식은 서브 클래스로 빼두어서 구조는 바뀌지 않고 특정 수행하는 내역을 바꾸는 패턴이라고 한다. 템플릿 메소드 패턴 예제자동차 시동에 관한 것을 예제로 들겠다. 1. 모터가 돌고2.불이 들어오고3. 등등등 이 상황에서 현대차와 BMW 자동차를 구현해야 한다면? 아무 생각 없이 구현한다면 현대차 클래스에 boot() { .// 1,2,3 동작 } BMW차 클래스에 boot() {.// 1,2,3 동작 } 이런식을 할 것이다. 이렇게 구현이 되면 중복된 코드가 발생한다! 하지만 1번과 같이 구현체만 다르고 전체 동작 방식이 같다면 자동차 클래스를 아래처럼 만들자. pub..
디자인 패턴2 - 어댑터 패턴(Adapter Pattern) 어댑터 패턴 (adapter pattern)이란?항상 110V, 220V 변환기로 비유를 많이 든다. 하지만 나는 정확히 와닿지가 않았다. 좀더 코드단의 예로 들면, 프로젝트에서 검색엔진 A를 사용하고 있었다. A의 search()함수와 이를 이용하여 분석하는 비즈니스 코드가 있을 것이다. 하지만, 검색엔진 B가 더 좋다고 판단되어 수정을 한다면? ( 표준화는 되어있지 않을 것이기 때문에 A,B의 사용방법이나 함수는 무조건 다를 것이다 ) 어댑터 패턴 예제1음악 파일과 음악 재생기로 예제를 살펴보자. interface MediaPlayer { void play(String filename); } interface MediaPackage { void playFile(String filename); } cl..
디자인 패턴 1 - 파사드 패턴(facade pattern) Facade란?건물의 외간이란 뜻이다. Facade Pattern다른 인터페이스들을 통합하여 단순화 시킬 때 사용하는 패턴이다. 아래는 컴퓨터가 켜질 때 필요한 동작들을 하나의 인터페이스에 정의한 예제이다./* Complex parts */ class CPU { public void freeze() { ... } public void jump(long position) { ... } public void execute() { ... } } class Memory { public void load(long position, byte[] data) { ... } } class HardDrive { public byte[] read(long lba, int size) { ... } } /* Façade */ ..
NIO 제대로 파해쳐보자 Java NIO Overview Java NIO ( New I/O )는 Java 1.4부터 사용하던 IO API의 대안책(Java IO, Java networking API)이다. Java NIO는 기존의 IO와 다른 방식으로 동작을 제안한다. 1) Java NIO : Non-blocking IO 예를 들면, Thread가 channel 에게 data를 읽어 buffer로 넣도록 요청할 수 있다. channel이 데이터를 읽어 buffer에 넣는 동안, 스레드는 다른 일을 할 수 있다. data를 읽어 buffer에 다 넣으면, 스레드는 이제 작업을 진행하면 된다. channel에 쓰는 것도 똑같은 방식으로 진행된다. 2) Java NIO : Selectors Java NIO는 Selector라는 개념을..
JAVA File I/O에 관하여 자바 파일 복사 방법Stream FileInputStream inputStream = new FileInputStream(file);FileOutputStream outputStream = new FileOutputStream(saveFullPath); int bytesRead = 0;byte[] buffer = new byte[1024]; while ((bytesRead = inputStream.read(buffer, 0, 1024)) != -1) { outputStream.write(buffer, 0, bytesRead);} outputStream.close();inputStream.close(); 문제점 : 파일크기( 정확히는 스트림의 길이 ) 만큼 while문을 돌면서 끊임없이 읽고쓰기를 반복 중..
#java.util.ConcurrentModificationException 이슈 상황 단순히 enhanced for loop ( 15줄과 같은 반복문 ) 를 쓰면서 제거하는 예제인데, 멀티쓰레드에서나 보던 ConcurrentModificationException이 발생하였다. 도대체 왜??? remove() 함수를 따라가다 보면 checkForComodification() 이라는 함수를 확인할 수 있다. expectedModCount는 리스트의 데이터 변경 여부를 체크하기 위한 변수이다. remove()에서 호출하는 fastRemove()에서 modCount를 증가시킨 상태에서 Iterator의 next()가 호출 되면 위의 예외를 던지게 된다. ( fail-fast???) ConcurrentModificationException의 정의 This exception may be thr..
Memory leak 문제 해결 문제 TOP가 메모리를 3GB까지 잡아먹는 괴물이 되고, 프로세스가 뻗어버리는 문제 [ TOP Heap 메모리 캡쳐 화면 ] VisualVM JDK에 설치된 메모리 분석 도구 ( TOP가 사용하는 JDK의 bin에 있음 ) Heap memory 관리가 어떻게 됨? 메모리 분석을 하기전에, JVM이 메모리 관리를 어떻게 하는지도 모르는데 무엇을 하겠는가. Heap memory 관리 이해하기 JVM은 OS로부터 java heap memory를 할당하고 자바 어플래케이션을 위한 heap을 관리한다. 어플리케이션이 새로운 object를 만들 때, JVM은 이것을 저장하기 위해 heap memory의 인접 영역에 하위 할당한다. 다른 객체에 의해 참조되고 있는 힙에 있는 객체 , 계속 참조되고 있으면 힙에 남아있..
ClassNotFoundException ( 클래스 로더 정리 ) 문제 TOP 구동이 안된다...... java.lang.ClassNotFoundException: org.eclipse.osgi.compatibility.state.Activator at java.net.URLClassLoader.findClass(Unknown Source) ClassNotFoundException이 뭔데? Class.forName methodClassLoader.findSystemClass methodClassLoader.loadClass method 위와 같은 함수에서 클래스를 로딩할 때 예외가 발생하면 해당 에러를 던져줌. 즉 java class를 못찾거나 runtime에 클래스를 로드할 수 없는 경우이다. Class Loader가 뭔데? [ Oracle Docs 해석 ] Clas..
export Jar Export Jar 상황 배포 자동화 작업중 특정 java 파일을 execute 하고 싶어 jar 생성 ( 단순히 java를 실행하는 경우 plug-in dependencies를 못 가져와 묶어서 실행이 필요함) 1. jar 만들기 export > jar file > 설정.... ( main class 등등 ) 문제 1. Display class를 못찾네? (plug-in dependencies에 있는 ) 자동으로 포함이 안되는구나? export > runnable jar 로 하면 포함이 됨 해결 완료....