JAVA
-
싱글턴 패턴( Singleton Pattern ) 과 static - Java 디자인 패턴JAVA/Java Design Patterns 2020. 4. 28. 20:58
싱글톤 패턴이란? 싱글턴 패턴은 일부 사람들이 static은 전역 변수와 같아 보이고 객체 지향이 아니라는 주장에 이러한 비판을 해결하고자 나왔다고 볼 수 있다. 애플리케이션이 시작될 때, 어떤 클래스가 최초 한 번만 메모리를 할당(static)하고 해당 메모리에 인스턴스를 만들어 사용하고 공유하는 제한하는 패턴 즉, 싱글톤 패턴은 '하나'의 인스턴스만 생성하여 사용하고 공유하는 디자인 패턴이다. 인스턴스가 필요할 때, 똑같은 인스턴스를 만들지 않고 기존의 인스턴스를 활용하는 것! 다음과 같은 조건을 충족하는 개체에 적합하다. 1. 프로그램 실행 중에 최대 하나만 있어야 할 때 2. 이 객체에 전역적인 접근이 가능해야 할때 좋은 예시는 Logger 가 있겠다. Logger는 싱글톤으로 만들어서 error..
-
스트래티지 패턴 ( Strategy pattern )JAVA/Java Design Patterns 2020. 4. 20. 22:01
선행학습 2가지 1. 인터페이스 2. 위임 1. 인터페이스 우선 인터페이스는 기능에 대한 선언과 구현을 분리하며 기능을 사용하는 통로를 분리하는 것. 2. 위임 다음과 같이 객체의 기능을 빌려서 사용하는 것을 위임한다 라고 표현한다. 스트레티지 패턴이란? -여러 알고리즘을 하나의 추상적인 접근점(인터페이스)을 만들어 접근 점에서 서로 교환 가능하도록 하는 패턴. 클라이언트는 전략을 하나 가지고 있고 A, B, C 중 하나를 세팅할 수 있다. 하나의 Weapon을 통해서 Knife와 Sword를 바꿔 끼는 상황을 구현해보자. Person 클래스는 Weapon이라는 추상적인 접근점(인터페이스) 을 만들어 접근 점에서 서로 교환 가능(Knife or Sword) 하도록 하는 패턴이 됐다. Ax라는 무기가 추가..
-
JAVA의 Comparable, Comparator를 알아보자JAVA/Java 2020. 4. 13. 23:44
가령 "BbAaCc"와 같은 문자열을 "aAbBcC"와 같이 정렬하는 코드를 작성하는 상황이라면 아마도 정렬을 실시하는 코드를 작성하지만 비교 연산을 새로 정의하는 형태로 작성해야 할 것이다. 위 문제의 핵심은 비교 연산의 구현이다. 단순히 문자열을 char배열로 바꾸고 char형을 정렬하는데 비교하자면 ASCII값으로 비교해 버리기에 ABCabc와 같은 형태가 되기 떄문이다. 이렇게 일반적인 정렬 순서가 아닌 새로운 정렬 순서를 정의하고 싶거나 오브젝트를 정렬 시, 오브젝트 정렬에 사용될 값을 지정하는 역할을 하는 인터페이스가 Comparable과 Comparator이다. 위 코드에서 사용된 Arrays의 sort메서드는 배열의 타입이 참 조형일 경우 Comparable, Comparator 인터페이스..
-
자바의 다형성 이란?JAVA/Java 2020. 3. 30. 23:49
다형성에 대해서 알아보자. 다형성이란 하나의 메서드나 클래스가 있을 때 이것들이 다양한 방법으로 동작하는 것을 말한다. 키보드를 예로 비유를 해보자면 'ESC' 키도 'ENTER'키도 누른다는 push는 같지만 'ESC'는 취소를 'ENTER'키는 실행의 목적을 가지고 있는 것처럼 말이다. 자바를 예로 다형성을 설명하기 가장 쉬운 예는 오버로딩이 아닌가 싶다. 1. 오버로딩 오버 로딩은 같은 이름이지만 어떤 파라미터를 가지고 어떤 리턴 타입을 가지냐에 따라서 다른 메서드가 호출되는 방식이다. 역시 앞의 예와 같이 같은 이름 다른 동작이기에 다형성의 측면에서 볼 수 있는 것이다. 2. 오버 라이딩 클래스 B로 객체를 만드는데 데이터 타입이 A인 경우를 보자. ( 클래스 B를 인스턴스화 시킨 인스턴스를 ob..
-
자바의 리플렉션JAVA/Java 2020. 3. 28. 23:37
자바의 리플렉션은 구체적인 타입을 알지 못해도 그 클래스의 메서드, 타입, 변수 등을 접근할 수 있도록 해주는 자바 API이다. 좀 더 자세히 말하자면 자바에서 이미 로딩이 완료된 클래스에서 또 다른 클래스를 동적으로 로딩(Dynamic Loading) 하 여 생성자(Constructor), 필드, 메서드 등을 사용하고 변경하는 기법이다. 모든 클래스의 부모 클래스인 Object 타입으로 Car 클래스의 인스턴스는 담을 수 있지만 사용 가능한 메서드는 Object의 메서드와 변수들 뿐이고 car의 메서드는 사용할 수 없다. 위 예와 같이 구체적인 타입의 클래스를 모를 때 사용하는 것이 리플렉션이다. 그러면 구체적인 타입의 클래스를 모른다는 것은 언제 일까? 런타임에 지금 실행되고 있는 클래스를 가져와서 ..
-
자바의 추상 클래스와 인터페이스JAVA/Java 2020. 3. 28. 22:29
자바의 상속 개념에 항상 등장하는 것은 추상 클래스와 인터페이스이다. 어떤 공통점이 있고 어떤 차이가 있는지 항상 애매모호하고 따라서 내용을 정리해 보기로 했다. 추상 클래스는 하나 이상의 추상 메소드를 가지고 있는 클래스를 말하고 추상 메소드란 아직 구현되어 있지 않은 abstract으로 정의된 메서드를 말한다. 클래스에서 상속을 받는다면 추상 메서드가 있을 경우 모두 구현해주어야 한다. 추상클래스는 일반적인 메소드가메서드가 있을 수 있고 추상 메서드가 있을 수도 있다. 단 한 개라도 추상 메서드가 있 다면 그 클래스 앞에 abstract 으로 표기해야 한다. 추상 클래스는 일반 변수들을 가질 수 있다. 추상 클래스는 생성자를 가질 수도 있다. 인터페이스는 메소드들의 형태만 써놓은 것이며 역시 상속하는..
-
생성자 대신 static 팩토리 메소드 고려해보기JAVA/Effective java 2020. 2. 27. 16:15
클래스는 생성자와 별도로 정적 팩토리 메서드(static factory method)를 제공할 수 있다. 그 클래스의 인스턴스를 반환하는 단순한 정적 메서드 말이다. 클래스는 public 생성자 대신 정적 팩토리 메서드를 제공할 수 있다. 이 방식은 장단점이 존재한다. 장점 1. 이름을 가질 수 있다. 다음과 같이 생성자는 그 클래스와 동일한 이름으로만 만들어야 하지만 거기서 반환하는 객체를 잘 설명하지 못할 경우, 잘 만든 이름을 가진 static 팩토리를 사용하는 것이 보다 쉽고 읽기 편하다는 것. 또 똑같은 타입을 파라미터로 받는 생성자 2개를 만들 수 없는 경우 public static 팩토리 메서드를 사용하는 것이 유용하다. 2. 반드시 새로운 객체를 만들 필요가 없다. 불변 클래스인 경우나 매..
-
템플릿 메소드 패턴JAVA/Java Design Patterns 2020. 2. 22. 18:26
Template Method 패턴 개념 어떤 작업을 처리하는 일부분을 서브 클래스로 캡슐화 해 전체 일을 수행하는 구조는 바꾸지 않으면서 특정 단계에서 수행하는 내역을 바꾸는 패턴 즉, 전체적으로는 동일하면서 부분적으로는 다른 구문으로 구성된 메서드의 코드 중복을 최소화 할 때 유용하다. 다른 관점에서 보면 동일한 기능을 상위 클래스에서 정의하면서 확장/변화가 필요한 부분만 서브 클래스에서 구현할 수 있도록 한다. 예를 들어, 전체적인 알고리즘은 상위 클래스에서 구현하면서 다른 부분은 하위 클래스에서 구현할 수 있도록 함으로써 전체적인 알고리즘 코드를 재사용하는 데 유용하도록 한다 조건 클래스는 추상(abstract)로 만든다. 단계를 진행하는 메소드는 수정이 불가능하도록 final 키워드를 추가한다. ..