팩토리 메서드 패턴은 객체지향 디자인 패턴이다. Factory method는 부모(상위) 클래스에 알려지지 않은 구체 클래스를 생성하는 패턴이면서 자식(하위) 클래스가 어떤 객체를 생성할지 결정하도록 하는 패턴이기도 하다. 부모(상위) 클래스 코드에 구체 클래스 이름을 감추기 위한 방법으로도 사용한다. 출처 https://ko.wikipedia.org/wiki/%ED%8C%A9%ED%86%A0%EB%A6%AC_%EB%A9%94%EC%84%9C%EB%93%9C_%ED%8C%A8%ED%84%B4
static method와 static field 만을 담은 클래스. 보통 유틸성 클래스로 helper의 성격을 갖는 클래스 DateUtility나 StringUtility 공통으로 쓰여질 메서드나 변수를 선언해 놓는 곳. 이런 클래스들은 클래스 메서드와 클래스 인스턴스이니 객체 인스턴스가 필요없는 클래스가 되는데 인스턴스화를 막기위해 abstract 클래스로 만들어 주는 방법이 있지만 해당 클래스를 자식이 상속을 받게되면 인스턴스화가 가능해진다. 프로그램이 시작되면서 (Run) .class 파일들이 JVM 으로 실행되면서 할당된 메모리에 올라갈 때 static이 붙은 멤버들은 static 영역에 할당되어 종료가 될 때까지 전역에서 사용이 가능하다. Heap 영역은 객체가 생성될 때 인스턴스화 된 애들이..
요청마다 매번 새로운 인스턴스를 생성하는 것이 아닌 동일한 속성을 가진 인스턴스를 가능한 한 공유해서 사용함으로써 메모리를 절약하는 패턴이다. 예를 들어 무지개 색의 색연필이 있고 100명의 사용자가 각각 7원색을 모두 요청 하였다고 가정했을 때, 요청마다 새로운 인스턴스를 생성하게 되면 700개의 인스턴스가 생성되어야 한다. 그러나 플라이 웨이트 패턴을 이용하여 요청된 속성의 객체를 캐싱하여 동일한 속성을 요청하였을 경우 캐싱해둔 인스턴스를 반환함으로서 7개의 인스턴스로 처리 가능하다. 플라이 웨이트 패턴 구성 공유될 객체 객체의 인스턴스를 생성하고 캐싱하여 공유해주는 팩토리 예제 코드 색연필 클래스 /** * 길이와 무게 등은 고정값이라고 가정하고 진행한다. * 색만 변경한다. */ public ..
장점 - 기능 인터페이스와 구현을 담당하는 추상 클래스로 독립적으로 구성이 된다. - 각 계층을 독립적으로 확장 및 변경이 가능해진다. - 객체 간 결합도를 낮출 수 있다. - 기존 설계에 새로운 요소들을 지속적으로 추가할 때 유용하다. - 기존 코드 변경 없이 기능을 확장할 수 있다. 단점 - 계층 구조에 새로운 구현체 및 기능 등을 추가하다보면 설계가 복잡해질 수 있다. 설계 구조 필기구를 추상 클래스로 선언하여 색연필, 샤프 등으로 사용하고 작성의 기능을 분리하여 선, 원, 사각형 등의 기능을 정의한다. 예제 코드 필기구 추상 클래스 public abstract class Pencil { protected Writing writing; protected Pencil(Writing writing) {..
싱글턴은 인스턴스를 오직 하나만 생성하여 재사용하는 클래스이며 무상태, 유일 객체이다. 인터페이스 정의 없이 클래스를 싱글턴으로 만들면 유일 객체이므로 비용 등이 고려 될 경우 테스트가 불가피해진다. 따라서, 인터페이스 정의 및 구현을 통해 Mock 객체 구현을 통해 테스트를 진행해야한다. mock 테스트 방식이 궁금하다면 하단 github 링크의 mock_test 예제 코드를 참고 바란다. 싱글턴 방식에는 필드, 정적 팩터리, 열거 타입 3가지로 볼 수 있다. 필드 방식 private 기본 생성자를 만들어 놓았기에 필드를 초기화 할 때 한번 호출되어 하나뿐임이 보장된다. 또한 API를 통해 싱글턴 클래스 임을 명확하게 드러낼 수 있고 방식이 간결하다. public class Person { public..
사용하는 API에 따라 다형성에 입각하여 Primitive type 데이터를 객체처럼 다뤄야 할 때가 있다. 메소드 매개변수 값을 객체로 넣어야 하면 기본타입 그대로 사용할 수 없기 때문에 기본타입 각각이 객체타입으로 변환할 수 있는 Wrapper Class를 가지고 있다. Primitive Type Wrapper Class byte Byte short Short int Integer long Long float Float double Double char Character boolean Boolean JDK1.4 이전에는 기본형과 참조형 간의 연산이 불가능했기 때문에 래퍼 클래스로 기본형을 객체로 만들어서 연산해야 했다. 기본형을 참조형으로 만들 때도 기본형 선언한 변숫값을 래핑클래스 인스턴스를 만들며..
프로그래밍에서 문자열을 다룰 때, 문자열의 일정한 패턴을 표현하는 일종의 형식 언어를 말한다. 정규식이라고도 부르며,보통 regex 혹은 regexp라 많이 쓴다. - 나무위키 어플리케이션에서 보통 이용자가 데이터를 입력할 때 제대로 된 값을 입력했는지 검증하는 용도로 쓰인다. 이메일 형식, 전화번호, 비밀번호 형식 등등 데이터베이스에 쌓는 자료가 의미있고 일관성이 있게 프로그래밍을 해야한다. 자주 사용하는 정규 표현식 숫자 : ^[0-9]*$ 영문 대소문자 : ^[a-zA-Z]*$ 한글 : ^[가-힣]*$ 이메일 : ^[a-zA-Z0-9+-\_.]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$ 전화번호 : ^\d{2,3}-\d{3,4}-\d{4}$ 자바에서 정규표현식을 사용할 때 주로 사용하..
의존성 주입 객체가 서로 의존하는 관계가 되도록 의존성을 주입하는 것. 객체지향에서 의존성이란 하나의 객체가 어떠한 다른 객체를 사용하고 있음을 의미한다. 의존 객체 주입 패턴을 사용하는 이유는 1:1의 강한 커플링 관계(결합도가 높은)를 루즈 커플링 관계(느슨한 결합)가 되도록 구현하는 것이다. 강한 커플링 관계를 맺게 되면 모듈간 분리가 어렵고 코드 재사용성이 떨어진다. 유지보수가 어렵다. 그렇다고 아얘 관계를 맺지 않으면 사용할 수 없으니 느슨한 관계를 맺게 만들어주어야 한다. 대표적으로 Spring 프레임워크에서 IOC 컨테이너가 이 역할을 하는데 기존 개발자가 객체를 결정 하고 생성 -> 의존성 객체 생성 -> 객체 내 메소드 호출로 모든 작업을 사용자가 제어하는 구조였다면 IOC컨테이너가 처리..