자바 (12) 썸네일형 리스트형 [디자인 패턴] 프록시(Proxy) 패턴 프록시(Proxy) 패턴이란? 프록시패턴은 특정 객체를 대신하여 처리하게 함으로써 로직의 흐름을 제어하는 행동패턴이다. 사용자가 A객체의 methodA라는 메서드를 호출하려고 할 때 프록시 패턴을 사용해서 B객체의 methodB를 호출하고 추가적인 로직을 추가로 수행한 뒤 methodA를 호출하는 것이다. 이를 사용하는 이유는 대상 클래스가 민감한 정보를 가지고 있거나 원본 객체를 수정할 수 없는 상황일 때 추가적인 기능을 사용하기 위해서이다. 프록시 패턴을 사용했을 때 좋은 경우 보안 클라이언트가 작업을 수행할 수 있는 권한이 있는지 확인한 후 요청된 작업 수행 캐싱 프록시 내부에 캐시를 생성하여 데이터에 캐시가 존재하는 경우에 캐싱된 데이터를 반환하여 응답시간을 단축시킨다. 데이터 유효성 검사 프록시.. [디자인 패턴] 템플릿 메서드(Template Method) 패턴 템플릿 메서드(Template Method) 패턴이란? 템플릿 메서드 패턴은 수행하는 로직의 순서와 단계는 동일하지만 서브클래스에 그 세부 로직을 다르게 하는 디자인 패턴이다. 게임을 예시로 들면 종목은 다르지만 모든 게임은 initialize -> startPlay -> endPlay라는 순서가 동일한 play라는 행위를 수행하지만 어떤 게임(ex. Criket, Football)인지에 따라 그 세부 로직은 다르다. abstract class Game { abstract void initialize(); abstract void startPlay(); abstract void endPlay(); // 템플릿 메소드 public final void play() { // 게임 초기화 initialize().. [디자인 패턴] 팩토리 메서드(Factory Method) 패턴 팩토리 메서드(Factory Method) 패턴 이란? 팩토리 메서드 패턴은 객체 생성을 클라이언트가 new를 통해서 하는 것이 아닌 객체 생성을 전담하는 공장(Factory)을 통해 하는 것이다. 공장은 추상 클래스로 선언하고 공장에서 생성할 제품은 인터페이스로 선언해서 상속을 사용해서 (ex) UserFactory -> GoogleUserFactory, User -> GoogleUser) OCP를 위반하지 않고 기존 코드의 수정 없이 기능을 확장할 수 있다. 회원가입 기능을 위한 User와 User를 생성할 Factory인 UserFactory를 선언한다. interface User { void signup(); } abstract class UserFactory { public User newIn.. [디자인 패턴] 싱글톤(Singleton) 패턴 싱글톤(Singleton) 패턴이란? 싱글톤 패턴이란 어떤 클래스의 인스턴스는 오직 1개만 생성할 수 있는 패턴이다. 즉 어느 시점에서 호출을 해도 같은 객체임을 보장한다. 장점 메모리 관리에 효율적이다. 프로그램이 실행되고 있는 동안 단 1개의 인스턴스만 생성해서 사용하기 때문에 메모리 관리에 효율적이다. 데이터 공유가 쉽다. 다른 클래스에서 호출해도 같은 객체를 사용하기 때문에 클래스들 간의 데이터 공유가 쉽다. 단점 동시성 문제 1개의 인스턴스를 공유하기 때문에 동시성 문제가 발생할 수 있다. 테스트하기 어렵다. 싱글톤 패턴을 사용하면 객체가 전역 상태를 가지고 있기 때문에 격리된 환경에서 수행해야 하는 테스트의 경우 매번 상태를 초기화해야 한다. 상속 불가능 기본 생성자를 private으로 선언하.. 컬렉션 프레임워크(Collection Framework) 컬렉션 프레임워크? 사용자가 사용하기 쉽도록 다양한 자료구조를 모아놓은 라이브러리 크게 List, Queue, Map이 Collection 인터페이스의 서브 인터페이스로 있는데 구조상의 차이로 Map은 따로 정의된다. List의 주요 메소드 boolean add(E e) 주어진 객체를 맨 끝에 추가 void add(int index, E element) 특정 인덱스에 객체를 추가 set(int index, E element) 특정 인덱스에 저장된 객체를 주어진 객체로 바꾼다. boolean contains(Object o) 주어진 객체가 저장되어 있는지 여부 확인 E get(int index) 특정 인덱스에 저장된 객체를 리턴 isEmpty() 컬렉션이 비어있는지 여부 확인 int size() 저장되어 .. Auto Boxing/UnBoxing Boxing 원시 타입에서 Wrapper 클래스로 변환하는 작업 UnBoxing Wrapper 클래스에서 원시 타입으로 변환하는 작업 예시 Auto Boxing // Boxing Integer a = new Integer(10); // Auto Boxing Integer b = 10; Auto UnBoxing Integer a = 10; // UnBoxing int b = a.intValue(); // Auto UnBoxing int c = a; 성능 Auto Boxing/UnBoxing 기능으로 편의성은 제공되지만 내부 작업이 추가적으로 일어나기 때문에 연산 작업에 사용하는 것은 성능면에서 좋지 않다. long t = System.currentTimeMillis(); Long sum = 0L; for .. Wrapper Class Wrapper Class? 원시 타입(Primitive Type)에 대한 객체 표현을 Wrapper class라고 한다. Primitive Type -> Wrapper Class로 변환하는 것을 Boxing Wrapper Class -> Primitive Type으로 변환하는 것을 Unboxing 종류 char Character byte Byte short Short int Integer long Long float Float double Double boolean Boolean 특징 데이터를 수정할 수 없다. 값을 변경한다면 새로운 객체를 생성해서 저장해야한다. 예시 Integer a = new Integer(10) // deprecated Integer b = 10; // Auto Boxing 사용하.. 원시 타입과 참조 타입 자바의 자료형은 크게 원시 타입(Primitive type)과 (Reference type)이 있다. Java Data Type ㄴ Primitive Type ㄴ Boolean Type(boolean) ㄴ Numeric Type ㄴ Integral Type ㄴ Integer Type(short, int, long) ㄴ Floating Point Type(float, double) ㄴ Character Type(char) ㄴ Reference Type ㄴ Class Type ㄴ Interface Type ㄴ Array Type ㄴ Enum Type ㄴ etc. Primitive Type 자료형 키워드 크기 기본값 논리형 boolean 1byte false 문자형 char 2byte /u0000 정수형 by.. 이전 1 2 다음