반응형

JAVA

    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를 사용하는게 조금더 안전하다.

    커맨드 패턴 (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..

    옵저버 패턴 (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..

    추상 팩토리 패턴 (Abstract Factory Pattern)

    추상 팩토리 패턴(Abstract Factory Pattern)은 관련성 있는 여러 종류의 객체를 일관된 방식으로 생성하는 경우에 유용하다. 아래에서 예를 통해 알 수 있겠지만 Door와 Motor를 종류에 따라 얻기 위해 Factory 클래스를 정의해서 사용하기 보다는 관련 객체들을 일관성 있게 생성할 수 있도록 Factory 클래스를 정의하는 것이 효과적이다. 예를 들어보자. [문제상황] 엘레베이터 모터를 움직여야 할 경우 엘레베이터 브랜드에 따라 door와 motor를 별도로 설정해주어야 하는 경우에는 다음과 같이 별도로 두 개의 과정을 거쳐야해서 불편하다. 1234567891011121314151617181920212223242526272829303132333435363738394041424344..

    컴퍼지트 패턴 (Composite pattern)

    컴포지트 패턴 (Composite pattern)은 부분-전체의 관계를 갖는 객체들을 정의할 때 유용하다. 그리고 클라이언트는 전체와 부분을 구분하지 않고 동일한 인터페이스를 사용할 수 있다, 컴퍼지트 패턴은 크게 다음과 같이 구성된다. Component : Leaf 클래스와 Composite 클래스에 공통 인터페이스 Leaf: 부품들 (Component 클래스의 하위 클래스) Composite : 부품들을 사용하는 본체 클래스 여러가지 Leaf 클래스들을 가진다. 또한 Composite 클래스 역시 Component의 하위 클래스로서 여러개의 Composite를 소유할 수도 있다. 예를 들어보자 휴대폰을 조립하기 위해서 다음과 같이 휴대폰을 구성하기위해 부품들의 가격과 전력을 계산하는 구조가 있다고 가..

    Java Thread 대표 메서드 소개 및 특징 정리

    처음 입사 후 담당했던 프로젝트의 경우 단일 스레드로 동작하며, 동작 필요에 따라 Thread를 만들어주고 UI에 Lock 걸리는 것을 방지하기 위해 UI Thread 처리도 별도로 해주어야 했다. 그래서 Thread에 대해 많이 익숙 했었다. 하지만 Web 프로젝트를 진행하면서 Container에서 기본적으로 Multi-Thread를 지원해주기 때문에 동기화 처리를 제외하고는 그렇게 크게 Multi-Thread에 대해 처리를 해줄 필요가 없게 되었다. 핑계일 수 있지만 이러한 이유로 많이 잊어먹은 Thread에 대해 다시한번 정리해보았다. Thread 실행 Thread에서 start를 해야한다. start()메소드는 새로운 쓰레드가 작업을 실행하는데 필요한 호출스택(공간)을 생성한 다음 run()을 호..

반응형