반응형

자바

    커맨드 패턴 (command pattern)

    커맨드 패턴은 이벤트가 발생되었을 때 실행될 기능이 다양하면서도 변경이 필요한 경우에 이벤트를 발생시키는 클래스는 변경하지 않고 재사용하고자 할 때 유용하다. 다음 예를 살펴보자 자동차의 시동버튼이 눌러졌을 때 시동이 켜지도록 설계해보자. 12345678910111213141516171819202122232425262728// 버튼 클래스public class Button { private Engine engine; public Button(Engine engine) { this.engine = engine; } public void on() { engine.execute(); } } // execute 인터페이스public interface Execute { void execute();} // 엔진 p..

    java 메모리 누수 주된 원인

    자바 메모리 누수 측정 방법자바 프로그램의 실제 메로리 사용량은 시스템의 작업관리자에서 나오는 메모리 사용량으로는 측정 할 수없기에 디버그 출력으로 totalMemory() - freeMemory()를 출력하거나, 개발 도구를 사용하여 측정하는 것이좋다. GC 알고리즘메모리가 GC로 부터 해소가 되지 않는 루트 참조 객체(직간접적으로 참조가 되는 모드 객체)는 크게 3가지경우이다.Static 변수에 의한 객체 참조모든 현재 자바 스레드 스택내의 지역 변수, 매개 변수에 의한 객체 참조JNI 프로그램에 의해 동적으로 만들어지고 제거되는 JNI global 객체 참조이러한 경우에 사용할 수 있는 객체로 분류되어 GC에서 가져가지 않아 메모리가 누수될 수 있다. 자바 메모리영역은 3가지로 구성되어 있다.Hea..

    HashMap에서 사용되는 인스턴스 객체의 equals()와 hashCode() 재 정의 중요성

    HashMap에 저장되어 있는 키 값을 통해 저장된 value 값을 찾을 때, 입력된 object와 동일한 hashCode 값을 가지고 있는키를 찾기 위해 객체에 정의된 equals 메소드를 사용한다. 두 개의 object를 재 정의한 equals를 통해 비교한 후 동일한 객체 일 경우 동일한 hashCode값을 반환한다. 그렇기에 instance 객체를 hashMap에 key값으로 사용하고 싶은 경우에는 비교에 사용되는 equals()와 동일한 객체에 대한 동일한 hashCode 값을 반환하는 hashCode() 메소드를 Override 해야한다. 참고자료 https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ConcurrentHashMap.K..

    자바 Annotation 만들기

    자바에서 Annotation은 별도의 properties파일이나 xml같은 설정파일에 작성하는 부가적인 정보를 어노테이션으로 간편하게 설정할 수 있다. 형태 123456789101112131415@Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface Anno { public String defaultVal() default “OK”; public String val(); } Colored by Color Scriptercs Target은 어노테이션의 적용 대상을 선정하고, Retension은 이 어노테이션의 정보가 어디 까지 유지되는지 설정한다. @Target - Constructor, Field..

    Java Reflection 설명 및 사용법

    자바는 Reflection이라는 언어의 특징이다. 리플렉션은 자가 프로그램이 자기 자신을 조사하거나, “introspect”하는 것을 실행하거나, 프로그램의 내부 프로퍼티의 조작을 허락하는 것을 말한다. 예를 들어 멤버변수의 이름을 취득하여 조작할 수 있다. 123456789try { Class c = Class.forName(args[0]); Method m[] = c.getDeclaredMethods(); for (int i = 0; i

    Java 문자열의 toString과 valueOf의 차이

    두 메소드 모두 오브젝트의 값을 String으로 변경하지만 변경하고자 하는 오브젝트가 null 일경우 toString은 NPE 오류를 발생시키지만, valueOf는 null이라는 특수문자로 처리한다. 그래서 valueOf를 사용하는게 조금더 안전하다.

    옵저버 패턴 (Observer Pattern)

    옵서버 패턴은 데이터의 변경이 발생되었을 경우 상대 클래스나 객체에 의존하지 않으면서 데이터 변경을 통보하고자 할 때 유용하다. 예를 들면 새로운 파일이 추가되거나 기존 파일이 삭제되었을 때 여러 프로그램에게 동시에 알려주어야 모든 프로그램이 그 최신 내역을 반영할 수 있다. 예를 들어보자 만약 회원들의 정보를 보관하는 Member 클래스와 Member들의 리스트를 출력해주는 Member View 클래스가 존재한다고 하였을 때, 다음과 같이 Member 객체가 추가 될 때 마다 Member View를 업데이트 해줄 수 있다. 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152// 멤버클..

    데코레이트 패턴 (Decorator Pattern)

    데코레이트 패턴은 기본 기능에 추가할 수 있는 기능의 종류가 많은 경우에 각 추가 기능을 Decorator 클래스로 정의한 후 필요한 Decorator 객체를 조합함으로써 추가 기능을 설계하는 방식이다. 문제가 되는 예를 확인해보자. 만약 음식을 할 때, 준비를 해는 클래스 ReadyDish가 있다고 해보자. 생선 음식을 준비해야할 때는 ReadyDish 클래스에서 하는 ready() 메소드가 필요하며, 생선클래스를 위한 메소드 readyForFish()메소드가 필요하다. 그럴경우 기본적인 기능은 ReadyDish 클래스에 정의하고 추가적인 기능은 다음과 같이 하위클래스로서 상속받아서 진행할 수도 있다. 12345678910111213141516171819202122package decorator; pu..

    템플릿 메서드 패턴 (Template method)

    템플릿 메서드 패턴에 대해 알아보기 위해 먼저 문제의 소지가 있는 상황을 알아보자. [예시] 만약 특정 제품의 모터를 동작시키고자 할 때 현재 모터가 동작중인지, 작업장에 문이 열려 있는지 확인하고 동작하도록 하는 로직을 다음과 같이 만들어보자 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293package template; public class Door { private DoorStatus doorStatus; public DoorStat..

    팩토리 메서드 패턴 (Factory method)

    팩토리 메서드 패턴은 객체의 생성 코드를 별도의 클래스/메서드로 분리하는 패턴이다. 이로써 특정 기능의 구현은 개별 클래스를 통해서 제공을 하도록 설계를 하면서 호출하는 메서드 코드의 중복된 코드 발생과 기능 변경으로 인해 자주 변경되지 않도록 하기 위해서 사용하는데 효과적이다. 다음 예를 살펴보자. 여러 엘레베이터 조작을위해 다음과 같이 구성이 되어있다고 가정해보자. 엘레베이터의 층수를 관리하는 ElevatorManager 클래스 각 엘레베이터 클래스 ElevatorController 클래스 스케줄 클래스 ThroughputScheduler 클래스 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748..

반응형